Merge with master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
This commit is contained in:
commit
0107b3cf32
6
CREDITS
6
CREDITS
|
@ -2475,13 +2475,9 @@ S: Potsdam, New York 13676
|
|||
S: USA
|
||||
|
||||
N: Dave Neuer
|
||||
E: dneuer@innovation-charter.com
|
||||
E: mr_fred_smoothie@yahoo.com
|
||||
E: dave.neuer@pobox.com
|
||||
D: Helped implement support for Compaq's H31xx series iPAQs
|
||||
D: Other mostly minor tweaks & bugfixes
|
||||
S: 325 E. Main St., Suite 3
|
||||
S: Carnegie, PA 15105
|
||||
S: USA
|
||||
|
||||
N: Michael Neuffer
|
||||
E: mike@i-Connect.Net
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
</authorgroup>
|
||||
|
||||
<copyright>
|
||||
<year>2003</year>
|
||||
<year>2003-2005</year>
|
||||
<holder>Jeff Garzik</holder>
|
||||
</copyright>
|
||||
|
||||
|
@ -44,30 +44,38 @@
|
|||
|
||||
<toc></toc>
|
||||
|
||||
<chapter id="libataThanks">
|
||||
<title>Thanks</title>
|
||||
<chapter id="libataIntroduction">
|
||||
<title>Introduction</title>
|
||||
<para>
|
||||
The bulk of the ATA knowledge comes thanks to long conversations with
|
||||
Andre Hedrick (www.linux-ide.org).
|
||||
libATA is a library used inside the Linux kernel to support ATA host
|
||||
controllers and devices. libATA provides an ATA driver API, class
|
||||
transports for ATA and ATAPI devices, and SCSI<->ATA translation
|
||||
for ATA devices according to the T10 SAT specification.
|
||||
</para>
|
||||
<para>
|
||||
Thanks to Alan Cox for pointing out similarities
|
||||
between SATA and SCSI, and in general for motivation to hack on
|
||||
libata.
|
||||
</para>
|
||||
<para>
|
||||
libata's device detection
|
||||
method, ata_pio_devchk, and in general all the early probing was
|
||||
based on extensive study of Hale Landis's probe/reset code in his
|
||||
ATADRVR driver (www.ata-atapi.com).
|
||||
This Guide documents the libATA driver API, library functions, library
|
||||
internals, and a couple sample ATA low-level drivers.
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
<chapter id="libataDriverApi">
|
||||
<title>libata Driver API</title>
|
||||
<para>
|
||||
struct ata_port_operations is defined for every low-level libata
|
||||
hardware driver, and it controls how the low-level driver
|
||||
interfaces with the ATA and SCSI layers.
|
||||
</para>
|
||||
<para>
|
||||
FIS-based drivers will hook into the system with ->qc_prep() and
|
||||
->qc_issue() high-level hooks. Hardware which behaves in a manner
|
||||
similar to PCI IDE hardware may utilize several generic helpers,
|
||||
defining at a bare minimum the bus I/O addresses of the ATA shadow
|
||||
register blocks.
|
||||
</para>
|
||||
<sect1>
|
||||
<title>struct ata_port_operations</title>
|
||||
|
||||
<sect2><title>Disable ATA port</title>
|
||||
<programlisting>
|
||||
void (*port_disable) (struct ata_port *);
|
||||
</programlisting>
|
||||
|
@ -78,6 +86,9 @@ void (*port_disable) (struct ata_port *);
|
|||
unplug).
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Post-IDENTIFY device configuration</title>
|
||||
<programlisting>
|
||||
void (*dev_config) (struct ata_port *, struct ata_device *);
|
||||
</programlisting>
|
||||
|
@ -88,6 +99,9 @@ void (*dev_config) (struct ata_port *, struct ata_device *);
|
|||
issue of SET FEATURES - XFER MODE, and prior to operation.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Set PIO/DMA mode</title>
|
||||
<programlisting>
|
||||
void (*set_piomode) (struct ata_port *, struct ata_device *);
|
||||
void (*set_dmamode) (struct ata_port *, struct ata_device *);
|
||||
|
@ -108,6 +122,9 @@ void (*post_set_mode) (struct ata_port *ap);
|
|||
->set_dma_mode() is only called if DMA is possible.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Taskfile read/write</title>
|
||||
<programlisting>
|
||||
void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
|
||||
void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
|
||||
|
@ -120,6 +137,9 @@ void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
|
|||
taskfile register values.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>ATA command execute</title>
|
||||
<programlisting>
|
||||
void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
|
||||
</programlisting>
|
||||
|
@ -129,17 +149,37 @@ void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
|
|||
->tf_load(), to be initiated in hardware.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Per-cmd ATAPI DMA capabilities filter</title>
|
||||
<programlisting>
|
||||
u8 (*check_status)(struct ata_port *ap);
|
||||
void (*dev_select)(struct ata_port *ap, unsigned int device);
|
||||
int (*check_atapi_dma) (struct ata_queued_cmd *qc);
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
Reads the Status ATA shadow register from hardware. On some
|
||||
hardware, this has the side effect of clearing the interrupt
|
||||
condition.
|
||||
Allow low-level driver to filter ATA PACKET commands, returning a status
|
||||
indicating whether or not it is OK to use DMA for the supplied PACKET
|
||||
command.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Read specific ATA shadow registers</title>
|
||||
<programlisting>
|
||||
u8 (*check_status)(struct ata_port *ap);
|
||||
u8 (*check_altstatus)(struct ata_port *ap);
|
||||
u8 (*check_err)(struct ata_port *ap);
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
Reads the Status/AltStatus/Error ATA shadow register from
|
||||
hardware. On some hardware, reading the Status register has
|
||||
the side effect of clearing the interrupt condition.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Select ATA device on bus</title>
|
||||
<programlisting>
|
||||
void (*dev_select)(struct ata_port *ap, unsigned int device);
|
||||
</programlisting>
|
||||
|
@ -147,9 +187,13 @@ void (*dev_select)(struct ata_port *ap, unsigned int device);
|
|||
<para>
|
||||
Issues the low-level hardware command(s) that causes one of N
|
||||
hardware devices to be considered 'selected' (active and
|
||||
available for use) on the ATA bus.
|
||||
available for use) on the ATA bus. This generally has no
|
||||
meaning on FIS-based devices.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Reset ATA bus</title>
|
||||
<programlisting>
|
||||
void (*phy_reset) (struct ata_port *ap);
|
||||
</programlisting>
|
||||
|
@ -162,17 +206,31 @@ void (*phy_reset) (struct ata_port *ap);
|
|||
functions ata_bus_reset() or sata_phy_reset() for this hook.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Control PCI IDE BMDMA engine</title>
|
||||
<programlisting>
|
||||
void (*bmdma_setup) (struct ata_queued_cmd *qc);
|
||||
void (*bmdma_start) (struct ata_queued_cmd *qc);
|
||||
void (*bmdma_stop) (struct ata_port *ap);
|
||||
u8 (*bmdma_status) (struct ata_port *ap);
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
When setting up an IDE BMDMA transaction, these hooks arm
|
||||
(->bmdma_setup) and fire (->bmdma_start) the hardware's DMA
|
||||
engine.
|
||||
When setting up an IDE BMDMA transaction, these hooks arm
|
||||
(->bmdma_setup), fire (->bmdma_start), and halt (->bmdma_stop)
|
||||
the hardware's DMA engine. ->bmdma_status is used to read the standard
|
||||
PCI IDE DMA Status register.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
These hooks are typically either no-ops, or simply not implemented, in
|
||||
FIS-based drivers.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>High-level taskfile hooks</title>
|
||||
<programlisting>
|
||||
void (*qc_prep) (struct ata_queued_cmd *qc);
|
||||
int (*qc_issue) (struct ata_queued_cmd *qc);
|
||||
|
@ -190,20 +248,26 @@ int (*qc_issue) (struct ata_queued_cmd *qc);
|
|||
->qc_issue is used to make a command active, once the hardware
|
||||
and S/G tables have been prepared. IDE BMDMA drivers use the
|
||||
helper function ata_qc_issue_prot() for taskfile protocol-based
|
||||
dispatch. More advanced drivers roll their own ->qc_issue
|
||||
implementation, using this as the "issue new ATA command to
|
||||
hardware" hook.
|
||||
dispatch. More advanced drivers implement their own ->qc_issue.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Timeout (error) handling</title>
|
||||
<programlisting>
|
||||
void (*eng_timeout) (struct ata_port *ap);
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
This is a high level error handling function, called from the
|
||||
error handling thread, when a command times out.
|
||||
This is a high level error handling function, called from the
|
||||
error handling thread, when a command times out. Most newer
|
||||
hardware will implement its own error handling code here. IDE BMDMA
|
||||
drivers may use the helper function ata_eng_timeout().
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Hardware interrupt handling</title>
|
||||
<programlisting>
|
||||
irqreturn_t (*irq_handler)(int, void *, struct pt_regs *);
|
||||
void (*irq_clear) (struct ata_port *);
|
||||
|
@ -216,6 +280,9 @@ void (*irq_clear) (struct ata_port *);
|
|||
is quiet.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>SATA phy read/write</title>
|
||||
<programlisting>
|
||||
u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
|
||||
void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
|
||||
|
@ -227,6 +294,9 @@ void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
|
|||
if ->phy_reset hook called the sata_phy_reset() helper function.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2><title>Init and shutdown</title>
|
||||
<programlisting>
|
||||
int (*port_start) (struct ata_port *ap);
|
||||
void (*port_stop) (struct ata_port *ap);
|
||||
|
@ -240,15 +310,17 @@ void (*host_stop) (struct ata_host_set *host_set);
|
|||
tasks.
|
||||
</para>
|
||||
<para>
|
||||
->host_stop() is called when the rmmod or hot unplug process
|
||||
begins. The hook must stop all hardware interrupts, DMA
|
||||
engines, etc.
|
||||
</para>
|
||||
<para>
|
||||
->port_stop() is called after ->host_stop(). It's sole function
|
||||
is to release DMA/memory resources, now that they are no longer
|
||||
actively being used.
|
||||
</para>
|
||||
<para>
|
||||
->host_stop() is called after all ->port_stop() calls
|
||||
have completed. The hook must finalize hardware shutdown, release DMA
|
||||
and other resources, etc.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
@ -279,4 +351,24 @@ void (*host_stop) (struct ata_host_set *host_set);
|
|||
!Idrivers/scsi/sata_sil.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="libataThanks">
|
||||
<title>Thanks</title>
|
||||
<para>
|
||||
The bulk of the ATA knowledge comes thanks to long conversations with
|
||||
Andre Hedrick (www.linux-ide.org), and long hours pondering the ATA
|
||||
and SCSI specifications.
|
||||
</para>
|
||||
<para>
|
||||
Thanks to Alan Cox for pointing out similarities
|
||||
between SATA and SCSI, and in general for motivation to hack on
|
||||
libata.
|
||||
</para>
|
||||
<para>
|
||||
libata's device detection
|
||||
method, ata_pio_devchk, and in general all the early probing was
|
||||
based on extensive study of Hale Landis's probe/reset code in his
|
||||
ATADRVR driver (www.ata-atapi.com).
|
||||
</para>
|
||||
</chapter>
|
||||
|
||||
</book>
|
||||
|
|
|
@ -271,7 +271,7 @@ patch, which certifies that you wrote it or otherwise have the right to
|
|||
pass it on as a open-source patch. The rules are pretty simple: if you
|
||||
can certify the below:
|
||||
|
||||
Developer's Certificate of Origin 1.0
|
||||
Developer's Certificate of Origin 1.1
|
||||
|
||||
By making a contribution to this project, I certify that:
|
||||
|
||||
|
@ -291,6 +291,12 @@ can certify the below:
|
|||
person who certified (a), (b) or (c) and I have not modified
|
||||
it.
|
||||
|
||||
(d) I understand and agree that this project and the contribution
|
||||
are public and that a record of the contribution (including all
|
||||
personal information I submit with it, including my sign-off) is
|
||||
maintained indefinitely and may be redistributed consistent with
|
||||
this project or the open source license(s) involved.
|
||||
|
||||
then you just add a line saying
|
||||
|
||||
Signed-off-by: Random J Developer <random@developer.org>
|
||||
|
|
|
@ -12,7 +12,7 @@ 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>
|
||||
Netdev mailing list <netdev@oss.sgi.com>
|
||||
Netdev mailing list <netdev@vger.kernel.org>
|
||||
Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||
|
||||
Please note the 'Reporting and Diagnosing Problems' section at the end
|
||||
|
|
48
MAINTAINERS
48
MAINTAINERS
|
@ -73,7 +73,7 @@ S: Status, one of the following:
|
|||
3C359 NETWORK DRIVER
|
||||
P: Mike Phillips
|
||||
M: mikep@linuxtr.net
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
L: linux-tr@linuxtr.net
|
||||
W: http://www.linuxtr.net
|
||||
S: Maintained
|
||||
|
@ -81,13 +81,13 @@ S: Maintained
|
|||
3C505 NETWORK DRIVER
|
||||
P: Philip Blundell
|
||||
M: philb@gnu.org
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
3CR990 NETWORK DRIVER
|
||||
P: David Dillow
|
||||
M: dave@thedillows.org
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
3W-XXXX ATA-RAID CONTROLLER DRIVER
|
||||
|
@ -130,7 +130,7 @@ S: Maintained
|
|||
8169 10/100/1000 GIGABIT ETHERNET DRIVER
|
||||
P: Francois Romieu
|
||||
M: romieu@fr.zoreil.com
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
|
||||
|
@ -143,7 +143,7 @@ S: Maintained
|
|||
8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
|
||||
P: Paul Gortmaker
|
||||
M: p_gortmaker@yahoo.com
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
A2232 SERIAL BOARD DRIVER
|
||||
|
@ -332,7 +332,7 @@ S: Maintained
|
|||
|
||||
ARPD SUPPORT
|
||||
P: Jonathan Layes
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
ASUS ACPI EXTRAS DRIVER
|
||||
|
@ -706,7 +706,7 @@ S: Orphaned
|
|||
|
||||
DIGI RIGHTSWITCH NETWORK DRIVER
|
||||
P: Rick Richardson
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.digi.com
|
||||
S: Orphaned
|
||||
|
||||
|
@ -812,7 +812,7 @@ S: Maintained
|
|||
ETHEREXPRESS-16 NETWORK DRIVER
|
||||
P: Philip Blundell
|
||||
M: philb@gnu.org
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
ETHERNET BRIDGE
|
||||
|
@ -875,7 +875,7 @@ S: Maintained
|
|||
FRAME RELAY DLCI/FRAD (Sangoma drivers too)
|
||||
P: Mike McLagan
|
||||
M: mike.mclagan@linux.org
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
FREEVXFS FILESYSTEM
|
||||
|
@ -1215,7 +1215,7 @@ S: Maintained
|
|||
IPX NETWORK LAYER
|
||||
P: Arnaldo Carvalho de Melo
|
||||
M: acme@conectiva.com.br
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
IRDA SUBSYSTEM
|
||||
|
@ -1482,7 +1482,7 @@ MARVELL MV64340 ETHERNET DRIVER
|
|||
P: Manish Lachwani
|
||||
M: Manish_Lachwani@pmc-sierra.com
|
||||
L: linux-mips@linux-mips.org
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
MATROX FRAMEBUFFER DRIVER
|
||||
|
@ -1592,13 +1592,13 @@ P: Andrew Morton
|
|||
M: akpm@osdl.org
|
||||
P: Jeff Garzik
|
||||
M: jgarzik@pobox.com
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
NETWORKING [GENERAL]
|
||||
P: Networking Team
|
||||
M: netdev@oss.sgi.com
|
||||
L: netdev@oss.sgi.com
|
||||
M: netdev@vger.kernel.org
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
NETWORKING [IPv4/IPv6]
|
||||
|
@ -1614,7 +1614,7 @@ P: Hideaki YOSHIFUJI
|
|||
M: yoshfuji@linux-ipv6.org
|
||||
P: Patrick McHardy
|
||||
M: kaber@coreworks.de
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
IPVS
|
||||
|
@ -1634,7 +1634,7 @@ NI5010 NETWORK DRIVER
|
|||
P: Jan-Pascal van Best and Andreas Mohr
|
||||
M: Jan-Pascal van Best <jvbest@qv3pluto.leidenuniv.nl>
|
||||
M: Andreas Mohr <100.30936@germany.net>
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
NINJA SCSI-3 / NINJA SCSI-32Bi (16bit/CardBus) PCMCIA SCSI HOST ADAPTER DRIVER
|
||||
|
@ -1676,7 +1676,7 @@ P: Peter De Shrijver
|
|||
M: p2@ace.ulyssis.student.kuleuven.ac.be
|
||||
P: Mike Phillips
|
||||
M: mikep@linuxtr.net
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
L: linux-tr@linuxtr.net
|
||||
W: http://www.linuxtr.net
|
||||
S: Maintained
|
||||
|
@ -1783,7 +1783,7 @@ S: Unmaintained
|
|||
PCNET32 NETWORK DRIVER
|
||||
P: Thomas Bogendörfer
|
||||
M: tsbogend@alpha.franken.de
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
PHRAM MTD DRIVER
|
||||
|
@ -1795,7 +1795,7 @@ S: Maintained
|
|||
POSIX CLOCKS and TIMERS
|
||||
P: George Anzinger
|
||||
M: george@mvista.com
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
PNP SUPPORT
|
||||
|
@ -1830,7 +1830,7 @@ S: Supported
|
|||
PRISM54 WIRELESS DRIVER
|
||||
P: Prism54 Development Team
|
||||
M: prism54-private@prism54.org
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://prism54.org
|
||||
S: Maintained
|
||||
|
||||
|
@ -2047,7 +2047,7 @@ SIS 900/7016 FAST ETHERNET DRIVER
|
|||
P: Daniele Venzano
|
||||
M: venza@brownhat.org
|
||||
W: http://www.brownhat.org/sis900.html
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
SIS FRAMEBUFFER DRIVER
|
||||
|
@ -2106,7 +2106,7 @@ S: Maintained
|
|||
SONIC NETWORK DRIVER
|
||||
P: Thomas Bogendoerfer
|
||||
M: tsbogend@alpha.franken.de
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
SONY VAIO CONTROL DEVICE DRIVER
|
||||
|
@ -2163,7 +2163,7 @@ S: Supported
|
|||
SPX NETWORK LAYER
|
||||
P: Jay Schulist
|
||||
M: jschlst@samba.org
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
SRM (Alpha) environment access
|
||||
|
@ -2242,7 +2242,7 @@ S: Maintained
|
|||
TOKEN-RING NETWORK DRIVER
|
||||
P: Mike Phillips
|
||||
M: mikep@linuxtr.net
|
||||
L: netdev@oss.sgi.com
|
||||
L: netdev@vger.kernel.org
|
||||
L: linux-tr@linuxtr.net
|
||||
W: http://www.linuxtr.net
|
||||
S: Maintained
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 12
|
||||
EXTRAVERSION =-rc5
|
||||
EXTRAVERSION =
|
||||
NAME=Woozy Numbat
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -497,7 +497,7 @@ source "drivers/cpufreq/Kconfig"
|
|||
|
||||
config CPU_FREQ_SA1100
|
||||
bool
|
||||
depends on CPU_FREQ && (SA1100_LART || SA1100_PLEB)
|
||||
depends on CPU_FREQ && (SA1100_H3100 || SA1100_H3600 || SA1100_H3800 || SA1100_LART || SA1100_PLEB || SA1100_BADGE4 || SA1100_HACKKIT)
|
||||
default y
|
||||
|
||||
config CPU_FREQ_SA1110
|
||||
|
@ -689,7 +689,9 @@ source "drivers/block/Kconfig"
|
|||
|
||||
source "drivers/acorn/block/Kconfig"
|
||||
|
||||
if ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX || ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC || ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE
|
||||
if PCMCIA || ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX \
|
||||
|| ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC \
|
||||
|| ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE
|
||||
source "drivers/ide/Kconfig"
|
||||
endif
|
||||
|
||||
|
|
|
@ -47,3 +47,10 @@ __XScale_start:
|
|||
orr r7, r7, #(MACH_TYPE_GTWX5715 & 0xff00)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_IXP2000
|
||||
mov r1, #-1
|
||||
mov r0, #0xd6000000
|
||||
str r1, [r0, #0x14]
|
||||
str r1, [r0, #0x18]
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc1-bk2
|
||||
# Sat Mar 26 21:32:26 2005
|
||||
# Linux kernel version: 2.6.12-rc6-git3
|
||||
# Thu Jun 9 19:00:50 2005
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -16,6 +16,7 @@ CONFIG_GENERIC_IOMAP=y
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -34,6 +35,8 @@ CONFIG_EMBEDDED=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -109,7 +112,6 @@ CONFIG_CPU_ABRT_EV4=y
|
|||
CONFIG_CPU_CACHE_V4WB=y
|
||||
CONFIG_CPU_CACHE_VIVT=y
|
||||
CONFIG_CPU_TLB_V4WB=y
|
||||
CONFIG_CPU_MINICACHE=y
|
||||
|
||||
#
|
||||
# Processor Features
|
||||
|
@ -122,6 +124,7 @@ CONFIG_FORCE_MAX_ZONEORDER=9
|
|||
# Bus support
|
||||
#
|
||||
CONFIG_ISA=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
|
@ -131,6 +134,7 @@ CONFIG_ISA=y
|
|||
#
|
||||
# Kernel Features
|
||||
#
|
||||
# CONFIG_SMP is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_DISCONTIGMEM=y
|
||||
# CONFIG_LEDS is not set
|
||||
|
@ -152,12 +156,14 @@ CONFIG_CPU_FREQ_TABLE=y
|
|||
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
# CONFIG_CPU_FREQ_STAT_DETAILS is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
|
||||
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
|
||||
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_FREQ_SA1100=y
|
||||
|
||||
#
|
||||
# Floating point emulation
|
||||
|
@ -294,7 +300,6 @@ CONFIG_PARPORT_NOT_PC=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_PARIDE is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
|
@ -428,7 +433,6 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
|
@ -526,6 +530,7 @@ CONFIG_IRDA_ULTRA=y
|
|||
# CONFIG_SMC_IRCC_FIR is not set
|
||||
# CONFIG_ALI_FIR is not set
|
||||
CONFIG_SA1100_FIR=y
|
||||
# CONFIG_VIA_FIR is not set
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_L2CAP=m
|
||||
# CONFIG_BT_SCO is not set
|
||||
|
@ -618,7 +623,6 @@ CONFIG_NET_WIRELESS=y
|
|||
#
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
@ -687,7 +691,6 @@ CONFIG_RTC=m
|
|||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -736,6 +739,7 @@ CONFIG_I2C_ELEKTOR=m
|
|||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_LM92 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
|
@ -747,6 +751,7 @@ CONFIG_I2C_ELEKTOR=m
|
|||
#
|
||||
# Other I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
|
@ -871,7 +876,6 @@ CONFIG_USB_PRINTER=m
|
|||
#
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_STORAGE_DEBUG=y
|
||||
# CONFIG_USB_STORAGE_RW_DETECT is not set
|
||||
# CONFIG_USB_STORAGE_DATAFAB is not set
|
||||
# CONFIG_USB_STORAGE_FREECOM is not set
|
||||
# CONFIG_USB_STORAGE_ISD200 is not set
|
||||
|
@ -954,9 +958,11 @@ CONFIG_USB_USS720=m
|
|||
#
|
||||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
CONFIG_USB_SERIAL_WHITEHEAT=m
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
# CONFIG_USB_SERIAL_CP2101 is not set
|
||||
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
|
||||
CONFIG_USB_SERIAL_EMPEG=m
|
||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||
|
@ -985,6 +991,7 @@ CONFIG_USB_SERIAL_KEYSPAN=m
|
|||
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
|
||||
CONFIG_USB_SERIAL_MCT_U232=m
|
||||
CONFIG_USB_SERIAL_PL2303=m
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
# CONFIG_USB_SERIAL_SAFE is not set
|
||||
# CONFIG_USB_SERIAL_TI is not set
|
||||
CONFIG_USB_SERIAL_CYBERJACK=m
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc1-bk2
|
||||
# Mon Mar 28 00:02:26 2005
|
||||
# Linux kernel version: 2.6.12-rc4
|
||||
# Thu Jun 9 01:59:03 2005
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -16,6 +16,7 @@ CONFIG_GENERIC_IOMAP=y
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -33,6 +34,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -120,6 +123,7 @@ CONFIG_CPU_MINICACHE=y
|
|||
# Bus support
|
||||
#
|
||||
CONFIG_ISA=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
|
@ -138,6 +142,7 @@ CONFIG_PCMCIA_SA1100=y
|
|||
#
|
||||
# Kernel Features
|
||||
#
|
||||
# CONFIG_SMP is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_DISCONTIGMEM=y
|
||||
# CONFIG_LEDS is not set
|
||||
|
@ -159,12 +164,13 @@ CONFIG_CPU_FREQ_TABLE=y
|
|||
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
# CONFIG_CPU_FREQ_STAT_DETAILS is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
|
||||
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
|
||||
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
|
||||
CONFIG_CPU_FREQ_SA1100=y
|
||||
|
||||
#
|
||||
# Floating point emulation
|
||||
|
@ -298,7 +304,6 @@ CONFIG_MTD_SA1100=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
|
@ -379,7 +384,6 @@ CONFIG_NET=y
|
|||
# Networking options
|
||||
#
|
||||
# CONFIG_PACKET is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
|
@ -476,6 +480,7 @@ CONFIG_IRCOMM=m
|
|||
# CONFIG_SMC_IRCC_FIR is not set
|
||||
# CONFIG_ALI_FIR is not set
|
||||
CONFIG_SA1100_FIR=m
|
||||
# CONFIG_VIA_FIR is not set
|
||||
# CONFIG_BT is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_DUMMY is not set
|
||||
|
@ -647,7 +652,6 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -676,9 +680,11 @@ 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_SA1100=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc1-bk2
|
||||
# Mon Mar 28 00:22:34 2005
|
||||
# Linux kernel version: 2.6.12-rc6-git3
|
||||
# Thu Jun 9 20:58:58 2005
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -16,6 +16,7 @@ CONFIG_GENERIC_IOMAP=y
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -34,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -109,7 +112,6 @@ CONFIG_CPU_ABRT_EV4=y
|
|||
CONFIG_CPU_CACHE_V4WB=y
|
||||
CONFIG_CPU_CACHE_VIVT=y
|
||||
CONFIG_CPU_TLB_V4WB=y
|
||||
CONFIG_CPU_MINICACHE=y
|
||||
|
||||
#
|
||||
# Processor Features
|
||||
|
@ -119,6 +121,7 @@ CONFIG_CPU_MINICACHE=y
|
|||
# Bus support
|
||||
#
|
||||
CONFIG_ISA=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
|
@ -128,6 +131,7 @@ CONFIG_ISA=y
|
|||
#
|
||||
# Kernel Features
|
||||
#
|
||||
# CONFIG_SMP is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_DISCONTIGMEM=y
|
||||
CONFIG_LEDS=y
|
||||
|
@ -151,12 +155,14 @@ CONFIG_CPU_FREQ_TABLE=y
|
|||
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
# CONFIG_CPU_FREQ_STAT_DETAILS is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
|
||||
# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
|
||||
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_FREQ_SA1100=y
|
||||
|
||||
#
|
||||
# Floating point emulation
|
||||
|
@ -280,7 +286,6 @@ CONFIG_MTD_CFI_UTIL=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
# CONFIG_BLK_DEV_LOOP is not set
|
||||
|
@ -338,7 +343,6 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
|
@ -484,7 +488,6 @@ CONFIG_SERIO=y
|
|||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
@ -533,7 +536,6 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
|
|
@ -269,7 +269,7 @@ __pabt_svc:
|
|||
add r5, sp, #S_PC
|
||||
ldmia r7, {r2 - r4} @ Get USR pc, cpsr
|
||||
|
||||
#if __LINUX_ARM_ARCH__ < 6
|
||||
#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
|
||||
@ make sure our user space atomic helper is aborted
|
||||
cmp r2, #VIRT_OFFSET
|
||||
bichs r3, r3, #PSR_Z_BIT
|
||||
|
@ -616,11 +616,17 @@ __kuser_helper_start:
|
|||
|
||||
__kuser_cmpxchg: @ 0xffff0fc0
|
||||
|
||||
#if __LINUX_ARM_ARCH__ < 6
|
||||
#if defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
|
||||
|
||||
#ifdef CONFIG_SMP /* sanity check */
|
||||
#error "CONFIG_SMP on a machine supporting pre-ARMv6 processors?"
|
||||
#endif
|
||||
/*
|
||||
* Poor you. No fast solution possible...
|
||||
* The kernel itself must perform the operation.
|
||||
* A special ghost syscall is used for that (see traps.c).
|
||||
*/
|
||||
swi #0x9ffff0
|
||||
mov pc, lr
|
||||
|
||||
#elif __LINUX_ARM_ARCH__ < 6
|
||||
|
||||
/*
|
||||
* Theory of operation:
|
||||
|
|
|
@ -464,6 +464,55 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
|
|||
#endif
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG
|
||||
/*
|
||||
* Atomically store r1 in *r2 if *r2 is equal to r0 for user space.
|
||||
* Return zero in r0 if *MEM was changed or non-zero if no exchange
|
||||
* happened. Also set the user C flag accordingly.
|
||||
* If access permissions have to be fixed up then non-zero is
|
||||
* returned and the operation has to be re-attempted.
|
||||
*
|
||||
* *NOTE*: This is a ghost syscall private to the kernel. Only the
|
||||
* __kuser_cmpxchg code in entry-armv.S should be aware of its
|
||||
* existence. Don't ever use this from user code.
|
||||
*/
|
||||
case 0xfff0:
|
||||
{
|
||||
extern void do_DataAbort(unsigned long addr, unsigned int fsr,
|
||||
struct pt_regs *regs);
|
||||
unsigned long val;
|
||||
unsigned long addr = regs->ARM_r2;
|
||||
struct mm_struct *mm = current->mm;
|
||||
pgd_t *pgd; pmd_t *pmd; pte_t *pte;
|
||||
|
||||
regs->ARM_cpsr &= ~PSR_C_BIT;
|
||||
spin_lock(&mm->page_table_lock);
|
||||
pgd = pgd_offset(mm, addr);
|
||||
if (!pgd_present(*pgd))
|
||||
goto bad_access;
|
||||
pmd = pmd_offset(pgd, addr);
|
||||
if (!pmd_present(*pmd))
|
||||
goto bad_access;
|
||||
pte = pte_offset_map(pmd, addr);
|
||||
if (!pte_present(*pte) || !pte_write(*pte))
|
||||
goto bad_access;
|
||||
val = *(unsigned long *)addr;
|
||||
val -= regs->ARM_r0;
|
||||
if (val == 0) {
|
||||
*(unsigned long *)addr = regs->ARM_r1;
|
||||
regs->ARM_cpsr |= PSR_C_BIT;
|
||||
}
|
||||
spin_unlock(&mm->page_table_lock);
|
||||
return val;
|
||||
|
||||
bad_access:
|
||||
spin_unlock(&mm->page_table_lock);
|
||||
/* simulate a read access fault */
|
||||
do_DataAbort(addr, 15 + (1 << 11), regs);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
/* Calls 9f00xx..9f07ff are defined to return -ENOSYS
|
||||
if not implemented, rather than raising SIGILL. This
|
||||
|
|
|
@ -87,9 +87,9 @@ ENTRY(__raw_writesw)
|
|||
subs r2, r2, #2
|
||||
orr ip, ip, r3, push_hbyte1
|
||||
strh ip, [r0]
|
||||
bpl 2b
|
||||
bpl 1b
|
||||
|
||||
3: tst r2, #1
|
||||
2: movne ip, r3, lsr #8
|
||||
tst r2, #1
|
||||
3: movne ip, r3, lsr #8
|
||||
strneh ip, [r0]
|
||||
mov pc, lr
|
||||
|
|
|
@ -83,7 +83,6 @@ static struct map_desc intcp_io_desc[] __initdata = {
|
|||
{ IO_ADDRESS(INTEGRATOR_UART1_BASE), INTEGRATOR_UART1_BASE, SZ_4K, MT_DEVICE },
|
||||
{ IO_ADDRESS(INTEGRATOR_DBG_BASE), INTEGRATOR_DBG_BASE, SZ_4K, MT_DEVICE },
|
||||
{ IO_ADDRESS(INTEGRATOR_GPIO_BASE), INTEGRATOR_GPIO_BASE, SZ_4K, MT_DEVICE },
|
||||
{ 0xfc900000, 0xc9000000, SZ_4K, MT_DEVICE },
|
||||
{ 0xfca00000, 0xca000000, SZ_4K, MT_DEVICE },
|
||||
{ 0xfcb00000, 0xcb000000, SZ_4K, MT_DEVICE },
|
||||
};
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
@ -106,6 +107,35 @@ static void __init lubbock_init_irq(void)
|
|||
set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int lubbock_irq_resume(struct sys_device *dev)
|
||||
{
|
||||
LUB_IRQ_MASK_EN = lubbock_irq_enabled;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct sysdev_class lubbock_irq_sysclass = {
|
||||
set_kset_name("cpld_irq"),
|
||||
.resume = lubbock_irq_resume,
|
||||
};
|
||||
|
||||
static struct sys_device lubbock_irq_device = {
|
||||
.cls = &lubbock_irq_sysclass,
|
||||
};
|
||||
|
||||
static int __init lubbock_irq_device_init(void)
|
||||
{
|
||||
int ret = sysdev_class_register(&lubbock_irq_sysclass);
|
||||
if (ret == 0)
|
||||
ret = sysdev_register(&lubbock_irq_device);
|
||||
return ret;
|
||||
}
|
||||
|
||||
device_initcall(lubbock_irq_device_init);
|
||||
|
||||
#endif
|
||||
|
||||
static int lubbock_udc_is_connected(void)
|
||||
{
|
||||
return (LUB_MISC_RD & (1 << 9)) == 0;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/bitops.h>
|
||||
|
@ -62,7 +63,6 @@ static struct irqchip mainstone_irq_chip = {
|
|||
.unmask = mainstone_unmask_irq,
|
||||
};
|
||||
|
||||
|
||||
static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
|
@ -100,6 +100,35 @@ static void __init mainstone_init_irq(void)
|
|||
set_irq_type(IRQ_GPIO(0), IRQT_FALLING);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int mainstone_irq_resume(struct sys_device *dev)
|
||||
{
|
||||
MST_INTMSKENA = mainstone_irq_enabled;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct sysdev_class mainstone_irq_sysclass = {
|
||||
set_kset_name("cpld_irq"),
|
||||
.resume = mainstone_irq_resume,
|
||||
};
|
||||
|
||||
static struct sys_device mainstone_irq_device = {
|
||||
.cls = &mainstone_irq_sysclass,
|
||||
};
|
||||
|
||||
static int __init mainstone_irq_device_init(void)
|
||||
{
|
||||
int ret = sysdev_class_register(&mainstone_irq_sysclass);
|
||||
if (ret == 0)
|
||||
ret = sysdev_register(&mainstone_irq_device);
|
||||
return ret;
|
||||
}
|
||||
|
||||
device_initcall(mainstone_irq_device_init);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
|
@ -304,6 +333,15 @@ static void __init mainstone_map_io(void)
|
|||
PWER = 0xC0000002;
|
||||
PRER = 0x00000002;
|
||||
PFER = 0x00000002;
|
||||
/* for use I SRAM as framebuffer. */
|
||||
PSLR |= 0xF04;
|
||||
PCFR = 0x66;
|
||||
/* For Keypad wakeup. */
|
||||
KPC &=~KPC_ASACT;
|
||||
KPC |=KPC_AS;
|
||||
PKWR = 0x000FD000;
|
||||
/* Need read PKWR back after set it. */
|
||||
PKWR;
|
||||
}
|
||||
|
||||
MACHINE_START(MAINSTONE, "Intel HCDDBBVA0 Development Platform (aka Mainstone)")
|
||||
|
|
|
@ -29,9 +29,6 @@
|
|||
*/
|
||||
#undef DEBUG
|
||||
|
||||
extern void pxa_cpu_suspend(void);
|
||||
extern void pxa_cpu_resume(void);
|
||||
|
||||
#define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x
|
||||
#define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x]
|
||||
|
||||
|
@ -63,6 +60,12 @@ enum { SLEEP_SAVE_START = 0,
|
|||
SLEEP_SAVE_ICMR,
|
||||
SLEEP_SAVE_CKEN,
|
||||
|
||||
#ifdef CONFIG_PXA27x
|
||||
SLEEP_SAVE_MDREFR,
|
||||
SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER,
|
||||
SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR,
|
||||
#endif
|
||||
|
||||
SLEEP_SAVE_CKSUM,
|
||||
|
||||
SLEEP_SAVE_SIZE
|
||||
|
@ -75,9 +78,7 @@ static int pxa_pm_enter(suspend_state_t state)
|
|||
unsigned long checksum = 0;
|
||||
struct timespec delta, rtc;
|
||||
int i;
|
||||
|
||||
if (state != PM_SUSPEND_MEM)
|
||||
return -EINVAL;
|
||||
extern void pxa_cpu_pm_enter(suspend_state_t state);
|
||||
|
||||
#ifdef CONFIG_IWMMXT
|
||||
/* force any iWMMXt context to ram **/
|
||||
|
@ -100,16 +101,17 @@ static int pxa_pm_enter(suspend_state_t state)
|
|||
SAVE(GAFR2_L); SAVE(GAFR2_U);
|
||||
|
||||
#ifdef CONFIG_PXA27x
|
||||
SAVE(MDREFR);
|
||||
SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3);
|
||||
SAVE(GAFR3_L); SAVE(GAFR3_U);
|
||||
SAVE(PWER); SAVE(PCFR); SAVE(PRER);
|
||||
SAVE(PFER); SAVE(PKWR);
|
||||
#endif
|
||||
|
||||
SAVE(ICMR);
|
||||
ICMR = 0;
|
||||
|
||||
SAVE(CKEN);
|
||||
CKEN = 0;
|
||||
|
||||
SAVE(PSTR);
|
||||
|
||||
/* Note: wake up source are set up in each machine specific files */
|
||||
|
@ -123,16 +125,13 @@ static int pxa_pm_enter(suspend_state_t state)
|
|||
/* Clear sleep reset status */
|
||||
RCSR = RCSR_SMR;
|
||||
|
||||
/* set resume return address */
|
||||
PSPR = virt_to_phys(pxa_cpu_resume);
|
||||
|
||||
/* before sleeping, calculate and save a checksum */
|
||||
for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
|
||||
checksum += sleep_save[i];
|
||||
sleep_save[SLEEP_SAVE_CKSUM] = checksum;
|
||||
|
||||
/* *** go zzz *** */
|
||||
pxa_cpu_suspend();
|
||||
pxa_cpu_pm_enter(state);
|
||||
|
||||
/* after sleeping, validate the checksum */
|
||||
checksum = 0;
|
||||
|
@ -145,7 +144,7 @@ static int pxa_pm_enter(suspend_state_t state)
|
|||
LUB_HEXLED = 0xbadbadc5;
|
||||
#endif
|
||||
while (1)
|
||||
pxa_cpu_suspend();
|
||||
pxa_cpu_pm_enter(state);
|
||||
}
|
||||
|
||||
/* ensure not to come back here if it wasn't intended */
|
||||
|
@ -162,8 +161,11 @@ static int pxa_pm_enter(suspend_state_t state)
|
|||
RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2);
|
||||
|
||||
#ifdef CONFIG_PXA27x
|
||||
RESTORE(MDREFR);
|
||||
RESTORE(GAFR3_L); RESTORE(GAFR3_U); RESTORE_GPLEVEL(3);
|
||||
RESTORE(GPDR3); RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3);
|
||||
RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER);
|
||||
RESTORE(PFER); RESTORE(PKWR);
|
||||
#endif
|
||||
|
||||
PSSR = PSSR_RDH | PSSR_PH;
|
||||
|
@ -197,7 +199,9 @@ unsigned long sleep_phys_sp(void *sp)
|
|||
*/
|
||||
static int pxa_pm_prepare(suspend_state_t state)
|
||||
{
|
||||
return 0;
|
||||
extern int pxa_cpu_pm_prepare(suspend_state_t state);
|
||||
|
||||
return pxa_cpu_pm_prepare(state);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
* initialization stuff for PXA machines which can be overridden later if
|
||||
* need be.
|
||||
*/
|
||||
#include <linux/config.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -102,3 +103,35 @@ unsigned int get_lcdclk_frequency_10khz(void)
|
|||
}
|
||||
|
||||
EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
int pxa_cpu_pm_prepare(suspend_state_t state)
|
||||
{
|
||||
switch (state) {
|
||||
case PM_SUSPEND_MEM:
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pxa_cpu_pm_enter(suspend_state_t state)
|
||||
{
|
||||
extern void pxa_cpu_suspend(unsigned int);
|
||||
extern void pxa_cpu_resume(void);
|
||||
|
||||
CKEN = 0;
|
||||
|
||||
switch (state) {
|
||||
case PM_SUSPEND_MEM:
|
||||
/* set resume return address */
|
||||
PSPR = virt_to_phys(pxa_cpu_resume);
|
||||
pxa_cpu_suspend(3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -120,6 +120,42 @@ EXPORT_SYMBOL(get_clk_frequency_khz);
|
|||
EXPORT_SYMBOL(get_memclk_frequency_10khz);
|
||||
EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
int pxa_cpu_pm_prepare(suspend_state_t state)
|
||||
{
|
||||
switch (state) {
|
||||
case PM_SUSPEND_MEM:
|
||||
return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
void pxa_cpu_pm_enter(suspend_state_t state)
|
||||
{
|
||||
extern void pxa_cpu_standby(void);
|
||||
extern void pxa_cpu_suspend(unsigned int);
|
||||
extern void pxa_cpu_resume(void);
|
||||
|
||||
CKEN = CKEN22_MEMC | CKEN9_OSTIMER;
|
||||
|
||||
/* ensure voltage-change sequencer not initiated, which hangs */
|
||||
PCFR &= ~PCFR_FVC;
|
||||
|
||||
/* Clear edge-detect status register. */
|
||||
PEDR = 0xDF12FE1B;
|
||||
|
||||
switch (state) {
|
||||
case PM_SUSPEND_MEM:
|
||||
/* set resume return address */
|
||||
PSPR = virt_to_phys(pxa_cpu_resume);
|
||||
pxa_cpu_suspend(3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* device registration specific to PXA27x.
|
||||
|
|
|
@ -785,6 +785,10 @@ int s3c2410_dma_free(dmach_t channel, s3c2410_dma_client_t *client)
|
|||
chan->client = NULL;
|
||||
chan->in_use = 0;
|
||||
|
||||
if (chan->irq_claimed)
|
||||
free_irq(chan->irq, (void *)chan);
|
||||
chan->irq_claimed = 0;
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -150,7 +150,7 @@ config SA1100_SSP
|
|||
|
||||
config H3600_SLEEVE
|
||||
tristate "Compaq iPAQ Handheld sleeve support"
|
||||
depends on SA1100_H3600
|
||||
depends on SA1100_H3100 || SA1100_H3600
|
||||
help
|
||||
Choose this option to enable support for extension packs (sleeves)
|
||||
for the Compaq iPAQ H3XXX series of handheld computers. This option
|
||||
|
|
|
@ -543,7 +543,7 @@ static void versatile_clcd_enable(struct clcd_fb *fb)
|
|||
val |= SYS_CLCD_MODE_5551;
|
||||
break;
|
||||
case 6:
|
||||
val |= SYS_CLCD_MODE_565_BLSB;
|
||||
val |= SYS_CLCD_MODE_565_RLSB;
|
||||
break;
|
||||
case 8:
|
||||
val |= SYS_CLCD_MODE_888;
|
||||
|
|
|
@ -228,7 +228,6 @@ config CPU_SA1100
|
|||
select CPU_CACHE_V4WB
|
||||
select CPU_CACHE_VIVT
|
||||
select CPU_TLB_V4WB
|
||||
select CPU_MINICACHE
|
||||
|
||||
# XScale
|
||||
config CPU_XSCALE
|
||||
|
@ -239,7 +238,6 @@ config CPU_XSCALE
|
|||
select CPU_ABRT_EV5T
|
||||
select CPU_CACHE_VIVT
|
||||
select CPU_TLB_V4WBI
|
||||
select CPU_MINICACHE
|
||||
|
||||
# ARMv6
|
||||
config CPU_V6
|
||||
|
@ -345,11 +343,6 @@ config CPU_TLB_V4WBI
|
|||
config CPU_TLB_V6
|
||||
bool
|
||||
|
||||
config CPU_MINICACHE
|
||||
bool
|
||||
help
|
||||
Processor has a minicache.
|
||||
|
||||
comment "Processor Features"
|
||||
|
||||
config ARM_THUMB
|
||||
|
@ -429,3 +422,11 @@ config HAS_TLS_REG
|
|||
assume directly accessing that register and always obtain the
|
||||
expected value only on ARMv7 and above.
|
||||
|
||||
config NEEDS_SYSCALL_FOR_CMPXCHG
|
||||
bool
|
||||
default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3)
|
||||
help
|
||||
SMP on a pre-ARMv6 processor? Well OK then.
|
||||
Forget about fast user space cmpxchg support.
|
||||
It is just not possible.
|
||||
|
||||
|
|
|
@ -31,8 +31,6 @@ obj-$(CONFIG_CPU_COPY_V6) += copypage-v6.o mmu.o
|
|||
obj-$(CONFIG_CPU_SA1100) += copypage-v4mc.o
|
||||
obj-$(CONFIG_CPU_XSCALE) += copypage-xscale.o
|
||||
|
||||
obj-$(CONFIG_CPU_MINICACHE) += minicache.o
|
||||
|
||||
obj-$(CONFIG_CPU_TLB_V3) += tlb-v3.o
|
||||
obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o
|
||||
obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o
|
||||
|
|
|
@ -1,113 +0,0 @@
|
|||
/*
|
||||
* linux/arch/arm/lib/copypage-xscale.S
|
||||
*
|
||||
* Copyright (C) 2001 Russell King
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/constants.h>
|
||||
|
||||
/*
|
||||
* General note:
|
||||
* We don't really want write-allocate cache behaviour for these functions
|
||||
* since that will just eat through 8K of the cache.
|
||||
*/
|
||||
|
||||
.text
|
||||
.align 5
|
||||
/*
|
||||
* XScale optimised copy_user_page
|
||||
* r0 = destination
|
||||
* r1 = source
|
||||
* r2 = virtual user address of ultimate destination page
|
||||
*
|
||||
* The source page may have some clean entries in the cache already, but we
|
||||
* can safely ignore them - break_cow() will flush them out of the cache
|
||||
* if we eventually end up using our copied page.
|
||||
*
|
||||
* What we could do is use the mini-cache to buffer reads from the source
|
||||
* page. We rely on the mini-cache being smaller than one page, so we'll
|
||||
* cycle through the complete cache anyway.
|
||||
*/
|
||||
ENTRY(xscale_mc_copy_user_page)
|
||||
stmfd sp!, {r4, r5, lr}
|
||||
mov r5, r0
|
||||
mov r0, r1
|
||||
bl map_page_minicache
|
||||
mov r1, r5
|
||||
mov lr, #PAGE_SZ/64-1
|
||||
|
||||
/*
|
||||
* Strangely enough, best performance is achieved
|
||||
* when prefetching destination as well. (NP)
|
||||
*/
|
||||
pld [r0, #0]
|
||||
pld [r0, #32]
|
||||
pld [r1, #0]
|
||||
pld [r1, #32]
|
||||
|
||||
1: pld [r0, #64]
|
||||
pld [r0, #96]
|
||||
pld [r1, #64]
|
||||
pld [r1, #96]
|
||||
|
||||
2: ldrd r2, [r0], #8
|
||||
ldrd r4, [r0], #8
|
||||
mov ip, r1
|
||||
strd r2, [r1], #8
|
||||
ldrd r2, [r0], #8
|
||||
strd r4, [r1], #8
|
||||
ldrd r4, [r0], #8
|
||||
strd r2, [r1], #8
|
||||
strd r4, [r1], #8
|
||||
mcr p15, 0, ip, c7, c10, 1 @ clean D line
|
||||
ldrd r2, [r0], #8
|
||||
mcr p15, 0, ip, c7, c6, 1 @ invalidate D line
|
||||
ldrd r4, [r0], #8
|
||||
mov ip, r1
|
||||
strd r2, [r1], #8
|
||||
ldrd r2, [r0], #8
|
||||
strd r4, [r1], #8
|
||||
ldrd r4, [r0], #8
|
||||
strd r2, [r1], #8
|
||||
strd r4, [r1], #8
|
||||
mcr p15, 0, ip, c7, c10, 1 @ clean D line
|
||||
subs lr, lr, #1
|
||||
mcr p15, 0, ip, c7, c6, 1 @ invalidate D line
|
||||
bgt 1b
|
||||
beq 2b
|
||||
|
||||
ldmfd sp!, {r4, r5, pc}
|
||||
|
||||
.align 5
|
||||
/*
|
||||
* XScale optimised clear_user_page
|
||||
* r0 = destination
|
||||
* r1 = virtual user address of ultimate destination page
|
||||
*/
|
||||
ENTRY(xscale_mc_clear_user_page)
|
||||
mov r1, #PAGE_SZ/32
|
||||
mov r2, #0
|
||||
mov r3, #0
|
||||
1: mov ip, r0
|
||||
strd r2, [r0], #8
|
||||
strd r2, [r0], #8
|
||||
strd r2, [r0], #8
|
||||
strd r2, [r0], #8
|
||||
mcr p15, 0, ip, c7, c10, 1 @ clean D line
|
||||
subs r1, r1, #1
|
||||
mcr p15, 0, ip, c7, c6, 1 @ invalidate D line
|
||||
bne 1b
|
||||
mov pc, lr
|
||||
|
||||
__INITDATA
|
||||
|
||||
.type xscale_mc_user_fns, #object
|
||||
ENTRY(xscale_mc_user_fns)
|
||||
.long xscale_mc_clear_user_page
|
||||
.long xscale_mc_copy_user_page
|
||||
.size xscale_mc_user_fns, . - xscale_mc_user_fns
|
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
* linux/arch/arm/lib/copypage-xscale.S
|
||||
*
|
||||
* Copyright (C) 1995-2005 Russell King
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This handles the mini data cache, as found on SA11x0 and XScale
|
||||
* processors. When we copy a user page page, we map it in such a way
|
||||
* that accesses to this page will not touch the main data cache, but
|
||||
* will be cached in the mini data cache. This prevents us thrashing
|
||||
* the main data cache on page faults.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
/*
|
||||
* 0xffff8000 to 0xffffffff is reserved for any ARM architecture
|
||||
* specific hacks for copying pages efficiently.
|
||||
*/
|
||||
#define COPYPAGE_MINICACHE 0xffff8000
|
||||
|
||||
#define minicache_pgprot __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | \
|
||||
L_PTE_CACHEABLE)
|
||||
|
||||
#define TOP_PTE(x) pte_offset_kernel(top_pmd, x)
|
||||
|
||||
static DEFINE_SPINLOCK(minicache_lock);
|
||||
|
||||
/*
|
||||
* XScale mini-dcache optimised copy_user_page
|
||||
*
|
||||
* We flush the destination cache lines just before we write the data into the
|
||||
* corresponding address. Since the Dcache is read-allocate, this removes the
|
||||
* Dcache aliasing issue. The writes will be forwarded to the write buffer,
|
||||
* and merged as appropriate.
|
||||
*/
|
||||
static void __attribute__((naked))
|
||||
mc_copy_user_page(void *from, void *to)
|
||||
{
|
||||
/*
|
||||
* Strangely enough, best performance is achieved
|
||||
* when prefetching destination as well. (NP)
|
||||
*/
|
||||
asm volatile(
|
||||
"stmfd sp!, {r4, r5, lr} \n\
|
||||
mov lr, %2 \n\
|
||||
pld [r0, #0] \n\
|
||||
pld [r0, #32] \n\
|
||||
pld [r1, #0] \n\
|
||||
pld [r1, #32] \n\
|
||||
1: pld [r0, #64] \n\
|
||||
pld [r0, #96] \n\
|
||||
pld [r1, #64] \n\
|
||||
pld [r1, #96] \n\
|
||||
2: ldrd r2, [r0], #8 \n\
|
||||
ldrd r4, [r0], #8 \n\
|
||||
mov ip, r1 \n\
|
||||
strd r2, [r1], #8 \n\
|
||||
ldrd r2, [r0], #8 \n\
|
||||
strd r4, [r1], #8 \n\
|
||||
ldrd r4, [r0], #8 \n\
|
||||
strd r2, [r1], #8 \n\
|
||||
strd r4, [r1], #8 \n\
|
||||
mcr p15, 0, ip, c7, c10, 1 @ clean D line\n\
|
||||
ldrd r2, [r0], #8 \n\
|
||||
mcr p15, 0, ip, c7, c6, 1 @ invalidate D line\n\
|
||||
ldrd r4, [r0], #8 \n\
|
||||
mov ip, r1 \n\
|
||||
strd r2, [r1], #8 \n\
|
||||
ldrd r2, [r0], #8 \n\
|
||||
strd r4, [r1], #8 \n\
|
||||
ldrd r4, [r0], #8 \n\
|
||||
strd r2, [r1], #8 \n\
|
||||
strd r4, [r1], #8 \n\
|
||||
mcr p15, 0, ip, c7, c10, 1 @ clean D line\n\
|
||||
subs lr, lr, #1 \n\
|
||||
mcr p15, 0, ip, c7, c6, 1 @ invalidate D line\n\
|
||||
bgt 1b \n\
|
||||
beq 2b \n\
|
||||
ldmfd sp!, {r4, r5, pc} "
|
||||
:
|
||||
: "r" (from), "r" (to), "I" (PAGE_SIZE / 64 - 1));
|
||||
}
|
||||
|
||||
void xscale_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr)
|
||||
{
|
||||
spin_lock(&minicache_lock);
|
||||
|
||||
set_pte(TOP_PTE(COPYPAGE_MINICACHE), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot));
|
||||
flush_tlb_kernel_page(COPYPAGE_MINICACHE);
|
||||
|
||||
mc_copy_user_page((void *)COPYPAGE_MINICACHE, kto);
|
||||
|
||||
spin_unlock(&minicache_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* XScale optimised clear_user_page
|
||||
*/
|
||||
void __attribute__((naked))
|
||||
xscale_mc_clear_user_page(void *kaddr, unsigned long vaddr)
|
||||
{
|
||||
asm volatile(
|
||||
"mov r1, %0 \n\
|
||||
mov r2, #0 \n\
|
||||
mov r3, #0 \n\
|
||||
1: mov ip, r0 \n\
|
||||
strd r2, [r0], #8 \n\
|
||||
strd r2, [r0], #8 \n\
|
||||
strd r2, [r0], #8 \n\
|
||||
strd r2, [r0], #8 \n\
|
||||
mcr p15, 0, ip, c7, c10, 1 @ clean D line\n\
|
||||
subs r1, r1, #1 \n\
|
||||
mcr p15, 0, ip, c7, c6, 1 @ invalidate D line\n\
|
||||
bne 1b \n\
|
||||
mov pc, lr"
|
||||
:
|
||||
: "I" (PAGE_SIZE / 32));
|
||||
}
|
||||
|
||||
struct cpu_user_fns xscale_mc_user_fns __initdata = {
|
||||
.cpu_clear_user_page = xscale_mc_clear_user_page,
|
||||
.cpu_copy_user_page = xscale_mc_copy_user_page,
|
||||
};
|
|
@ -1,73 +0,0 @@
|
|||
/*
|
||||
* linux/arch/arm/mm/minicache.c
|
||||
*
|
||||
* Copyright (C) 2001 Russell King
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This handles the mini data cache, as found on SA11x0 and XScale
|
||||
* processors. When we copy a user page page, we map it in such a way
|
||||
* that accesses to this page will not touch the main data cache, but
|
||||
* will be cached in the mini data cache. This prevents us thrashing
|
||||
* the main data cache on page faults.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
/*
|
||||
* 0xffff8000 to 0xffffffff is reserved for any ARM architecture
|
||||
* specific hacks for copying pages efficiently.
|
||||
*/
|
||||
#define minicache_address (0xffff8000)
|
||||
#define minicache_pgprot __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | \
|
||||
L_PTE_CACHEABLE)
|
||||
|
||||
static pte_t *minicache_pte;
|
||||
|
||||
/*
|
||||
* Note that this is intended to be called only from the copy_user_page
|
||||
* asm code; anything else will require special locking to prevent the
|
||||
* mini-cache space being re-used. (Note: probably preempt unsafe).
|
||||
*
|
||||
* We rely on the fact that the minicache is 2K, and we'll be pushing
|
||||
* 4K of data through it, so we don't actually have to specifically
|
||||
* flush the minicache when we change the mapping.
|
||||
*
|
||||
* Note also: assert(PAGE_OFFSET <= virt < high_memory).
|
||||
* Unsafe: preempt, kmap.
|
||||
*/
|
||||
unsigned long map_page_minicache(unsigned long virt)
|
||||
{
|
||||
set_pte(minicache_pte, pfn_pte(__pa(virt) >> PAGE_SHIFT, minicache_pgprot));
|
||||
flush_tlb_kernel_page(minicache_address);
|
||||
|
||||
return minicache_address;
|
||||
}
|
||||
|
||||
static int __init minicache_init(void)
|
||||
{
|
||||
pgd_t *pgd;
|
||||
pmd_t *pmd;
|
||||
|
||||
spin_lock(&init_mm.page_table_lock);
|
||||
|
||||
pgd = pgd_offset_k(minicache_address);
|
||||
pmd = pmd_alloc(&init_mm, pgd, minicache_address);
|
||||
if (!pmd)
|
||||
BUG();
|
||||
minicache_pte = pte_alloc_kernel(&init_mm, pmd, minicache_address);
|
||||
if (!minicache_pte)
|
||||
BUG();
|
||||
|
||||
spin_unlock(&init_mm.page_table_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
core_initcall(minicache_init);
|
|
@ -43,7 +43,7 @@ obj-$(CONFIG_SCx200) += scx200.o
|
|||
# Note: kbuild does not track this dependency due to usage of .incbin
|
||||
$(obj)/vsyscall.o: $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so
|
||||
targets += $(foreach F,int80 sysenter,vsyscall-$F.o vsyscall-$F.so)
|
||||
targets += vsyscall.lds
|
||||
targets += vsyscall-note.o vsyscall.lds
|
||||
|
||||
# The DSO images are built using a special linker script.
|
||||
quiet_cmd_syscall = SYSCALL $@
|
||||
|
|
|
@ -1222,6 +1222,7 @@ static int suspend(int vetoable)
|
|||
|
||||
save_processor_state();
|
||||
err = set_system_power_state(APM_STATE_SUSPEND);
|
||||
ignore_normal_resume = 1;
|
||||
restore_processor_state();
|
||||
|
||||
local_irq_disable();
|
||||
|
@ -1229,7 +1230,6 @@ static int suspend(int vetoable)
|
|||
spin_lock(&i8253_lock);
|
||||
reinit_timer();
|
||||
set_time();
|
||||
ignore_normal_resume = 1;
|
||||
|
||||
spin_unlock(&i8253_lock);
|
||||
write_sequnlock(&xtime_lock);
|
||||
|
|
|
@ -460,9 +460,9 @@ EX(.fail_efault, ld8 r14=[r33]) // r14 <- *set
|
|||
;;
|
||||
|
||||
st8 [r2]=r14 // update current->blocked with new mask
|
||||
cmpxchg4.acq r14=[r9],r18,ar.ccv // current->thread_info->flags <- r18
|
||||
cmpxchg4.acq r8=[r9],r18,ar.ccv // current->thread_info->flags <- r18
|
||||
;;
|
||||
cmp.ne p6,p0=r17,r14 // update failed?
|
||||
cmp.ne p6,p0=r17,r8 // update failed?
|
||||
(p6) br.cond.spnt.few 1b // yes -> retry
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
|
|
@ -825,14 +825,16 @@ apply_relocate_add (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symind
|
|||
* XXX Should have an arch-hook for running this after final section
|
||||
* addresses have been selected...
|
||||
*/
|
||||
/* See if gp can cover the entire core module: */
|
||||
uint64_t gp = (uint64_t) mod->module_core + MAX_LTOFF / 2;
|
||||
if (mod->core_size >= MAX_LTOFF)
|
||||
uint64_t gp;
|
||||
if (mod->core_size > MAX_LTOFF)
|
||||
/*
|
||||
* This takes advantage of fact that SHF_ARCH_SMALL gets allocated
|
||||
* at the end of the module.
|
||||
*/
|
||||
gp = (uint64_t) mod->module_core + mod->core_size - MAX_LTOFF / 2;
|
||||
gp = mod->core_size - MAX_LTOFF / 2;
|
||||
else
|
||||
gp = mod->core_size / 2;
|
||||
gp = (uint64_t) mod->module_core + ((gp + 7) & -8);
|
||||
mod->arch.gp = gp;
|
||||
DEBUGP("%s: placing gp at 0x%lx\n", __FUNCTION__, gp);
|
||||
}
|
||||
|
|
|
@ -635,11 +635,17 @@ ia64_flush_fph (struct task_struct *task)
|
|||
{
|
||||
struct ia64_psr *psr = ia64_psr(ia64_task_regs(task));
|
||||
|
||||
/*
|
||||
* Prevent migrating this task while
|
||||
* we're fiddling with the FPU state
|
||||
*/
|
||||
preempt_disable();
|
||||
if (ia64_is_local_fpu_owner(task) && psr->mfh) {
|
||||
psr->mfh = 0;
|
||||
task->thread.flags |= IA64_THREAD_FPH_VALID;
|
||||
ia64_save_fpu(&task->thread.fph[0]);
|
||||
}
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -720,7 +720,8 @@ cpu_init (void)
|
|||
ia64_set_kr(IA64_KR_PT_BASE, __pa(ia64_imva(empty_zero_page)));
|
||||
|
||||
/*
|
||||
* Initialize default control register to defer all speculative faults. The
|
||||
* Initialize default control register to defer speculative faults except
|
||||
* for those arising from TLB misses, which are not deferred. The
|
||||
* kernel MUST NOT depend on a particular setting of these bits (in other words,
|
||||
* the kernel must have recovery code for all speculative accesses). Turn on
|
||||
* dcr.lc as per recommendation by the architecture team. Most IA-32 apps
|
||||
|
|
|
@ -111,6 +111,24 @@ ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
|
|||
siginfo_t siginfo;
|
||||
int sig, code;
|
||||
|
||||
/* break.b always sets cr.iim to 0, which causes problems for
|
||||
* debuggers. Get the real break number from the original instruction,
|
||||
* but only for kernel code. User space break.b is left alone, to
|
||||
* preserve the existing behaviour. All break codings have the same
|
||||
* format, so there is no need to check the slot type.
|
||||
*/
|
||||
if (break_num == 0 && !user_mode(regs)) {
|
||||
struct ia64_psr *ipsr = ia64_psr(regs);
|
||||
unsigned long *bundle = (unsigned long *)regs->cr_iip;
|
||||
unsigned long slot;
|
||||
switch (ipsr->ri) {
|
||||
case 0: slot = (bundle[0] >> 5); break;
|
||||
case 1: slot = (bundle[0] >> 46) | (bundle[1] << 18); break;
|
||||
default: slot = (bundle[1] >> 23); break;
|
||||
}
|
||||
break_num = ((slot >> 36 & 1) << 20) | (slot >> 6 & 0xfffff);
|
||||
}
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */
|
||||
siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri);
|
||||
siginfo.si_imm = break_num;
|
||||
|
@ -202,13 +220,21 @@ disabled_fph_fault (struct pt_regs *regs)
|
|||
|
||||
/* first, grant user-level access to fph partition: */
|
||||
psr->dfh = 0;
|
||||
|
||||
/*
|
||||
* Make sure that no other task gets in on this processor
|
||||
* while we're claiming the FPU
|
||||
*/
|
||||
preempt_disable();
|
||||
#ifndef CONFIG_SMP
|
||||
{
|
||||
struct task_struct *fpu_owner
|
||||
= (struct task_struct *)ia64_get_kr(IA64_KR_FPU_OWNER);
|
||||
|
||||
if (ia64_is_local_fpu_owner(current))
|
||||
if (ia64_is_local_fpu_owner(current)) {
|
||||
preempt_enable_no_resched();
|
||||
return;
|
||||
}
|
||||
|
||||
if (fpu_owner)
|
||||
ia64_flush_fph(fpu_owner);
|
||||
|
@ -226,6 +252,7 @@ disabled_fph_fault (struct pt_regs *regs)
|
|||
*/
|
||||
psr->mfh = 1;
|
||||
}
|
||||
preempt_enable_no_resched();
|
||||
}
|
||||
|
||||
static inline int
|
||||
|
|
|
@ -305,8 +305,9 @@ setup_gate (void)
|
|||
struct page *page;
|
||||
|
||||
/*
|
||||
* Map the gate page twice: once read-only to export the ELF headers etc. and once
|
||||
* execute-only page to enable privilege-promotion via "epc":
|
||||
* Map the gate page twice: once read-only to export the ELF
|
||||
* headers etc. and once execute-only page to enable
|
||||
* privilege-promotion via "epc":
|
||||
*/
|
||||
page = virt_to_page(ia64_imva(__start_gate_section));
|
||||
put_kernel_page(page, GATE_ADDR, PAGE_READONLY);
|
||||
|
@ -315,6 +316,20 @@ setup_gate (void)
|
|||
put_kernel_page(page, GATE_ADDR + PAGE_SIZE, PAGE_GATE);
|
||||
#else
|
||||
put_kernel_page(page, GATE_ADDR + PERCPU_PAGE_SIZE, PAGE_GATE);
|
||||
/* Fill in the holes (if any) with read-only zero pages: */
|
||||
{
|
||||
unsigned long addr;
|
||||
|
||||
for (addr = GATE_ADDR + PAGE_SIZE;
|
||||
addr < GATE_ADDR + PERCPU_PAGE_SIZE;
|
||||
addr += PAGE_SIZE)
|
||||
{
|
||||
put_kernel_page(ZERO_PAGE(0), addr,
|
||||
PAGE_READONLY);
|
||||
put_kernel_page(ZERO_PAGE(0), addr + PERCPU_PAGE_SIZE,
|
||||
PAGE_READONLY);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ia64_patch_gate();
|
||||
}
|
||||
|
|
|
@ -222,7 +222,7 @@ void __init early_sn_setup(void)
|
|||
|
||||
extern int platform_intr_list[];
|
||||
extern nasid_t master_nasid;
|
||||
static int shub_1_1_found __initdata;
|
||||
static int __initdata shub_1_1_found = 0;
|
||||
|
||||
/*
|
||||
* sn_check_for_wars
|
||||
|
@ -251,7 +251,7 @@ static void __init sn_check_for_wars(void)
|
|||
} else {
|
||||
for_each_online_node(cnode) {
|
||||
if (is_shub_1_1(cnodeid_to_nasid(cnode)))
|
||||
sn_hub_info->shub_1_1_found = 1;
|
||||
shub_1_1_found = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:05:59 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:23 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -135,7 +137,6 @@ CONFIG_PARPORT_1284=y
|
|||
#
|
||||
CONFIG_AMIGA_FLOPPY=y
|
||||
CONFIG_AMIGA_Z2RAM=y
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_PARIDE is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
|
@ -223,17 +224,12 @@ CONFIG_SCSI_CONSTANTS=y
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_SCSI_7000FASST is not set
|
||||
# CONFIG_SCSI_AHA152X is not set
|
||||
# CONFIG_SCSI_AHA1542 is not set
|
||||
# CONFIG_SCSI_AIC7XXX_OLD is not set
|
||||
# CONFIG_SCSI_IN2000 is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DTC3280 is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380 is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
|
||||
# CONFIG_SCSI_PPA is not set
|
||||
|
@ -244,7 +240,6 @@ CONFIG_SCSI_CONSTANTS=y
|
|||
# CONFIG_SCSI_QLOGIC_FAS is not set
|
||||
# CONFIG_SCSI_SYM53C416 is not set
|
||||
# CONFIG_SCSI_T128 is not set
|
||||
# CONFIG_SCSI_U14_34F is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
CONFIG_A3000_SCSI=y
|
||||
CONFIG_A2091_SCSI=y
|
||||
|
@ -492,7 +487,6 @@ CONFIG_HYDRA=m
|
|||
CONFIG_ZORRO8390=m
|
||||
CONFIG_APNE=m
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_NET_VENDOR_SMC is not set
|
||||
# CONFIG_NET_VENDOR_RACAL is not set
|
||||
# CONFIG_AT1700 is not set
|
||||
|
@ -620,7 +614,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
# CONFIG_SERIO_PARKBD is not set
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:00 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:27 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -497,7 +499,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:18 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:32 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -531,7 +533,6 @@ CONFIG_SERIO_SERPORT=y
|
|||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:19 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:37 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -496,7 +498,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:21 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:41 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -498,7 +500,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:24 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:45 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -540,7 +542,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:28 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:50 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -498,7 +500,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:31 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:53 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -497,7 +499,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:34 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:58 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -125,7 +127,6 @@ CONFIG_FW_LOADER=m
|
|||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
|
@ -210,17 +211,12 @@ CONFIG_SCSI_CONSTANTS=y
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_SCSI_7000FASST is not set
|
||||
# CONFIG_SCSI_AHA152X is not set
|
||||
# CONFIG_SCSI_AHA1542 is not set
|
||||
# CONFIG_SCSI_AIC7XXX_OLD is not set
|
||||
# CONFIG_SCSI_IN2000 is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DTC3280 is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380 is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
|
||||
# CONFIG_SCSI_NCR53C406A is not set
|
||||
|
@ -229,7 +225,6 @@ CONFIG_SCSI_CONSTANTS=y
|
|||
# CONFIG_SCSI_QLOGIC_FAS is not set
|
||||
# CONFIG_SCSI_SYM53C416 is not set
|
||||
# CONFIG_SCSI_T128 is not set
|
||||
# CONFIG_SCSI_U14_34F is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
||||
#
|
||||
|
@ -466,7 +461,6 @@ CONFIG_EQUALIZER=m
|
|||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=m
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_NET_VENDOR_SMC is not set
|
||||
# CONFIG_NET_VENDOR_RACAL is not set
|
||||
# CONFIG_AT1700 is not set
|
||||
|
@ -570,7 +564,6 @@ CONFIG_SERIO_Q40KBD=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:37 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:35:02 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -171,7 +173,6 @@ CONFIG_SCSI_CONSTANTS=y
|
|||
#
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
CONFIG_SUN3_SCSI=y
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
|
@ -487,7 +488,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:06:40 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:35:06 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -497,7 +499,6 @@ CONFIG_SERIO_SERPORT=m
|
|||
CONFIG_SERIO_LIBPS2=m
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc2-m68k
|
||||
# Tue Apr 5 14:05:31 2005
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:17 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -33,6 +33,8 @@ CONFIG_KOBJECT_UEVENT=y
|
|||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -355,7 +357,6 @@ CONFIG_SERIO_SERPORT=y
|
|||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
|
|
@ -45,11 +45,13 @@ asmlinkage void ret_from_fork(void);
|
|||
*/
|
||||
void default_idle(void)
|
||||
{
|
||||
while(1) {
|
||||
if (need_resched())
|
||||
__asm__("stop #0x2000" : : : "cc");
|
||||
schedule();
|
||||
local_irq_disable();
|
||||
while (!need_resched()) {
|
||||
/* This stop will re-enable interrupts */
|
||||
__asm__("stop #0x2000" : : : "cc");
|
||||
local_irq_disable();
|
||||
}
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
void (*idle)(void) = default_idle;
|
||||
|
@ -63,7 +65,12 @@ void (*idle)(void) = default_idle;
|
|||
void cpu_idle(void)
|
||||
{
|
||||
/* endless idle loop with no priority at all */
|
||||
idle();
|
||||
while (1) {
|
||||
idle();
|
||||
preempt_enable_no_resched();
|
||||
schedule();
|
||||
preempt_disable();
|
||||
}
|
||||
}
|
||||
|
||||
void machine_restart(char * __unused)
|
||||
|
|
|
@ -838,6 +838,17 @@ struct cpu_spec cpu_specs[] = {
|
|||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
},
|
||||
{ /* 405EP */
|
||||
.pvr_mask = 0xffff0000,
|
||||
.pvr_value = 0x51210000,
|
||||
.cpu_name = "405EP",
|
||||
.cpu_features = CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB,
|
||||
.cpu_user_features = PPC_FEATURE_32 |
|
||||
PPC_FEATURE_HAS_MMU | PPC_FEATURE_HAS_4xxMAC,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
},
|
||||
|
||||
#endif /* CONFIG_40x */
|
||||
#ifdef CONFIG_44x
|
||||
|
|
|
@ -619,7 +619,7 @@ _GLOBAL(flush_instruction_cache)
|
|||
_GLOBAL(flush_icache_range)
|
||||
BEGIN_FTR_SECTION
|
||||
blr /* for 601, do nothing */
|
||||
END_FTR_SECTION_IFSET(PPC_FEATURE_UNIFIED_CACHE)
|
||||
END_FTR_SECTION_IFCLR(CPU_FTR_SPLIT_ID_CACHE)
|
||||
li r5,L1_CACHE_LINE_SIZE-1
|
||||
andc r3,r3,r5
|
||||
subf r4,r3,r4
|
||||
|
@ -736,7 +736,7 @@ _GLOBAL(flush_dcache_all)
|
|||
_GLOBAL(__flush_dcache_icache)
|
||||
BEGIN_FTR_SECTION
|
||||
blr /* for 601, do nothing */
|
||||
END_FTR_SECTION_IFSET(PPC_FEATURE_UNIFIED_CACHE)
|
||||
END_FTR_SECTION_IFCLR(CPU_FTR_SPLIT_ID_CACHE)
|
||||
rlwinm r3,r3,0,0,19 /* Get page base address */
|
||||
li r4,4096/L1_CACHE_LINE_SIZE /* Number of lines in a page */
|
||||
mtctr r4
|
||||
|
@ -764,7 +764,7 @@ END_FTR_SECTION_IFSET(PPC_FEATURE_UNIFIED_CACHE)
|
|||
_GLOBAL(__flush_dcache_icache_phys)
|
||||
BEGIN_FTR_SECTION
|
||||
blr /* for 601, do nothing */
|
||||
END_FTR_SECTION_IFSET(PPC_FEATURE_UNIFIED_CACHE)
|
||||
END_FTR_SECTION_IFCLR(CPU_FTR_SPLIT_ID_CACHE)
|
||||
mfmsr r10
|
||||
rlwinm r0,r10,0,28,26 /* clear DR */
|
||||
mtmsr r0
|
||||
|
|
|
@ -83,7 +83,7 @@ static u32 frequency_gpio;
|
|||
static u32 slew_done_gpio;
|
||||
static int no_schedule;
|
||||
static int has_cpu_l2lve;
|
||||
|
||||
static int is_pmu_based;
|
||||
|
||||
/* There are only two frequency states for each processor. Values
|
||||
* are in kHz for the time being.
|
||||
|
@ -463,7 +463,7 @@ static int __pmac pmac_cpufreq_suspend(struct cpufreq_policy *policy, u32 state)
|
|||
*/
|
||||
no_schedule = 1;
|
||||
sleep_freq = cur_freq;
|
||||
if (cur_freq == low_freq)
|
||||
if (cur_freq == low_freq && !is_pmu_based)
|
||||
do_set_cpu_speed(CPUFREQ_HIGH, 0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -588,6 +588,7 @@ static int __pmac pmac_cpufreq_init_MacRISC3(struct device_node *cpunode)
|
|||
return 1;
|
||||
hi_freq = (*value) / 1000;
|
||||
set_speed_proc = pmu_set_cpu_speed;
|
||||
is_pmu_based = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -692,6 +693,7 @@ static int __init pmac_cpufreq_setup(void)
|
|||
hi_freq = cur_freq;
|
||||
low_freq = 400000;
|
||||
set_speed_proc = pmu_set_cpu_speed;
|
||||
is_pmu_based = 1;
|
||||
}
|
||||
/* Else check for TiPb 400 & 500 */
|
||||
else if (machine_is_compatible("PowerBook3,2")) {
|
||||
|
@ -703,6 +705,7 @@ static int __init pmac_cpufreq_setup(void)
|
|||
hi_freq = cur_freq;
|
||||
low_freq = 300000;
|
||||
set_speed_proc = pmu_set_cpu_speed;
|
||||
is_pmu_based = 1;
|
||||
}
|
||||
/* Else check for 750FX */
|
||||
else if (PVR_VER(mfspr(SPRN_PVR)) == 0x7000)
|
||||
|
|
|
@ -11,6 +11,23 @@
|
|||
#include <linux/string.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
extern __u32 __div64_32(unsigned long long *dividend, __u32 divisor);
|
||||
|
||||
/* The unnecessary pointer compare is there
|
||||
* to check for type safety (n must be 64bit)
|
||||
*/
|
||||
# define do_div(n,base) ({ \
|
||||
__u32 __base = (base); \
|
||||
__u32 __rem; \
|
||||
(void)(((typeof((n)) *)0) == ((unsigned long long *)0)); \
|
||||
if (((n) >> 32) == 0) { \
|
||||
__rem = (__u32)(n) % __base; \
|
||||
(n) = (__u32)(n) / __base; \
|
||||
} else \
|
||||
__rem = __div64_32(&(n), __base); \
|
||||
__rem; \
|
||||
})
|
||||
|
||||
int (*prom)(void *);
|
||||
|
||||
void *chosen_handle;
|
||||
|
@ -352,7 +369,7 @@ static int skip_atoi(const char **s)
|
|||
#define SPECIAL 32 /* 0x */
|
||||
#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */
|
||||
|
||||
static char * number(char * str, long num, int base, int size, int precision, int type)
|
||||
static char * number(char * str, unsigned long long num, int base, int size, int precision, int type)
|
||||
{
|
||||
char c,sign,tmp[66];
|
||||
const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
|
||||
|
@ -367,9 +384,9 @@ static char * number(char * str, long num, int base, int size, int precision, in
|
|||
c = (type & ZEROPAD) ? '0' : ' ';
|
||||
sign = 0;
|
||||
if (type & SIGN) {
|
||||
if (num < 0) {
|
||||
if ((signed long long)num < 0) {
|
||||
sign = '-';
|
||||
num = -num;
|
||||
num = - (signed long long)num;
|
||||
size--;
|
||||
} else if (type & PLUS) {
|
||||
sign = '+';
|
||||
|
@ -389,8 +406,7 @@ static char * number(char * str, long num, int base, int size, int precision, in
|
|||
if (num == 0)
|
||||
tmp[i++]='0';
|
||||
else while (num != 0) {
|
||||
tmp[i++] = digits[num % base];
|
||||
num /= base;
|
||||
tmp[i++] = digits[do_div(num, base)];
|
||||
}
|
||||
if (i > precision)
|
||||
precision = i;
|
||||
|
@ -426,7 +442,7 @@ int sprintf(char * buf, const char *fmt, ...);
|
|||
int vsprintf(char *buf, const char *fmt, va_list args)
|
||||
{
|
||||
int len;
|
||||
unsigned long num;
|
||||
unsigned long long num;
|
||||
int i, base;
|
||||
char * str;
|
||||
const char *s;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.11
|
||||
# Thu Mar 10 16:47:04 2005
|
||||
# Linux kernel version: 2.6.12-rc6
|
||||
# Tue Jun 14 16:59:20 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -11,7 +11,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
|
@ -20,6 +20,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -31,19 +32,20 @@ CONFIG_POSIX_MQUEUE=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
|
@ -87,6 +89,8 @@ CONFIG_NR_CPUS=2
|
|||
# CONFIG_SCHED_SMT is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -97,6 +101,7 @@ CONFIG_BINFMT_ELF=y
|
|||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
|
||||
#
|
||||
|
@ -104,10 +109,6 @@ CONFIG_PCI_NAMES=y
|
|||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
|
@ -293,7 +294,6 @@ CONFIG_SCSI_SATA_SVW=y
|
|||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
|
@ -301,7 +301,6 @@ CONFIG_SCSI_SATA_SVW=y
|
|||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
|
@ -310,6 +309,7 @@ CONFIG_SCSI_QLA2XXX=y
|
|||
# CONFIG_SCSI_QLA2300 is not set
|
||||
# CONFIG_SCSI_QLA2322 is not set
|
||||
# CONFIG_SCSI_QLA6312 is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
@ -332,6 +332,7 @@ CONFIG_DM_CRYPT=m
|
|||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_ZERO=m
|
||||
# CONFIG_DM_MULTIPATH is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -394,7 +395,6 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
|
@ -564,6 +564,8 @@ CONFIG_E1000=y
|
|||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
CONFIG_TIGON3=m
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
|
@ -630,18 +632,6 @@ CONFIG_INPUT_JOYDEV=m
|
|||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_CT82C710 is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -659,6 +649,16 @@ CONFIG_INPUT_MOUSE=y
|
|||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -676,6 +676,7 @@ CONFIG_HW_CONSOLE=y
|
|||
# Non-8250 serial port support
|
||||
#
|
||||
# CONFIG_SERIAL_PMACZILOG is not set
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
@ -698,9 +699,12 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
CONFIG_AGP=m
|
||||
CONFIG_AGP_UNINORTH=m
|
||||
# CONFIG_DRM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=256
|
||||
# CONFIG_HANGCHECK_TIMER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
|
@ -730,12 +734,11 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_AMD8111 is not set
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
CONFIG_I2C_KEYWEST=y
|
||||
# CONFIG_I2C_MPC is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
# CONFIG_SCx200_ACB is not set
|
||||
|
@ -772,6 +775,7 @@ CONFIG_I2C_KEYWEST=y
|
|||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_LM92 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
|
@ -785,6 +789,7 @@ CONFIG_I2C_KEYWEST=y
|
|||
#
|
||||
# Other I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
|
@ -817,6 +822,11 @@ CONFIG_I2C_KEYWEST=y
|
|||
# Graphics support
|
||||
#
|
||||
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=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
|
@ -830,6 +840,7 @@ CONFIG_FB_OF=y
|
|||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
# CONFIG_FB_NVIDIA is not set
|
||||
CONFIG_FB_RIVA=y
|
||||
# CONFIG_FB_RIVA_I2C is not set
|
||||
# CONFIG_FB_RIVA_DEBUG is not set
|
||||
|
@ -847,6 +858,7 @@ CONFIG_FB_RADEON_I2C=y
|
|||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
|
@ -880,6 +892,8 @@ CONFIG_LCD_DEVICE=y
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -890,8 +904,6 @@ CONFIG_USB_DEVICEFS=y
|
|||
# CONFIG_USB_BANDWIDTH is not set
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
|
@ -917,7 +929,6 @@ CONFIG_USB_PRINTER=y
|
|||
#
|
||||
CONFIG_USB_STORAGE=y
|
||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||
CONFIG_USB_STORAGE_RW_DETECT=y
|
||||
CONFIG_USB_STORAGE_DATAFAB=y
|
||||
CONFIG_USB_STORAGE_FREECOM=y
|
||||
CONFIG_USB_STORAGE_ISD200=y
|
||||
|
@ -1004,8 +1015,10 @@ CONFIG_USB_MON=y
|
|||
#
|
||||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
# CONFIG_USB_SERIAL_CP2101 is not set
|
||||
CONFIG_USB_SERIAL_CYPRESS_M8=m
|
||||
CONFIG_USB_SERIAL_EMPEG=m
|
||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||
|
@ -1034,6 +1047,7 @@ CONFIG_USB_SERIAL_KLSI=m
|
|||
CONFIG_USB_SERIAL_KOBIL_SCT=m
|
||||
CONFIG_USB_SERIAL_MCT_U232=m
|
||||
CONFIG_USB_SERIAL_PL2303=m
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
CONFIG_USB_SERIAL_SAFE=m
|
||||
CONFIG_USB_SERIAL_SAFE_PADDED=y
|
||||
CONFIG_USB_SERIAL_TI=m
|
||||
|
@ -1270,11 +1284,13 @@ CONFIG_OPROFILE=y
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.11-rc3-bk6
|
||||
# Wed Feb 9 23:34:52 2005
|
||||
# Linux kernel version: 2.6.12-rc6
|
||||
# Tue Jun 14 17:01:28 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -11,7 +11,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
|
@ -20,6 +20,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -30,24 +31,29 @@ CONFIG_SYSVIPC=y
|
|||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -79,6 +85,8 @@ CONFIG_NR_CPUS=32
|
|||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_MSCHUNKS=y
|
||||
CONFIG_LPARCFG=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -89,16 +97,13 @@ CONFIG_BINFMT_ELF=y
|
|||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
|
@ -210,7 +215,6 @@ CONFIG_SCSI_FC_ATTRS=y
|
|||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
|
@ -219,7 +223,6 @@ CONFIG_SCSI_IBMVSCSI=m
|
|||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
|
@ -228,6 +231,7 @@ CONFIG_SCSI_QLA2XXX=y
|
|||
# CONFIG_SCSI_QLA2300 is not set
|
||||
# CONFIG_SCSI_QLA2322 is not set
|
||||
# CONFIG_SCSI_QLA6312 is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
@ -250,6 +254,7 @@ CONFIG_DM_CRYPT=m
|
|||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_ZERO=m
|
||||
# CONFIG_DM_MULTIPATH is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -280,7 +285,6 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
|
@ -445,7 +449,6 @@ CONFIG_PCNET32=y
|
|||
# CONFIG_DGRS is not set
|
||||
# CONFIG_EEPRO100 is not set
|
||||
CONFIG_E100=y
|
||||
# CONFIG_E100_NAPI is not set
|
||||
# CONFIG_FEALNX is not set
|
||||
# CONFIG_NATSEMI is not set
|
||||
# CONFIG_NE2K_PCI is not set
|
||||
|
@ -471,6 +474,7 @@ CONFIG_E1000=m
|
|||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
# CONFIG_TIGON3 is not set
|
||||
# CONFIG_BNX2 is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
|
@ -538,14 +542,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
|||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -555,6 +551,12 @@ CONFIG_SOUND_GAMEPORT=y
|
|||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -570,6 +572,7 @@ CONFIG_SOUND_GAMEPORT=y
|
|||
#
|
||||
CONFIG_SERIAL_CORE=m
|
||||
CONFIG_SERIAL_ICOM=m
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
@ -592,9 +595,16 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=256
|
||||
# CONFIG_HANGCHECK_TIMER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -633,13 +643,9 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
# CONFIG_USB is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
||||
#
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
|
@ -848,10 +854,13 @@ CONFIG_OPROFILE=y
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -881,6 +890,7 @@ CONFIG_CRYPTO_SHA1=m
|
|||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.11-rc3-bk6
|
||||
# Wed Feb 9 23:34:53 2005
|
||||
# Linux kernel version: 2.6.12-rc6
|
||||
# Tue Jun 14 17:12:48 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -11,7 +11,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
|
@ -20,6 +20,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -30,24 +31,28 @@ CONFIG_SYSVIPC=y
|
|||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -84,6 +89,8 @@ CONFIG_NR_CPUS=2
|
|||
# CONFIG_SCHED_SMT is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -94,16 +101,13 @@ CONFIG_BINFMT_ELF=y
|
|||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
|
@ -261,7 +265,6 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
|
@ -376,6 +379,8 @@ CONFIG_E1000=y
|
|||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
# CONFIG_TIGON3 is not set
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
|
@ -431,14 +436,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1200
|
|||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_SERIO_I8042 is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -448,6 +445,12 @@ CONFIG_SOUND_GAMEPORT=y
|
|||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -469,7 +472,7 @@ CONFIG_SERIAL_8250_NR_UARTS=4
|
|||
#
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_PMACZILOG is not set
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
@ -492,8 +495,15 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_HANGCHECK_TIMER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -518,8 +528,8 @@ CONFIG_I2C_ALGOBIT=y
|
|||
CONFIG_I2C_AMD8111=y
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
# CONFIG_I2C_MPC is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
|
@ -545,7 +555,9 @@ CONFIG_I2C_AMD8111=y
|
|||
# CONFIG_SENSORS_ASB100 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_FSCHER is not set
|
||||
# CONFIG_SENSORS_FSCPOS is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
|
@ -556,9 +568,11 @@ CONFIG_I2C_AMD8111=y
|
|||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_LM92 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
|
@ -568,6 +582,7 @@ CONFIG_I2C_AMD8111=y
|
|||
#
|
||||
# Other I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
|
@ -615,6 +630,8 @@ CONFIG_DUMMY_CONSOLE=y
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -625,8 +642,6 @@ CONFIG_USB_DEVICEFS=y
|
|||
# CONFIG_USB_BANDWIDTH is not set
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
|
@ -635,6 +650,8 @@ CONFIG_USB_EHCI_HCD=y
|
|||
CONFIG_USB_EHCI_SPLIT_ISO=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
CONFIG_USB_UHCI_HCD=y
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
|
||||
|
@ -688,6 +705,7 @@ CONFIG_USB_HIDINPUT=y
|
|||
CONFIG_USB_PEGASUS=y
|
||||
# CONFIG_USB_RTL8150 is not set
|
||||
# CONFIG_USB_USBNET is not set
|
||||
CONFIG_USB_MON=y
|
||||
|
||||
#
|
||||
# USB port drivers
|
||||
|
@ -699,8 +717,10 @@ CONFIG_USB_PEGASUS=y
|
|||
CONFIG_USB_SERIAL=y
|
||||
# CONFIG_USB_SERIAL_CONSOLE is not set
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_BELKIN is not set
|
||||
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
|
||||
# CONFIG_USB_SERIAL_CP2101 is not set
|
||||
CONFIG_USB_SERIAL_CYPRESS_M8=m
|
||||
# CONFIG_USB_SERIAL_EMPEG is not set
|
||||
# CONFIG_USB_SERIAL_FTDI_SIO is not set
|
||||
|
@ -729,6 +749,7 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
|||
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
|
||||
# CONFIG_USB_SERIAL_MCT_U232 is not set
|
||||
# CONFIG_USB_SERIAL_PL2303 is not set
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
# CONFIG_USB_SERIAL_SAFE is not set
|
||||
CONFIG_USB_SERIAL_TI=m
|
||||
# CONFIG_USB_SERIAL_CYBERJACK is not set
|
||||
|
@ -750,6 +771,7 @@ CONFIG_USB_EZUSB=y
|
|||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
||||
#
|
||||
|
@ -936,10 +958,13 @@ CONFIG_NLS_UTF8=y
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
CONFIG_DEBUG_SLAB=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -971,6 +996,7 @@ CONFIG_CRYPTO_MD5=y
|
|||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.11-rc3-bk6
|
||||
# Wed Feb 9 23:34:54 2005
|
||||
# Linux kernel version: 2.6.12-rc6
|
||||
# Tue Jun 14 17:13:47 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -11,7 +11,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
|
@ -20,6 +20,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -30,24 +31,29 @@ CONFIG_SYSVIPC=y
|
|||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -89,9 +95,12 @@ CONFIG_SCHED_SMT=y
|
|||
CONFIG_EEH=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_PPC_RTAS=y
|
||||
CONFIG_RTAS_PROC=y
|
||||
CONFIG_RTAS_FLASH=m
|
||||
CONFIG_SCANLOG=m
|
||||
CONFIG_LPARCFG=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -102,6 +111,7 @@ CONFIG_BINFMT_ELF=y
|
|||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
|
||||
#
|
||||
|
@ -109,10 +119,6 @@ CONFIG_HOTPLUG_CPU=y
|
|||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
|
@ -147,11 +153,10 @@ CONFIG_FW_LOADER=y
|
|||
#
|
||||
CONFIG_PARPORT=m
|
||||
CONFIG_PARPORT_PC=m
|
||||
CONFIG_PARPORT_PC_CML1=m
|
||||
# CONFIG_PARPORT_SERIAL is not set
|
||||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
# CONFIG_PARPORT_OTHER is not set
|
||||
# CONFIG_PARPORT_GSC is not set
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
|
||||
#
|
||||
|
@ -293,7 +298,6 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
|||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
|
@ -310,7 +314,6 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
|||
CONFIG_SCSI_IPR=y
|
||||
CONFIG_SCSI_IPR_TRACE=y
|
||||
CONFIG_SCSI_IPR_DUMP=y
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
|
@ -319,6 +322,7 @@ CONFIG_SCSI_QLA22XX=m
|
|||
CONFIG_SCSI_QLA2300=m
|
||||
CONFIG_SCSI_QLA2322=m
|
||||
CONFIG_SCSI_QLA6312=m
|
||||
CONFIG_SCSI_LPFC=m
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
@ -341,6 +345,8 @@ CONFIG_DM_CRYPT=m
|
|||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_MULTIPATH_EMC=m
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -371,7 +377,6 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
|
@ -539,7 +544,6 @@ CONFIG_PCNET32=y
|
|||
# CONFIG_DGRS is not set
|
||||
# CONFIG_EEPRO100 is not set
|
||||
CONFIG_E100=y
|
||||
# CONFIG_E100_NAPI is not set
|
||||
# CONFIG_FEALNX is not set
|
||||
# CONFIG_NATSEMI is not set
|
||||
# CONFIG_NE2K_PCI is not set
|
||||
|
@ -565,6 +569,8 @@ CONFIG_E1000=y
|
|||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=y
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
|
@ -635,20 +641,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
|||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_I8042=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_CT82C710 is not set
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -668,6 +660,18 @@ CONFIG_INPUT_MISC=y
|
|||
CONFIG_INPUT_PCSPKR=m
|
||||
# CONFIG_INPUT_UINPUT is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_I8042=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -689,8 +693,8 @@ CONFIG_SERIAL_8250_NR_UARTS=4
|
|||
#
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_PMACZILOG is not set
|
||||
CONFIG_SERIAL_ICOM=m
|
||||
# CONFIG_SERIAL_JSM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
@ -718,9 +722,16 @@ CONFIG_HVCS=m
|
|||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=1024
|
||||
# CONFIG_HANGCHECK_TIMER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -745,8 +756,8 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_AMD8111 is not set
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
# CONFIG_I2C_MPC is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
|
@ -773,7 +784,9 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_SENSORS_ASB100 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_FSCHER is not set
|
||||
# CONFIG_SENSORS_FSCPOS is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
|
@ -784,9 +797,11 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_LM92 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
|
@ -796,6 +811,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
#
|
||||
# Other I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
|
@ -828,8 +844,13 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# Graphics support
|
||||
#
|
||||
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=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
# CONFIG_FB_PM2 is not set
|
||||
# CONFIG_FB_CYBER2000 is not set
|
||||
|
@ -838,6 +859,7 @@ CONFIG_FB_OF=y
|
|||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
# CONFIG_FB_NVIDIA is not set
|
||||
# CONFIG_FB_RIVA is not set
|
||||
CONFIG_FB_MATROX=y
|
||||
CONFIG_FB_MATROX_MILLENIUM=y
|
||||
|
@ -858,6 +880,7 @@ CONFIG_FB_RADEON_I2C=y
|
|||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
|
@ -891,6 +914,8 @@ CONFIG_LCD_DEVICE=y
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -901,8 +926,6 @@ CONFIG_USB_DEVICEFS=y
|
|||
# CONFIG_USB_BANDWIDTH is not set
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
|
@ -911,6 +934,8 @@ CONFIG_USB_EHCI_HCD=y
|
|||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
# CONFIG_USB_UHCI_HCD is not set
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
|
||||
|
@ -926,12 +951,11 @@ CONFIG_USB_OHCI_HCD=y
|
|||
#
|
||||
CONFIG_USB_STORAGE=y
|
||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||
# CONFIG_USB_STORAGE_RW_DETECT is not set
|
||||
# CONFIG_USB_STORAGE_DATAFAB is not set
|
||||
# CONFIG_USB_STORAGE_FREECOM is not set
|
||||
# CONFIG_USB_STORAGE_ISD200 is not set
|
||||
# CONFIG_USB_STORAGE_DPCM is not set
|
||||
# CONFIG_USB_STORAGE_HP8200e is not set
|
||||
# CONFIG_USB_STORAGE_USBAT is not set
|
||||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
|
@ -975,6 +999,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_PEGASUS is not set
|
||||
# CONFIG_USB_RTL8150 is not set
|
||||
# CONFIG_USB_USBNET is not set
|
||||
CONFIG_USB_MON=y
|
||||
|
||||
#
|
||||
# USB port drivers
|
||||
|
@ -1000,6 +1025,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
||||
#
|
||||
|
@ -1208,10 +1234,13 @@ CONFIG_OPROFILE=y
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1243,6 +1272,7 @@ CONFIG_CRYPTO_SHA1=m
|
|||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.11-rc3-bk6
|
||||
# Wed Feb 9 23:34:51 2005
|
||||
# Linux kernel version: 2.6.12-rc5-git9
|
||||
# Sun Jun 5 09:26:47 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -11,7 +11,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
|||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_FRAME_POINTER=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
|
@ -20,6 +20,7 @@ CONFIG_FORCE_MAX_ZONEORDER=13
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -30,24 +31,28 @@ CONFIG_SYSVIPC=y
|
|||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -91,9 +96,12 @@ CONFIG_DISCONTIGMEM=y
|
|||
CONFIG_EEH=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_PPC_RTAS=y
|
||||
CONFIG_RTAS_PROC=y
|
||||
CONFIG_RTAS_FLASH=m
|
||||
CONFIG_SCANLOG=m
|
||||
CONFIG_LPARCFG=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -104,6 +112,7 @@ CONFIG_BINFMT_ELF=y
|
|||
CONFIG_BINFMT_MISC=m
|
||||
# CONFIG_PCI_LEGACY_PROC is not set
|
||||
# CONFIG_PCI_NAMES is not set
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
|
||||
#
|
||||
|
@ -111,10 +120,6 @@ CONFIG_HOTPLUG_CPU=y
|
|||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
|
||||
#
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
|
@ -149,11 +154,10 @@ CONFIG_FW_LOADER=y
|
|||
#
|
||||
CONFIG_PARPORT=m
|
||||
CONFIG_PARPORT_PC=m
|
||||
CONFIG_PARPORT_PC_CML1=m
|
||||
# CONFIG_PARPORT_SERIAL is not set
|
||||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
# CONFIG_PARPORT_OTHER is not set
|
||||
# CONFIG_PARPORT_GSC is not set
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
|
||||
#
|
||||
|
@ -301,6 +305,7 @@ CONFIG_SCSI_SATA_SVW=y
|
|||
# CONFIG_SCSI_ATA_PIIX is not set
|
||||
# CONFIG_SCSI_SATA_NV is not set
|
||||
# CONFIG_SCSI_SATA_PROMISE is not set
|
||||
# CONFIG_SCSI_SATA_QSTOR is not set
|
||||
# CONFIG_SCSI_SATA_SX4 is not set
|
||||
# CONFIG_SCSI_SATA_SIL is not set
|
||||
# CONFIG_SCSI_SATA_SIS is not set
|
||||
|
@ -310,7 +315,6 @@ CONFIG_SCSI_SATA_SVW=y
|
|||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
|
@ -327,7 +331,6 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
|||
CONFIG_SCSI_IPR=y
|
||||
CONFIG_SCSI_IPR_TRACE=y
|
||||
CONFIG_SCSI_IPR_DUMP=y
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
|
@ -336,6 +339,7 @@ CONFIG_SCSI_QLA22XX=m
|
|||
CONFIG_SCSI_QLA2300=m
|
||||
CONFIG_SCSI_QLA2322=m
|
||||
CONFIG_SCSI_QLA6312=m
|
||||
CONFIG_SCSI_LPFC=m
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
CONFIG_SCSI_DEBUG=m
|
||||
|
@ -358,6 +362,8 @@ CONFIG_DM_CRYPT=m
|
|||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_ZERO=m
|
||||
CONFIG_DM_MULTIPATH=m
|
||||
CONFIG_DM_MULTIPATH_EMC=m
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -405,6 +411,7 @@ CONFIG_IEEE1394_AMDTP=m
|
|||
#
|
||||
CONFIG_ADB=y
|
||||
CONFIG_ADB_PMU=y
|
||||
CONFIG_PMAC_SMU=y
|
||||
# CONFIG_PMAC_PBOOK is not set
|
||||
# CONFIG_PMAC_BACKLIGHT is not set
|
||||
# CONFIG_INPUT_ADBHID is not set
|
||||
|
@ -420,7 +427,6 @@ CONFIG_NET=y
|
|||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
|
@ -588,7 +594,6 @@ CONFIG_PCNET32=y
|
|||
# CONFIG_DGRS is not set
|
||||
# CONFIG_EEPRO100 is not set
|
||||
CONFIG_E100=y
|
||||
# CONFIG_E100_NAPI is not set
|
||||
# CONFIG_FEALNX is not set
|
||||
# CONFIG_NATSEMI is not set
|
||||
# CONFIG_NE2K_PCI is not set
|
||||
|
@ -614,6 +619,8 @@ CONFIG_E1000=y
|
|||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=y
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
|
@ -682,20 +689,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
|||
CONFIG_INPUT_EVDEV=m
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_I8042=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_CT82C710 is not set
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
|
@ -715,6 +708,18 @@ CONFIG_INPUT_MISC=y
|
|||
CONFIG_INPUT_PCSPKR=m
|
||||
# CONFIG_INPUT_UINPUT is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_I8042=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
# CONFIG_SERIO_PARKBD is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
|
@ -738,6 +743,7 @@ CONFIG_SERIAL_CORE=y
|
|||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_PMACZILOG is not set
|
||||
CONFIG_SERIAL_ICOM=m
|
||||
CONFIG_SERIAL_JSM=m
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
@ -766,9 +772,16 @@ CONFIG_HVCS=m
|
|||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=256
|
||||
# CONFIG_HANGCHECK_TIMER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -793,9 +806,9 @@ CONFIG_I2C_ALGOBIT=y
|
|||
CONFIG_I2C_AMD8111=y
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
CONFIG_I2C_KEYWEST=y
|
||||
# CONFIG_I2C_MPC is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
|
@ -822,7 +835,9 @@ CONFIG_I2C_KEYWEST=y
|
|||
# CONFIG_SENSORS_ASB100 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_FSCHER is not set
|
||||
# CONFIG_SENSORS_FSCPOS is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
|
@ -833,9 +848,11 @@ CONFIG_I2C_KEYWEST=y
|
|||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_LM92 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
|
@ -845,6 +862,7 @@ CONFIG_I2C_KEYWEST=y
|
|||
#
|
||||
# Other I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
|
@ -877,6 +895,11 @@ CONFIG_I2C_KEYWEST=y
|
|||
# Graphics support
|
||||
#
|
||||
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=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
|
@ -890,9 +913,8 @@ CONFIG_FB_OF=y
|
|||
# CONFIG_FB_ASILIANT is not set
|
||||
# CONFIG_FB_IMSTT is not set
|
||||
# CONFIG_FB_VGA16 is not set
|
||||
CONFIG_FB_RIVA=y
|
||||
CONFIG_FB_RIVA_I2C=y
|
||||
# CONFIG_FB_RIVA_DEBUG is not set
|
||||
# CONFIG_FB_NVIDIA is not set
|
||||
# CONFIG_FB_RIVA is not set
|
||||
CONFIG_FB_MATROX=y
|
||||
CONFIG_FB_MATROX_MILLENIUM=y
|
||||
CONFIG_FB_MATROX_MYSTIQUE=y
|
||||
|
@ -913,6 +935,7 @@ CONFIG_FB_RADEON_I2C=y
|
|||
# CONFIG_FB_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
|
@ -946,6 +969,8 @@ CONFIG_LCD_DEVICE=y
|
|||
#
|
||||
# USB support
|
||||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
|
||||
|
@ -956,8 +981,6 @@ CONFIG_USB_DEVICEFS=y
|
|||
# CONFIG_USB_BANDWIDTH is not set
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
|
@ -966,6 +989,8 @@ CONFIG_USB_EHCI_HCD=y
|
|||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
# CONFIG_USB_UHCI_HCD is not set
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
|
||||
|
@ -981,12 +1006,11 @@ CONFIG_USB_OHCI_HCD=y
|
|||
#
|
||||
CONFIG_USB_STORAGE=m
|
||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||
CONFIG_USB_STORAGE_RW_DETECT=y
|
||||
# CONFIG_USB_STORAGE_DATAFAB is not set
|
||||
# CONFIG_USB_STORAGE_FREECOM is not set
|
||||
# CONFIG_USB_STORAGE_ISD200 is not set
|
||||
# CONFIG_USB_STORAGE_DPCM is not set
|
||||
# CONFIG_USB_STORAGE_HP8200e is not set
|
||||
# CONFIG_USB_STORAGE_USBAT is not set
|
||||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
|
@ -1030,6 +1054,7 @@ CONFIG_USB_HIDDEV=y
|
|||
CONFIG_USB_PEGASUS=y
|
||||
# CONFIG_USB_RTL8150 is not set
|
||||
# CONFIG_USB_USBNET is not set
|
||||
# CONFIG_USB_MON is not set
|
||||
|
||||
#
|
||||
# USB port drivers
|
||||
|
@ -1055,6 +1080,7 @@ CONFIG_USB_PEGASUS=y
|
|||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
||||
#
|
||||
|
@ -1276,10 +1302,13 @@ CONFIG_OPROFILE=y
|
|||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1311,6 +1340,7 @@ CONFIG_CRYPTO_SHA1=m
|
|||
CONFIG_CRYPTO_SHA256=m
|
||||
CONFIG_CRYPTO_SHA512=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_DES=y
|
||||
CONFIG_CRYPTO_BLOWFISH=m
|
||||
CONFIG_CRYPTO_TWOFISH=m
|
||||
|
|
|
@ -436,15 +436,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
|
|||
REST_8GPRS(14, r1)
|
||||
REST_10GPRS(22, r1)
|
||||
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
clrrdi r7,r1,THREAD_SHIFT /* get current_thread_info() */
|
||||
ld r7,TI_FLAGS(r7) /* Get run light flag */
|
||||
mfspr r9,CTRLF
|
||||
srdi r7,r7,TIF_RUN_LIGHT
|
||||
insrdi r9,r7,1,63 /* Insert run light into CTRL */
|
||||
mtspr CTRLT,r9
|
||||
#endif
|
||||
|
||||
/* convert old thread to its task_struct for return value */
|
||||
addi r3,r3,-THREAD
|
||||
ld r7,_NIP(r1) /* Return to _switch caller in new task */
|
||||
|
|
|
@ -626,10 +626,10 @@ system_reset_iSeries:
|
|||
lhz r24,PACAPACAINDEX(r13) /* Get processor # */
|
||||
cmpwi 0,r24,0 /* Are we processor 0? */
|
||||
beq .__start_initialization_iSeries /* Start up the first processor */
|
||||
mfspr r4,CTRLF
|
||||
li r5,RUNLATCH /* Turn off the run light */
|
||||
mfspr r4,SPRN_CTRLF
|
||||
li r5,CTRL_RUNLATCH /* Turn off the run light */
|
||||
andc r4,r4,r5
|
||||
mtspr CTRLT,r4
|
||||
mtspr SPRN_CTRLT,r4
|
||||
|
||||
1:
|
||||
HMT_LOW
|
||||
|
@ -2082,9 +2082,9 @@ _GLOBAL(hmt_start_secondary)
|
|||
mfspr r4, HID0
|
||||
ori r4, r4, 0x1
|
||||
mtspr HID0, r4
|
||||
mfspr r4, CTRLF
|
||||
mfspr r4, SPRN_CTRLF
|
||||
oris r4, r4, 0x40
|
||||
mtspr CTRLT, r4
|
||||
mtspr SPRN_CTRLT, r4
|
||||
blr
|
||||
#endif
|
||||
|
||||
|
|
|
@ -852,6 +852,28 @@ static int __init iSeries_src_init(void)
|
|||
|
||||
late_initcall(iSeries_src_init);
|
||||
|
||||
static int set_spread_lpevents(char *str)
|
||||
{
|
||||
unsigned long i;
|
||||
unsigned long val = simple_strtoul(str, NULL, 0);
|
||||
|
||||
/*
|
||||
* The parameter is the number of processors to share in processing
|
||||
* lp events.
|
||||
*/
|
||||
if (( val > 0) && (val <= NR_CPUS)) {
|
||||
for (i = 1; i < val; ++i)
|
||||
paca[i].lpqueue_ptr = paca[0].lpqueue_ptr;
|
||||
|
||||
printk("lpevent processing spread over %ld processors\n", val);
|
||||
} else {
|
||||
printk("invalid spread_lpevents %ld\n", val);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
__setup("spread_lpevents=", set_spread_lpevents);
|
||||
|
||||
void __init iSeries_early_setup(void)
|
||||
{
|
||||
iSeries_fixup_klimit();
|
||||
|
|
|
@ -75,13 +75,9 @@ static int iSeries_idle(void)
|
|||
{
|
||||
struct paca_struct *lpaca;
|
||||
long oldval;
|
||||
unsigned long CTRL;
|
||||
|
||||
/* ensure iSeries run light will be out when idle */
|
||||
clear_thread_flag(TIF_RUN_LIGHT);
|
||||
CTRL = mfspr(CTRLF);
|
||||
CTRL &= ~RUNLATCH;
|
||||
mtspr(CTRLT, CTRL);
|
||||
ppc64_runlatch_off();
|
||||
|
||||
lpaca = get_paca();
|
||||
|
||||
|
@ -111,7 +107,9 @@ static int iSeries_idle(void)
|
|||
}
|
||||
}
|
||||
|
||||
ppc64_runlatch_on();
|
||||
schedule();
|
||||
ppc64_runlatch_off();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -45,12 +45,17 @@ static struct pt_regs jprobe_saved_regs;
|
|||
|
||||
int arch_prepare_kprobe(struct kprobe *p)
|
||||
{
|
||||
int ret = 0;
|
||||
kprobe_opcode_t insn = *p->addr;
|
||||
|
||||
if (IS_MTMSRD(insn) || IS_RFID(insn))
|
||||
/* cannot put bp on RFID/MTMSRD */
|
||||
return 1;
|
||||
return 0;
|
||||
if ((unsigned long)p->addr & 0x03) {
|
||||
printk("Attempt to register kprobe at an unaligned address\n");
|
||||
ret = -EINVAL;
|
||||
} else if (IS_MTMSRD(insn) || IS_RFID(insn)) {
|
||||
printk("Cannot register a kprobe on rfid or mtmsrd\n");
|
||||
ret = -EINVAL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void arch_copy_kprobe(struct kprobe *p)
|
||||
|
@ -172,8 +177,6 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs)
|
|||
ret = emulate_step(regs, p->ainsn.insn[0]);
|
||||
if (ret == 0)
|
||||
regs->nip = (unsigned long)p->addr + 4;
|
||||
|
||||
regs->msr &= ~MSR_SE;
|
||||
}
|
||||
|
||||
static inline int post_kprobe_handler(struct pt_regs *regs)
|
||||
|
@ -210,6 +213,7 @@ static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
|
|||
|
||||
if (kprobe_status & KPROBE_HIT_SS) {
|
||||
resume_execution(current_kprobe, regs);
|
||||
regs->msr &= ~MSR_SE;
|
||||
regs->msr |= kprobe_saved_msr;
|
||||
|
||||
unlock_kprobes();
|
||||
|
@ -233,8 +237,6 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
|
|||
*/
|
||||
preempt_disable();
|
||||
switch (val) {
|
||||
case DIE_IABR_MATCH:
|
||||
case DIE_DABR_MATCH:
|
||||
case DIE_BPT:
|
||||
if (kprobe_handler(args->regs))
|
||||
ret = NOTIFY_STOP;
|
||||
|
|
|
@ -792,7 +792,7 @@ _GLOBAL(sys_call_table32)
|
|||
.llong .compat_sys_newstat
|
||||
.llong .compat_sys_newlstat
|
||||
.llong .compat_sys_newfstat
|
||||
.llong .sys_uname
|
||||
.llong .sys32_uname
|
||||
.llong .sys_ni_syscall /* 110 old iopl syscall */
|
||||
.llong .sys_vhangup
|
||||
.llong .sys_ni_syscall /* old idle syscall */
|
||||
|
|
|
@ -378,9 +378,6 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
|
|||
childregs->gpr[1] = sp + sizeof(struct pt_regs);
|
||||
p->thread.regs = NULL; /* no user register state */
|
||||
clear_ti_thread_flag(p->thread_info, TIF_32BIT);
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
set_ti_thread_flag(p->thread_info, TIF_RUN_LIGHT);
|
||||
#endif
|
||||
} else {
|
||||
childregs->gpr[1] = usp;
|
||||
p->thread.regs = childregs;
|
||||
|
|
|
@ -211,13 +211,23 @@ struct {
|
|||
*/
|
||||
#define ADDR(x) (u32) ((unsigned long)(x) - offset)
|
||||
|
||||
/*
|
||||
* Error results ... some OF calls will return "-1" on error, some
|
||||
* will return 0, some will return either. To simplify, here are
|
||||
* macros to use with any ihandle or phandle return value to check if
|
||||
* it is valid
|
||||
*/
|
||||
|
||||
#define PROM_ERROR (-1u)
|
||||
#define PHANDLE_VALID(p) ((p) != 0 && (p) != PROM_ERROR)
|
||||
#define IHANDLE_VALID(i) ((i) != 0 && (i) != PROM_ERROR)
|
||||
|
||||
|
||||
/* This is the one and *ONLY* place where we actually call open
|
||||
* firmware from, since we need to make sure we're running in 32b
|
||||
* mode when we do. We switch back to 64b mode upon return.
|
||||
*/
|
||||
|
||||
#define PROM_ERROR (-1)
|
||||
|
||||
static int __init call_prom(const char *service, int nargs, int nret, ...)
|
||||
{
|
||||
int i;
|
||||
|
@ -587,14 +597,13 @@ static void __init prom_send_capabilities(void)
|
|||
{
|
||||
unsigned long offset = reloc_offset();
|
||||
ihandle elfloader;
|
||||
int ret;
|
||||
|
||||
elfloader = call_prom("open", 1, 1, ADDR("/packages/elf-loader"));
|
||||
if (elfloader == 0) {
|
||||
prom_printf("couldn't open /packages/elf-loader\n");
|
||||
return;
|
||||
}
|
||||
ret = call_prom("call-method", 3, 1, ADDR("process-elf-header"),
|
||||
call_prom("call-method", 3, 1, ADDR("process-elf-header"),
|
||||
elfloader, ADDR(&fake_elf));
|
||||
call_prom("close", 1, 0, elfloader);
|
||||
}
|
||||
|
@ -646,7 +655,7 @@ static unsigned long __init alloc_up(unsigned long size, unsigned long align)
|
|||
base = _ALIGN_UP(base + 0x100000, align)) {
|
||||
prom_debug(" trying: 0x%x\n\r", base);
|
||||
addr = (unsigned long)prom_claim(base, size, 0);
|
||||
if ((int)addr != PROM_ERROR)
|
||||
if (addr != PROM_ERROR)
|
||||
break;
|
||||
addr = 0;
|
||||
if (align == 0)
|
||||
|
@ -708,7 +717,7 @@ static unsigned long __init alloc_down(unsigned long size, unsigned long align,
|
|||
for(; base > RELOC(alloc_bottom); base = _ALIGN_DOWN(base - 0x100000, align)) {
|
||||
prom_debug(" trying: 0x%x\n\r", base);
|
||||
addr = (unsigned long)prom_claim(base, size, 0);
|
||||
if ((int)addr != PROM_ERROR)
|
||||
if (addr != PROM_ERROR)
|
||||
break;
|
||||
addr = 0;
|
||||
}
|
||||
|
@ -902,18 +911,19 @@ static void __init prom_instantiate_rtas(void)
|
|||
{
|
||||
unsigned long offset = reloc_offset();
|
||||
struct prom_t *_prom = PTRRELOC(&prom);
|
||||
phandle prom_rtas, rtas_node;
|
||||
phandle rtas_node;
|
||||
ihandle rtas_inst;
|
||||
u32 base, entry = 0;
|
||||
u32 size = 0;
|
||||
|
||||
prom_debug("prom_instantiate_rtas: start...\n");
|
||||
|
||||
prom_rtas = call_prom("finddevice", 1, 1, ADDR("/rtas"));
|
||||
prom_debug("prom_rtas: %x\n", prom_rtas);
|
||||
if (prom_rtas == (phandle) -1)
|
||||
rtas_node = call_prom("finddevice", 1, 1, ADDR("/rtas"));
|
||||
prom_debug("rtas_node: %x\n", rtas_node);
|
||||
if (!PHANDLE_VALID(rtas_node))
|
||||
return;
|
||||
|
||||
prom_getprop(prom_rtas, "rtas-size", &size, sizeof(size));
|
||||
prom_getprop(rtas_node, "rtas-size", &size, sizeof(size));
|
||||
if (size == 0)
|
||||
return;
|
||||
|
||||
|
@ -922,14 +932,18 @@ static void __init prom_instantiate_rtas(void)
|
|||
prom_printf("RTAS allocation failed !\n");
|
||||
return;
|
||||
}
|
||||
prom_printf("instantiating rtas at 0x%x", base);
|
||||
|
||||
rtas_node = call_prom("open", 1, 1, ADDR("/rtas"));
|
||||
prom_printf("...");
|
||||
rtas_inst = call_prom("open", 1, 1, ADDR("/rtas"));
|
||||
if (!IHANDLE_VALID(rtas_inst)) {
|
||||
prom_printf("opening rtas package failed");
|
||||
return;
|
||||
}
|
||||
|
||||
prom_printf("instantiating rtas at 0x%x ...", base);
|
||||
|
||||
if (call_prom("call-method", 3, 2,
|
||||
ADDR("instantiate-rtas"),
|
||||
rtas_node, base) != PROM_ERROR) {
|
||||
rtas_inst, base) != PROM_ERROR) {
|
||||
entry = (long)_prom->args.rets[1];
|
||||
}
|
||||
if (entry == 0) {
|
||||
|
@ -940,8 +954,8 @@ static void __init prom_instantiate_rtas(void)
|
|||
|
||||
reserve_mem(base, size);
|
||||
|
||||
prom_setprop(prom_rtas, "linux,rtas-base", &base, sizeof(base));
|
||||
prom_setprop(prom_rtas, "linux,rtas-entry", &entry, sizeof(entry));
|
||||
prom_setprop(rtas_node, "linux,rtas-base", &base, sizeof(base));
|
||||
prom_setprop(rtas_node, "linux,rtas-entry", &entry, sizeof(entry));
|
||||
|
||||
prom_debug("rtas base = 0x%x\n", base);
|
||||
prom_debug("rtas entry = 0x%x\n", entry);
|
||||
|
@ -1062,7 +1076,7 @@ static void __init prom_initialize_tce_table(void)
|
|||
|
||||
prom_printf("opening PHB %s", path);
|
||||
phb_node = call_prom("open", 1, 1, path);
|
||||
if ( (long)phb_node <= 0)
|
||||
if (phb_node == 0)
|
||||
prom_printf("... failed\n");
|
||||
else
|
||||
prom_printf("... done\n");
|
||||
|
@ -1279,12 +1293,12 @@ static void __init prom_init_client_services(unsigned long pp)
|
|||
|
||||
/* get a handle for the stdout device */
|
||||
_prom->chosen = call_prom("finddevice", 1, 1, ADDR("/chosen"));
|
||||
if ((long)_prom->chosen <= 0)
|
||||
if (!PHANDLE_VALID(_prom->chosen))
|
||||
prom_panic("cannot find chosen"); /* msg won't be printed :( */
|
||||
|
||||
/* get device tree root */
|
||||
_prom->root = call_prom("finddevice", 1, 1, ADDR("/"));
|
||||
if ((long)_prom->root <= 0)
|
||||
if (!PHANDLE_VALID(_prom->root))
|
||||
prom_panic("cannot find device tree root"); /* msg won't be printed :( */
|
||||
}
|
||||
|
||||
|
@ -1356,9 +1370,8 @@ static int __init prom_find_machine_type(void)
|
|||
}
|
||||
/* Default to pSeries. We need to know if we are running LPAR */
|
||||
rtas = call_prom("finddevice", 1, 1, ADDR("/rtas"));
|
||||
if (rtas != (phandle) -1) {
|
||||
unsigned long x;
|
||||
x = prom_getproplen(rtas, "ibm,hypertas-functions");
|
||||
if (PHANDLE_VALID(rtas)) {
|
||||
int x = prom_getproplen(rtas, "ibm,hypertas-functions");
|
||||
if (x != PROM_ERROR) {
|
||||
prom_printf("Hypertas detected, assuming LPAR !\n");
|
||||
return PLATFORM_PSERIES_LPAR;
|
||||
|
@ -1426,12 +1439,13 @@ static void __init prom_check_displays(void)
|
|||
* leave some room at the end of the path for appending extra
|
||||
* arguments
|
||||
*/
|
||||
if (call_prom("package-to-path", 3, 1, node, path, PROM_SCRATCH_SIZE-10) < 0)
|
||||
if (call_prom("package-to-path", 3, 1, node, path,
|
||||
PROM_SCRATCH_SIZE-10) == PROM_ERROR)
|
||||
continue;
|
||||
prom_printf("found display : %s, opening ... ", path);
|
||||
|
||||
ih = call_prom("open", 1, 1, path);
|
||||
if (ih == (ihandle)0 || ih == (ihandle)-1) {
|
||||
if (ih == 0) {
|
||||
prom_printf("failed\n");
|
||||
continue;
|
||||
}
|
||||
|
@ -1514,6 +1528,12 @@ static unsigned long __init dt_find_string(char *str)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The Open Firmware 1275 specification states properties must be 31 bytes or
|
||||
* less, however not all firmwares obey this. Make it 64 bytes to be safe.
|
||||
*/
|
||||
#define MAX_PROPERTY_NAME 64
|
||||
|
||||
static void __init scan_dt_build_strings(phandle node, unsigned long *mem_start,
|
||||
unsigned long *mem_end)
|
||||
{
|
||||
|
@ -1527,10 +1547,12 @@ static void __init scan_dt_build_strings(phandle node, unsigned long *mem_start,
|
|||
/* get and store all property names */
|
||||
prev_name = RELOC("");
|
||||
for (;;) {
|
||||
|
||||
/* 32 is max len of name including nul. */
|
||||
namep = make_room(mem_start, mem_end, 32, 1);
|
||||
if (call_prom("nextprop", 3, 1, node, prev_name, namep) <= 0) {
|
||||
int rc;
|
||||
|
||||
/* 64 is max len of name including nul. */
|
||||
namep = make_room(mem_start, mem_end, MAX_PROPERTY_NAME, 1);
|
||||
rc = call_prom("nextprop", 3, 1, node, prev_name, namep);
|
||||
if (rc != 1) {
|
||||
/* No more nodes: unwind alloc */
|
||||
*mem_start = (unsigned long)namep;
|
||||
break;
|
||||
|
@ -1555,12 +1577,6 @@ static void __init scan_dt_build_strings(phandle node, unsigned long *mem_start,
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The Open Firmware 1275 specification states properties must be 31 bytes or
|
||||
* less, however not all firmwares obey this. Make it 64 bytes to be safe.
|
||||
*/
|
||||
#define MAX_PROPERTY_NAME 64
|
||||
|
||||
static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start,
|
||||
unsigned long *mem_end)
|
||||
{
|
||||
|
@ -1607,7 +1623,10 @@ static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start,
|
|||
prev_name = RELOC("");
|
||||
sstart = (char *)RELOC(dt_string_start);
|
||||
for (;;) {
|
||||
if (call_prom("nextprop", 3, 1, node, prev_name, pname) <= 0)
|
||||
int rc;
|
||||
|
||||
rc = call_prom("nextprop", 3, 1, node, prev_name, pname);
|
||||
if (rc != 1)
|
||||
break;
|
||||
|
||||
/* find string offset */
|
||||
|
@ -1623,7 +1642,7 @@ static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start,
|
|||
l = call_prom("getproplen", 2, 1, node, pname);
|
||||
|
||||
/* sanity checks */
|
||||
if (l < 0)
|
||||
if (l == PROM_ERROR)
|
||||
continue;
|
||||
if (l > MAX_PROPERTY_LENGTH) {
|
||||
prom_printf("WARNING: ignoring large property ");
|
||||
|
@ -1771,17 +1790,18 @@ static void __init fixup_device_tree(void)
|
|||
|
||||
/* Some G5s have a missing interrupt definition, fix it up here */
|
||||
u3 = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000"));
|
||||
if ((long)u3 <= 0)
|
||||
if (!PHANDLE_VALID(u3))
|
||||
return;
|
||||
i2c = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/i2c@f8001000"));
|
||||
if ((long)i2c <= 0)
|
||||
if (!PHANDLE_VALID(i2c))
|
||||
return;
|
||||
mpic = call_prom("finddevice", 1, 1, ADDR("/u3@0,f8000000/mpic@f8040000"));
|
||||
if ((long)mpic <= 0)
|
||||
if (!PHANDLE_VALID(mpic))
|
||||
return;
|
||||
|
||||
/* check if proper rev of u3 */
|
||||
if (prom_getprop(u3, "device-rev", &u3_rev, sizeof(u3_rev)) <= 0)
|
||||
if (prom_getprop(u3, "device-rev", &u3_rev, sizeof(u3_rev))
|
||||
== PROM_ERROR)
|
||||
return;
|
||||
if (u3_rev != 0x35)
|
||||
return;
|
||||
|
|
|
@ -103,11 +103,6 @@ extern void unflatten_device_tree(void);
|
|||
|
||||
extern void smp_release_cpus(void);
|
||||
|
||||
unsigned long decr_overclock = 1;
|
||||
unsigned long decr_overclock_proc0 = 1;
|
||||
unsigned long decr_overclock_set = 0;
|
||||
unsigned long decr_overclock_proc0_set = 0;
|
||||
|
||||
int have_of = 1;
|
||||
int boot_cpuid = 0;
|
||||
int boot_cpuid_phys = 0;
|
||||
|
@ -1120,64 +1115,15 @@ void ppc64_dump_msg(unsigned int src, const char *msg)
|
|||
printk("[dump]%04x %s\n", src, msg);
|
||||
}
|
||||
|
||||
int set_spread_lpevents( char * str )
|
||||
{
|
||||
/* The parameter is the number of processors to share in processing lp events */
|
||||
unsigned long i;
|
||||
unsigned long val = simple_strtoul( str, NULL, 0 );
|
||||
if ( ( val > 0 ) && ( val <= NR_CPUS ) ) {
|
||||
for ( i=1; i<val; ++i )
|
||||
paca[i].lpqueue_ptr = paca[0].lpqueue_ptr;
|
||||
printk("lpevent processing spread over %ld processors\n", val);
|
||||
}
|
||||
else
|
||||
printk("invalid spreaqd_lpevents %ld\n", val);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* This should only be called on processor 0 during calibrate decr */
|
||||
void setup_default_decr(void)
|
||||
{
|
||||
struct paca_struct *lpaca = get_paca();
|
||||
|
||||
if ( decr_overclock_set && !decr_overclock_proc0_set )
|
||||
decr_overclock_proc0 = decr_overclock;
|
||||
|
||||
lpaca->default_decr = tb_ticks_per_jiffy / decr_overclock_proc0;
|
||||
lpaca->default_decr = tb_ticks_per_jiffy;
|
||||
lpaca->next_jiffy_update_tb = get_tb() + tb_ticks_per_jiffy;
|
||||
}
|
||||
|
||||
int set_decr_overclock_proc0( char * str )
|
||||
{
|
||||
unsigned long val = simple_strtoul( str, NULL, 0 );
|
||||
if ( ( val >= 1 ) && ( val <= 48 ) ) {
|
||||
decr_overclock_proc0_set = 1;
|
||||
decr_overclock_proc0 = val;
|
||||
printk("proc 0 decrementer overclock factor of %ld\n", val);
|
||||
}
|
||||
else
|
||||
printk("invalid proc 0 decrementer overclock factor of %ld\n", val);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int set_decr_overclock( char * str )
|
||||
{
|
||||
unsigned long val = simple_strtoul( str, NULL, 0 );
|
||||
if ( ( val >= 1 ) && ( val <= 48 ) ) {
|
||||
decr_overclock_set = 1;
|
||||
decr_overclock = val;
|
||||
printk("decrementer overclock factor of %ld\n", val);
|
||||
}
|
||||
else
|
||||
printk("invalid decrementer overclock factor of %ld\n", val);
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
__setup("spread_lpevents=", set_spread_lpevents );
|
||||
__setup("decr_overclock_proc0=", set_decr_overclock_proc0 );
|
||||
__setup("decr_overclock=", set_decr_overclock );
|
||||
|
||||
#ifndef CONFIG_PPC_ISERIES
|
||||
/*
|
||||
* This function can be used by platforms to "find" legacy serial ports.
|
||||
|
|
|
@ -334,7 +334,6 @@ void smp_call_function_interrupt(void)
|
|||
}
|
||||
}
|
||||
|
||||
extern unsigned long decr_overclock;
|
||||
extern struct gettimeofday_struct do_gtod;
|
||||
|
||||
struct thread_info *current_set[NR_CPUS];
|
||||
|
@ -491,7 +490,7 @@ int __devinit __cpu_up(unsigned int cpu)
|
|||
if (smp_ops->cpu_bootable && !smp_ops->cpu_bootable(cpu))
|
||||
return -EINVAL;
|
||||
|
||||
paca[cpu].default_decr = tb_ticks_per_jiffy / decr_overclock;
|
||||
paca[cpu].default_decr = tb_ticks_per_jiffy;
|
||||
|
||||
if (!cpu_has_feature(CPU_FTR_SLB)) {
|
||||
void *tmp;
|
||||
|
|
|
@ -791,31 +791,6 @@ asmlinkage int sys32_pciconfig_iobase(u32 which, u32 in_bus, u32 in_devfn)
|
|||
}
|
||||
|
||||
|
||||
asmlinkage int ppc64_newuname(struct new_utsname __user * name)
|
||||
{
|
||||
int errno = sys_newuname(name);
|
||||
|
||||
if (current->personality == PER_LINUX32 && !errno) {
|
||||
if(copy_to_user(name->machine, "ppc\0\0", 8)) {
|
||||
errno = -EFAULT;
|
||||
}
|
||||
}
|
||||
return errno;
|
||||
}
|
||||
|
||||
asmlinkage int ppc64_personality(unsigned long personality)
|
||||
{
|
||||
int ret;
|
||||
if (current->personality == PER_LINUX32 && personality == PER_LINUX)
|
||||
personality = PER_LINUX32;
|
||||
ret = sys_personality(personality);
|
||||
if (ret == PER_LINUX32)
|
||||
ret = PER_LINUX;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Note: it is necessary to treat mode as an unsigned int,
|
||||
* with the corresponding cast to a signed int to insure that the
|
||||
* proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode)
|
||||
|
@ -1158,26 +1133,47 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
|
|||
}
|
||||
#endif
|
||||
|
||||
asmlinkage int sys32_uname(struct old_utsname __user * name)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
down_read(&uts_sem);
|
||||
if (copy_to_user(name, &system_utsname, sizeof(*name)))
|
||||
err = -EFAULT;
|
||||
up_read(&uts_sem);
|
||||
if (!err && personality(current->personality) == PER_LINUX32) {
|
||||
/* change "ppc64" to "ppc" */
|
||||
if (__put_user(0, name->machine + 3)
|
||||
|| __put_user(0, name->machine + 4))
|
||||
err = -EFAULT;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
asmlinkage int sys32_olduname(struct oldold_utsname __user * name)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (!name)
|
||||
return -EFAULT;
|
||||
|
||||
if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname)))
|
||||
return -EFAULT;
|
||||
|
||||
down_read(&uts_sem);
|
||||
error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN);
|
||||
error -= __put_user(0,name->sysname+__OLD_UTS_LEN);
|
||||
error -= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
|
||||
error -= __put_user(0,name->nodename+__OLD_UTS_LEN);
|
||||
error -= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
|
||||
error -= __put_user(0,name->release+__OLD_UTS_LEN);
|
||||
error -= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
|
||||
error -= __put_user(0,name->version+__OLD_UTS_LEN);
|
||||
error -= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN);
|
||||
error = __put_user(0,name->machine+__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->sysname+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->nodename+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->release+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->version+__OLD_UTS_LEN);
|
||||
error |= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN);
|
||||
error |= __put_user(0,name->machine+__OLD_UTS_LEN);
|
||||
if (personality(current->personality) == PER_LINUX32) {
|
||||
/* change "ppc64" to "ppc" */
|
||||
error |= __put_user(0, name->machine + 3);
|
||||
error |= __put_user(0, name->machine + 4);
|
||||
}
|
||||
|
||||
up_read(&uts_sem);
|
||||
|
||||
error = error ? -EFAULT : 0;
|
||||
|
|
|
@ -199,24 +199,33 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int __init set_fakeppc(char *str)
|
||||
long ppc64_personality(unsigned long personality)
|
||||
{
|
||||
if (*str)
|
||||
return 0;
|
||||
init_task.personality = PER_LINUX32;
|
||||
return 1;
|
||||
}
|
||||
__setup("fakeppc", set_fakeppc);
|
||||
long ret;
|
||||
|
||||
asmlinkage int sys_uname(struct old_utsname __user * name)
|
||||
if (personality(current->personality) == PER_LINUX32
|
||||
&& personality == PER_LINUX)
|
||||
personality = PER_LINUX32;
|
||||
ret = sys_personality(personality);
|
||||
if (ret == PER_LINUX32)
|
||||
ret = PER_LINUX;
|
||||
return ret;
|
||||
}
|
||||
|
||||
long ppc64_newuname(struct new_utsname __user * name)
|
||||
{
|
||||
int err = -EFAULT;
|
||||
|
||||
int err = 0;
|
||||
|
||||
down_read(&uts_sem);
|
||||
if (name && !copy_to_user(name, &system_utsname, sizeof (*name)))
|
||||
err = 0;
|
||||
if (copy_to_user(name, &system_utsname, sizeof(*name)))
|
||||
err = -EFAULT;
|
||||
up_read(&uts_sem);
|
||||
|
||||
if (!err && personality(current->personality) == PER_LINUX32) {
|
||||
/* change ppc64 to ppc */
|
||||
if (__put_user(0, name->machine + 3)
|
||||
|| __put_user(0, name->machine + 4))
|
||||
err = -EFAULT;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -113,7 +113,6 @@ void ppc64_enable_pmcs(void)
|
|||
#ifdef CONFIG_PPC_PSERIES
|
||||
unsigned long set, reset;
|
||||
int ret;
|
||||
unsigned int ctrl;
|
||||
#endif /* CONFIG_PPC_PSERIES */
|
||||
|
||||
/* Only need to enable them once */
|
||||
|
@ -167,11 +166,8 @@ void ppc64_enable_pmcs(void)
|
|||
* On SMT machines we have to set the run latch in the ctrl register
|
||||
* in order to make PMC6 spin.
|
||||
*/
|
||||
if (cpu_has_feature(CPU_FTR_SMT)) {
|
||||
ctrl = mfspr(CTRLF);
|
||||
ctrl |= RUNLATCH;
|
||||
mtspr(CTRLT, ctrl);
|
||||
}
|
||||
if (cpu_has_feature(CPU_FTR_SMT))
|
||||
ppc64_runlatch_on();
|
||||
#endif /* CONFIG_PPC_PSERIES */
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
//#include <linux/kernel_stat.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include "appldata.h"
|
||||
|
||||
|
@ -133,9 +134,12 @@ static int appldata_interval = APPLDATA_CPU_INTERVAL;
|
|||
static int appldata_timer_active;
|
||||
|
||||
/*
|
||||
* Tasklet
|
||||
* Work queue
|
||||
*/
|
||||
static struct tasklet_struct appldata_tasklet_struct;
|
||||
static struct workqueue_struct *appldata_wq;
|
||||
static void appldata_work_fn(void *data);
|
||||
static DECLARE_WORK(appldata_work, appldata_work_fn, NULL);
|
||||
|
||||
|
||||
/*
|
||||
* Ops list
|
||||
|
@ -144,11 +148,11 @@ static DEFINE_SPINLOCK(appldata_ops_lock);
|
|||
static LIST_HEAD(appldata_ops_list);
|
||||
|
||||
|
||||
/************************* timer, tasklet, DIAG ******************************/
|
||||
/*************************** timer, work, DIAG *******************************/
|
||||
/*
|
||||
* appldata_timer_function()
|
||||
*
|
||||
* schedule tasklet and reschedule timer
|
||||
* schedule work and reschedule timer
|
||||
*/
|
||||
static void appldata_timer_function(unsigned long data, struct pt_regs *regs)
|
||||
{
|
||||
|
@ -157,22 +161,22 @@ static void appldata_timer_function(unsigned long data, struct pt_regs *regs)
|
|||
atomic_read(&appldata_expire_count));
|
||||
if (atomic_dec_and_test(&appldata_expire_count)) {
|
||||
atomic_set(&appldata_expire_count, num_online_cpus());
|
||||
tasklet_schedule((struct tasklet_struct *) data);
|
||||
queue_work(appldata_wq, (struct work_struct *) data);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* appldata_tasklet_function()
|
||||
* appldata_work_fn()
|
||||
*
|
||||
* call data gathering function for each (active) module
|
||||
*/
|
||||
static void appldata_tasklet_function(unsigned long data)
|
||||
static void appldata_work_fn(void *data)
|
||||
{
|
||||
struct list_head *lh;
|
||||
struct appldata_ops *ops;
|
||||
int i;
|
||||
|
||||
P_DEBUG(" -= Tasklet =-\n");
|
||||
P_DEBUG(" -= Work Queue =-\n");
|
||||
i = 0;
|
||||
spin_lock(&appldata_ops_lock);
|
||||
list_for_each(lh, &appldata_ops_list) {
|
||||
|
@ -231,7 +235,7 @@ static int appldata_diag(char record_nr, u16 function, unsigned long buffer,
|
|||
: "=d" (ry) : "d" (&(appldata_parameter_list)) : "cc");
|
||||
return (int) ry;
|
||||
}
|
||||
/********************** timer, tasklet, DIAG <END> ***************************/
|
||||
/************************ timer, work, DIAG <END> ****************************/
|
||||
|
||||
|
||||
/****************************** /proc stuff **********************************/
|
||||
|
@ -411,7 +415,7 @@ appldata_generic_handler(ctl_table *ctl, int write, struct file *filp,
|
|||
struct list_head *lh;
|
||||
|
||||
found = 0;
|
||||
spin_lock_bh(&appldata_ops_lock);
|
||||
spin_lock(&appldata_ops_lock);
|
||||
list_for_each(lh, &appldata_ops_list) {
|
||||
tmp_ops = list_entry(lh, struct appldata_ops, list);
|
||||
if (&tmp_ops->ctl_table[2] == ctl) {
|
||||
|
@ -419,15 +423,15 @@ appldata_generic_handler(ctl_table *ctl, int write, struct file *filp,
|
|||
}
|
||||
}
|
||||
if (!found) {
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
return -ENODEV;
|
||||
}
|
||||
ops = ctl->data;
|
||||
if (!try_module_get(ops->owner)) { // protect this function
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
return -ENODEV;
|
||||
}
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
|
||||
if (!*lenp || *ppos) {
|
||||
*lenp = 0;
|
||||
|
@ -451,10 +455,11 @@ appldata_generic_handler(ctl_table *ctl, int write, struct file *filp,
|
|||
return -EFAULT;
|
||||
}
|
||||
|
||||
spin_lock_bh(&appldata_ops_lock);
|
||||
spin_lock(&appldata_ops_lock);
|
||||
if ((buf[0] == '1') && (ops->active == 0)) {
|
||||
if (!try_module_get(ops->owner)) { // protect tasklet
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
// protect work queue callback
|
||||
if (!try_module_get(ops->owner)) {
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
module_put(ops->owner);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -485,7 +490,7 @@ appldata_generic_handler(ctl_table *ctl, int write, struct file *filp,
|
|||
}
|
||||
module_put(ops->owner);
|
||||
}
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
out:
|
||||
*lenp = len;
|
||||
*ppos += len;
|
||||
|
@ -529,7 +534,7 @@ int appldata_register_ops(struct appldata_ops *ops)
|
|||
}
|
||||
memset(ops->ctl_table, 0, 4*sizeof(struct ctl_table));
|
||||
|
||||
spin_lock_bh(&appldata_ops_lock);
|
||||
spin_lock(&appldata_ops_lock);
|
||||
list_for_each(lh, &appldata_ops_list) {
|
||||
tmp_ops = list_entry(lh, struct appldata_ops, list);
|
||||
P_DEBUG("register_ops loop: %i) name = %s, ctl = %i\n",
|
||||
|
@ -541,18 +546,18 @@ int appldata_register_ops(struct appldata_ops *ops)
|
|||
APPLDATA_PROC_NAME_LENGTH) == 0) {
|
||||
P_ERROR("Name \"%s\" already registered!\n", ops->name);
|
||||
kfree(ops->ctl_table);
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
if (tmp_ops->ctl_nr == ops->ctl_nr) {
|
||||
P_ERROR("ctl_nr %i already registered!\n", ops->ctl_nr);
|
||||
kfree(ops->ctl_table);
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
list_add(&ops->list, &appldata_ops_list);
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
|
||||
ops->ctl_table[0].ctl_name = CTL_APPLDATA;
|
||||
ops->ctl_table[0].procname = appldata_proc_name;
|
||||
|
@ -583,12 +588,12 @@ int appldata_register_ops(struct appldata_ops *ops)
|
|||
*/
|
||||
void appldata_unregister_ops(struct appldata_ops *ops)
|
||||
{
|
||||
spin_lock_bh(&appldata_ops_lock);
|
||||
spin_lock(&appldata_ops_lock);
|
||||
unregister_sysctl_table(ops->sysctl_header);
|
||||
list_del(&ops->list);
|
||||
kfree(ops->ctl_table);
|
||||
ops->ctl_table = NULL;
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
P_INFO("%s-ops unregistered!\n", ops->name);
|
||||
}
|
||||
/********************** module-ops management <END> **************************/
|
||||
|
@ -602,7 +607,7 @@ appldata_online_cpu(int cpu)
|
|||
init_virt_timer(&per_cpu(appldata_timer, cpu));
|
||||
per_cpu(appldata_timer, cpu).function = appldata_timer_function;
|
||||
per_cpu(appldata_timer, cpu).data = (unsigned long)
|
||||
&appldata_tasklet_struct;
|
||||
&appldata_work;
|
||||
atomic_inc(&appldata_expire_count);
|
||||
spin_lock(&appldata_timer_lock);
|
||||
__appldata_vtimer_setup(APPLDATA_MOD_TIMER);
|
||||
|
@ -615,7 +620,7 @@ appldata_offline_cpu(int cpu)
|
|||
del_virt_timer(&per_cpu(appldata_timer, cpu));
|
||||
if (atomic_dec_and_test(&appldata_expire_count)) {
|
||||
atomic_set(&appldata_expire_count, num_online_cpus());
|
||||
tasklet_schedule(&appldata_tasklet_struct);
|
||||
queue_work(appldata_wq, &appldata_work);
|
||||
}
|
||||
spin_lock(&appldata_timer_lock);
|
||||
__appldata_vtimer_setup(APPLDATA_MOD_TIMER);
|
||||
|
@ -648,7 +653,7 @@ static struct notifier_block __devinitdata appldata_nb = {
|
|||
/*
|
||||
* appldata_init()
|
||||
*
|
||||
* init timer and tasklet, register /proc entries
|
||||
* init timer, register /proc entries
|
||||
*/
|
||||
static int __init appldata_init(void)
|
||||
{
|
||||
|
@ -657,6 +662,12 @@ static int __init appldata_init(void)
|
|||
P_DEBUG("sizeof(parameter_list) = %lu\n",
|
||||
sizeof(struct appldata_parameter_list));
|
||||
|
||||
appldata_wq = create_singlethread_workqueue("appldata");
|
||||
if (!appldata_wq) {
|
||||
P_ERROR("Could not create work queue\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
for_each_online_cpu(i)
|
||||
appldata_online_cpu(i);
|
||||
|
||||
|
@ -670,7 +681,6 @@ static int __init appldata_init(void)
|
|||
appldata_table[1].de->owner = THIS_MODULE;
|
||||
#endif
|
||||
|
||||
tasklet_init(&appldata_tasklet_struct, appldata_tasklet_function, 0);
|
||||
P_DEBUG("Base interface initialized.\n");
|
||||
return 0;
|
||||
}
|
||||
|
@ -678,7 +688,7 @@ static int __init appldata_init(void)
|
|||
/*
|
||||
* appldata_exit()
|
||||
*
|
||||
* stop timer and tasklet, unregister /proc entries
|
||||
* stop timer, unregister /proc entries
|
||||
*/
|
||||
static void __exit appldata_exit(void)
|
||||
{
|
||||
|
@ -690,7 +700,7 @@ static void __exit appldata_exit(void)
|
|||
/*
|
||||
* ops list should be empty, but just in case something went wrong...
|
||||
*/
|
||||
spin_lock_bh(&appldata_ops_lock);
|
||||
spin_lock(&appldata_ops_lock);
|
||||
list_for_each(lh, &appldata_ops_list) {
|
||||
ops = list_entry(lh, struct appldata_ops, list);
|
||||
rc = appldata_diag(ops->record_nr, APPLDATA_STOP_REC,
|
||||
|
@ -700,7 +710,7 @@ static void __exit appldata_exit(void)
|
|||
"return code: %d\n", ops->name, rc);
|
||||
}
|
||||
}
|
||||
spin_unlock_bh(&appldata_ops_lock);
|
||||
spin_unlock(&appldata_ops_lock);
|
||||
|
||||
for_each_online_cpu(i)
|
||||
appldata_offline_cpu(i);
|
||||
|
@ -709,7 +719,7 @@ static void __exit appldata_exit(void)
|
|||
|
||||
unregister_sysctl_table(appldata_sysctl_header);
|
||||
|
||||
tasklet_kill(&appldata_tasklet_struct);
|
||||
destroy_workqueue(appldata_wq);
|
||||
P_DEBUG("... module unloaded!\n");
|
||||
}
|
||||
/**************************** init / exit <END> ******************************/
|
||||
|
|
|
@ -68,7 +68,7 @@ struct appldata_mem_data {
|
|||
u64 pgmajfault; /* page faults (major only) */
|
||||
// <-- New in 2.6
|
||||
|
||||
} appldata_mem_data;
|
||||
} __attribute__((packed)) appldata_mem_data;
|
||||
|
||||
|
||||
static inline void appldata_debug_print(struct appldata_mem_data *mem_data)
|
||||
|
|
|
@ -57,7 +57,7 @@ struct appldata_net_sum_data {
|
|||
u64 rx_dropped; /* no space in linux buffers */
|
||||
u64 tx_dropped; /* no space available in linux */
|
||||
u64 collisions; /* collisions while transmitting */
|
||||
} appldata_net_sum_data;
|
||||
} __attribute__((packed)) appldata_net_sum_data;
|
||||
|
||||
|
||||
static inline void appldata_print_debug(struct appldata_net_sum_data *net_data)
|
||||
|
|
|
@ -49,7 +49,7 @@ struct appldata_os_per_cpu {
|
|||
u32 per_cpu_softirq; /* ... spent in softirqs */
|
||||
u32 per_cpu_iowait; /* ... spent while waiting for I/O */
|
||||
// <-- New in 2.6
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
||||
struct appldata_os_data {
|
||||
u64 timestamp;
|
||||
|
@ -75,7 +75,7 @@ struct appldata_os_data {
|
|||
|
||||
/* per cpu data */
|
||||
struct appldata_os_per_cpu os_cpu[0];
|
||||
};
|
||||
} __attribute__((packed));
|
||||
|
||||
static struct appldata_os_data *appldata_os_data;
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include <asm/pgalloc.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/unistd.h>
|
||||
|
||||
#ifdef CONFIG_S390_SUPPORT
|
||||
#include "compat_ptrace.h"
|
||||
|
@ -130,13 +131,19 @@ static int
|
|||
peek_user(struct task_struct *child, addr_t addr, addr_t data)
|
||||
{
|
||||
struct user *dummy = NULL;
|
||||
addr_t offset, tmp;
|
||||
addr_t offset, tmp, mask;
|
||||
|
||||
/*
|
||||
* Stupid gdb peeks/pokes the access registers in 64 bit with
|
||||
* an alignment of 4. Programmers from hell...
|
||||
*/
|
||||
if ((addr & 3) || addr > sizeof(struct user) - __ADDR_MASK)
|
||||
mask = __ADDR_MASK;
|
||||
#ifdef CONFIG_ARCH_S390X
|
||||
if (addr >= (addr_t) &dummy->regs.acrs &&
|
||||
addr < (addr_t) &dummy->regs.orig_gpr2)
|
||||
mask = 3;
|
||||
#endif
|
||||
if ((addr & mask) || addr > sizeof(struct user) - __ADDR_MASK)
|
||||
return -EIO;
|
||||
|
||||
if (addr < (addr_t) &dummy->regs.acrs) {
|
||||
|
@ -153,6 +160,16 @@ peek_user(struct task_struct *child, addr_t addr, addr_t data)
|
|||
* access registers are stored in the thread structure
|
||||
*/
|
||||
offset = addr - (addr_t) &dummy->regs.acrs;
|
||||
#ifdef CONFIG_ARCH_S390X
|
||||
/*
|
||||
* Very special case: old & broken 64 bit gdb reading
|
||||
* from acrs[15]. Result is a 64 bit value. Read the
|
||||
* 32 bit acrs[15] value and shift it by 32. Sick...
|
||||
*/
|
||||
if (addr == (addr_t) &dummy->regs.acrs[15])
|
||||
tmp = ((unsigned long) child->thread.acrs[15]) << 32;
|
||||
else
|
||||
#endif
|
||||
tmp = *(addr_t *)((addr_t) &child->thread.acrs + offset);
|
||||
|
||||
} else if (addr == (addr_t) &dummy->regs.orig_gpr2) {
|
||||
|
@ -167,6 +184,9 @@ peek_user(struct task_struct *child, addr_t addr, addr_t data)
|
|||
*/
|
||||
offset = addr - (addr_t) &dummy->regs.fp_regs;
|
||||
tmp = *(addr_t *)((addr_t) &child->thread.fp_regs + offset);
|
||||
if (addr == (addr_t) &dummy->regs.fp_regs.fpc)
|
||||
tmp &= (unsigned long) FPC_VALID_MASK
|
||||
<< (BITS_PER_LONG - 32);
|
||||
|
||||
} else if (addr < (addr_t) (&dummy->regs.per_info + 1)) {
|
||||
/*
|
||||
|
@ -191,13 +211,19 @@ static int
|
|||
poke_user(struct task_struct *child, addr_t addr, addr_t data)
|
||||
{
|
||||
struct user *dummy = NULL;
|
||||
addr_t offset;
|
||||
addr_t offset, mask;
|
||||
|
||||
/*
|
||||
* Stupid gdb peeks/pokes the access registers in 64 bit with
|
||||
* an alignment of 4. Programmers from hell indeed...
|
||||
*/
|
||||
if ((addr & 3) || addr > sizeof(struct user) - __ADDR_MASK)
|
||||
mask = __ADDR_MASK;
|
||||
#ifdef CONFIG_ARCH_S390X
|
||||
if (addr >= (addr_t) &dummy->regs.acrs &&
|
||||
addr < (addr_t) &dummy->regs.orig_gpr2)
|
||||
mask = 3;
|
||||
#endif
|
||||
if ((addr & mask) || addr > sizeof(struct user) - __ADDR_MASK)
|
||||
return -EIO;
|
||||
|
||||
if (addr < (addr_t) &dummy->regs.acrs) {
|
||||
|
@ -224,6 +250,17 @@ poke_user(struct task_struct *child, addr_t addr, addr_t data)
|
|||
* access registers are stored in the thread structure
|
||||
*/
|
||||
offset = addr - (addr_t) &dummy->regs.acrs;
|
||||
#ifdef CONFIG_ARCH_S390X
|
||||
/*
|
||||
* Very special case: old & broken 64 bit gdb writing
|
||||
* to acrs[15] with a 64 bit value. Ignore the lower
|
||||
* half of the value and write the upper 32 bit to
|
||||
* acrs[15]. Sick...
|
||||
*/
|
||||
if (addr == (addr_t) &dummy->regs.acrs[15])
|
||||
child->thread.acrs[15] = (unsigned int) (data >> 32);
|
||||
else
|
||||
#endif
|
||||
*(addr_t *)((addr_t) &child->thread.acrs + offset) = data;
|
||||
|
||||
} else if (addr == (addr_t) &dummy->regs.orig_gpr2) {
|
||||
|
@ -237,7 +274,8 @@ poke_user(struct task_struct *child, addr_t addr, addr_t data)
|
|||
* floating point regs. are stored in the thread structure
|
||||
*/
|
||||
if (addr == (addr_t) &dummy->regs.fp_regs.fpc &&
|
||||
(data & ~FPC_VALID_MASK) != 0)
|
||||
(data & ~((unsigned long) FPC_VALID_MASK
|
||||
<< (BITS_PER_LONG - 32))) != 0)
|
||||
return -EINVAL;
|
||||
offset = addr - (addr_t) &dummy->regs.fp_regs;
|
||||
*(addr_t *)((addr_t) &child->thread.fp_regs + offset) = data;
|
||||
|
@ -722,6 +760,13 @@ syscall_trace(struct pt_regs *regs, int entryexit)
|
|||
ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
|
||||
? 0x80 : 0));
|
||||
|
||||
/*
|
||||
* If the debuffer has set an invalid system call number,
|
||||
* we prepare to skip the system call restart handling.
|
||||
*/
|
||||
if (!entryexit && regs->gprs[2] >= NR_syscalls)
|
||||
regs->trap = -1;
|
||||
|
||||
/*
|
||||
* this isn't the same as continuing with a signal, but it will do
|
||||
* for normal use. strace only continues with a signal if the
|
||||
|
|
|
@ -207,7 +207,7 @@ do_exception(struct pt_regs *regs, unsigned long error_code, int is_protection)
|
|||
* we are not in an interrupt and that there is a
|
||||
* user context.
|
||||
*/
|
||||
if (user_address == 0 || in_interrupt() || !mm)
|
||||
if (user_address == 0 || in_atomic() || !mm)
|
||||
goto no_context;
|
||||
|
||||
/*
|
||||
|
|
|
@ -204,5 +204,11 @@ config UML_RANDOM
|
|||
http://sourceforge.net/projects/gkernel/). rngd periodically reads
|
||||
/dev/hwrng and injects the entropy into /dev/random.
|
||||
|
||||
config MMAPPER
|
||||
tristate "iomem emulation driver"
|
||||
help
|
||||
This driver allows a host file to be used as emulated IO memory inside
|
||||
UML.
|
||||
|
||||
endmenu
|
||||
|
||||
|
|
|
@ -22,8 +22,8 @@ obj-y := stdio_console.o fd.o chan_kern.o chan_user.o line.o
|
|||
obj-$(CONFIG_SSL) += ssl.o
|
||||
obj-$(CONFIG_STDERR_CONSOLE) += stderr_console.o
|
||||
|
||||
obj-$(CONFIG_UML_NET_SLIP) += slip.o
|
||||
obj-$(CONFIG_UML_NET_SLIRP) += slirp.o
|
||||
obj-$(CONFIG_UML_NET_SLIP) += slip.o slip_common.o
|
||||
obj-$(CONFIG_UML_NET_SLIRP) += slirp.o slip_common.o
|
||||
obj-$(CONFIG_UML_NET_DAEMON) += daemon.o
|
||||
obj-$(CONFIG_UML_NET_MCAST) += mcast.o
|
||||
#obj-$(CONFIG_UML_NET_PCAP) += pcap.o $(PCAP)
|
||||
|
@ -41,6 +41,6 @@ obj-$(CONFIG_UML_WATCHDOG) += harddog.o
|
|||
obj-$(CONFIG_BLK_DEV_COW_COMMON) += cow_user.o
|
||||
obj-$(CONFIG_UML_RANDOM) += random.o
|
||||
|
||||
USER_OBJS := fd.o null.o pty.o tty.o xterm.o
|
||||
USER_OBJS := fd.o null.o pty.o tty.o xterm.o slip_common.o
|
||||
|
||||
include arch/um/scripts/Makefile.rules
|
||||
|
|
|
@ -143,22 +143,22 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out)
|
|||
{
|
||||
struct winch_data data;
|
||||
unsigned long stack;
|
||||
int fds[2], pid, n, err;
|
||||
int fds[2], n, err;
|
||||
char c;
|
||||
|
||||
err = os_pipe(fds, 1, 1);
|
||||
if(err < 0){
|
||||
printk("winch_tramp : os_pipe failed, err = %d\n", -err);
|
||||
return(err);
|
||||
goto out;
|
||||
}
|
||||
|
||||
data = ((struct winch_data) { .pty_fd = fd,
|
||||
.pipe_fd = fds[1],
|
||||
.close_me = fds[0] } );
|
||||
pid = run_helper_thread(winch_thread, &data, 0, &stack, 0);
|
||||
if(pid < 0){
|
||||
err = run_helper_thread(winch_thread, &data, 0, &stack, 0);
|
||||
if(err < 0){
|
||||
printk("fork of winch_thread failed - errno = %d\n", errno);
|
||||
return(pid);
|
||||
goto out_close;
|
||||
}
|
||||
|
||||
os_close_file(fds[1]);
|
||||
|
@ -168,14 +168,22 @@ static int winch_tramp(int fd, struct tty_struct *tty, int *fd_out)
|
|||
printk("winch_tramp : failed to read synchronization byte\n");
|
||||
printk("read failed, err = %d\n", -n);
|
||||
printk("fd %d will not support SIGWINCH\n", fd);
|
||||
*fd_out = -1;
|
||||
err = -EINVAL;
|
||||
goto out_close1;
|
||||
}
|
||||
return(pid);
|
||||
return err ;
|
||||
|
||||
out_close:
|
||||
os_close_file(fds[1]);
|
||||
out_close1:
|
||||
os_close_file(fds[0]);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
void register_winch(int fd, struct tty_struct *tty)
|
||||
{
|
||||
int pid, thread, thread_fd;
|
||||
int pid, thread, thread_fd = -1;
|
||||
int count;
|
||||
char c = 1;
|
||||
|
||||
|
@ -186,7 +194,7 @@ void register_winch(int fd, struct tty_struct *tty)
|
|||
if(!CHOOSE_MODE_PROC(is_tracer_winch, is_skas_winch, pid, fd,
|
||||
tty) && (pid == -1)){
|
||||
thread = winch_tramp(fd, tty, &thread_fd);
|
||||
if(fd != -1){
|
||||
if(thread > 0){
|
||||
register_winch_irq(thread_fd, fd, thread, tty);
|
||||
|
||||
count = os_write_file(thread_fd, &c, sizeof(c));
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/pgtable.h>
|
||||
|
@ -117,24 +118,39 @@ static struct file_operations mmapper_fops = {
|
|||
.release = mmapper_release,
|
||||
};
|
||||
|
||||
static struct miscdevice mmapper_dev = {
|
||||
.minor = MISC_DYNAMIC_MINOR,
|
||||
.name = "mmapper",
|
||||
.fops = &mmapper_fops
|
||||
};
|
||||
|
||||
static int __init mmapper_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
printk(KERN_INFO "Mapper v0.1\n");
|
||||
|
||||
v_buf = (char *) find_iomem("mmapper", &mmapper_size);
|
||||
if(mmapper_size == 0){
|
||||
printk(KERN_ERR "mmapper_init - find_iomem failed\n");
|
||||
return(0);
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = misc_register(&mmapper_dev);
|
||||
if(err){
|
||||
printk(KERN_ERR "mmapper - misc_register failed, err = %d\n",
|
||||
err);
|
||||
goto out;
|
||||
}
|
||||
|
||||
p_buf = __pa(v_buf);
|
||||
|
||||
devfs_mk_cdev(MKDEV(30, 0), S_IFCHR|S_IRUGO|S_IWUGO, "mmapper");
|
||||
return(0);
|
||||
out:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mmapper_exit(void)
|
||||
{
|
||||
misc_deregister(&mmapper_dev);
|
||||
}
|
||||
|
||||
module_init(mmapper_init);
|
||||
|
|
|
@ -32,7 +32,7 @@ int tap_open_common(void *dev, char *gate_addr)
|
|||
return(0);
|
||||
}
|
||||
|
||||
void tap_check_ips(char *gate_addr, char *eth_addr)
|
||||
void tap_check_ips(char *gate_addr, unsigned char *eth_addr)
|
||||
{
|
||||
int tap_addr[4];
|
||||
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
#ifndef __UM_SLIP_H
|
||||
#define __UM_SLIP_H
|
||||
|
||||
#define BUF_SIZE 1500
|
||||
/* two bytes each for a (pathological) max packet of escaped chars + *
|
||||
* terminating END char + initial END char */
|
||||
#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
|
||||
#include "slip_common.h"
|
||||
|
||||
struct slip_data {
|
||||
void *dev;
|
||||
|
@ -12,28 +9,12 @@ struct slip_data {
|
|||
char *addr;
|
||||
char *gate_addr;
|
||||
int slave;
|
||||
char ibuf[ENC_BUF_SIZE];
|
||||
char obuf[ENC_BUF_SIZE];
|
||||
int more; /* more data: do not read fd until ibuf has been drained */
|
||||
int pos;
|
||||
int esc;
|
||||
struct slip_proto slip;
|
||||
};
|
||||
|
||||
extern struct net_user_info slip_user_info;
|
||||
|
||||
extern int set_umn_addr(int fd, char *addr, char *ptp_addr);
|
||||
extern int slip_user_read(int fd, void *buf, int len, struct slip_data *pri);
|
||||
extern int slip_user_write(int fd, void *buf, int len, struct slip_data *pri);
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
#include <string.h>
|
||||
#include "slip_common.h"
|
||||
#include "net_user.h"
|
||||
|
||||
int slip_proto_read(int fd, void *buf, int len, struct slip_proto *slip)
|
||||
{
|
||||
int i, n, size, start;
|
||||
|
||||
if(slip->more > 0){
|
||||
i = 0;
|
||||
while(i < slip->more){
|
||||
size = slip_unesc(slip->ibuf[i++], slip->ibuf,
|
||||
&slip->pos, &slip->esc);
|
||||
if(size){
|
||||
memcpy(buf, slip->ibuf, size);
|
||||
memmove(slip->ibuf, &slip->ibuf[i],
|
||||
slip->more - i);
|
||||
slip->more = slip->more - i;
|
||||
return size;
|
||||
}
|
||||
}
|
||||
slip->more = 0;
|
||||
}
|
||||
|
||||
n = net_read(fd, &slip->ibuf[slip->pos],
|
||||
sizeof(slip->ibuf) - slip->pos);
|
||||
if(n <= 0)
|
||||
return n;
|
||||
|
||||
start = slip->pos;
|
||||
for(i = 0; i < n; i++){
|
||||
size = slip_unesc(slip->ibuf[start + i], slip->ibuf,&slip->pos,
|
||||
&slip->esc);
|
||||
if(size){
|
||||
memcpy(buf, slip->ibuf, size);
|
||||
memmove(slip->ibuf, &slip->ibuf[start+i+1],
|
||||
n - (i + 1));
|
||||
slip->more = n - (i + 1);
|
||||
return size;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int slip_proto_write(int fd, void *buf, int len, struct slip_proto *slip)
|
||||
{
|
||||
int actual, n;
|
||||
|
||||
actual = slip_esc(buf, slip->obuf, len);
|
||||
n = net_write(fd, slip->obuf, actual);
|
||||
if(n < 0)
|
||||
return n;
|
||||
else return len;
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
/*
|
||||
* Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
#ifndef __UM_SLIP_COMMON_H
|
||||
#define __UM_SLIP_COMMON_H
|
||||
|
||||
#ifndef __UM_SLIP_PROTO_H__
|
||||
#define __UM_SLIP_PROTO_H__
|
||||
#define BUF_SIZE 1500
|
||||
/* two bytes each for a (pathological) max packet of escaped chars + *
|
||||
* terminating END char + initial END char */
|
||||
#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
|
||||
|
||||
/* SLIP protocol characters. */
|
||||
#define SLIP_END 0300 /* indicates end of frame */
|
||||
|
@ -12,7 +12,8 @@
|
|||
#define SLIP_ESC_END 0334 /* ESC ESC_END means END 'data' */
|
||||
#define SLIP_ESC_ESC 0335 /* ESC ESC_ESC means ESC 'data' */
|
||||
|
||||
static inline int slip_unesc(unsigned char c,char *buf,int *pos, int *esc)
|
||||
static inline int slip_unesc(unsigned char c, unsigned char *buf, int *pos,
|
||||
int *esc)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -79,15 +80,25 @@ static inline int slip_esc(unsigned char *s, unsigned char *d, int len)
|
|||
return (ptr - d);
|
||||
}
|
||||
|
||||
#endif
|
||||
struct slip_proto {
|
||||
unsigned char ibuf[ENC_BUF_SIZE];
|
||||
unsigned char obuf[ENC_BUF_SIZE];
|
||||
int more; /* more data: do not read fd until ibuf has been drained */
|
||||
int pos;
|
||||
int esc;
|
||||
};
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
#define SLIP_PROTO_INIT { \
|
||||
.ibuf = { '\0' }, \
|
||||
.obuf = { '\0' }, \
|
||||
.more = 0, \
|
||||
.pos = 0, \
|
||||
.esc = 0 \
|
||||
}
|
||||
|
||||
extern int slip_proto_read(int fd, void *buf, int len,
|
||||
struct slip_proto *slip);
|
||||
extern int slip_proto_write(int fd, void *buf, int len,
|
||||
struct slip_proto *slip);
|
||||
|
||||
#endif
|
|
@ -26,16 +26,16 @@ void slip_init(struct net_device *dev, void *data)
|
|||
.addr = NULL,
|
||||
.gate_addr = init->gate_addr,
|
||||
.slave = -1,
|
||||
.ibuf = { '\0' },
|
||||
.obuf = { '\0' },
|
||||
.pos = 0,
|
||||
.esc = 0,
|
||||
.slip = SLIP_PROTO_INIT,
|
||||
.dev = dev });
|
||||
|
||||
dev->init = NULL;
|
||||
dev->header_cache_update = NULL;
|
||||
dev->hard_header_cache = NULL;
|
||||
dev->hard_header = NULL;
|
||||
dev->hard_header_len = 0;
|
||||
dev->addr_len = 4;
|
||||
dev->type = ARPHRD_ETHER;
|
||||
dev->addr_len = 0;
|
||||
dev->type = ARPHRD_SLIP;
|
||||
dev->tx_queue_len = 256;
|
||||
dev->flags = IFF_NOARP;
|
||||
printk("SLIP backend - SLIP IP = %s\n", spri->gate_addr);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include "user.h"
|
||||
#include "net_user.h"
|
||||
#include "slip.h"
|
||||
#include "slip_proto.h"
|
||||
#include "slip_common.h"
|
||||
#include "helper.h"
|
||||
#include "os.h"
|
||||
|
||||
|
@ -77,41 +77,51 @@ static int slip_tramp(char **argv, int fd)
|
|||
err = os_pipe(fds, 1, 0);
|
||||
if(err < 0){
|
||||
printk("slip_tramp : pipe failed, err = %d\n", -err);
|
||||
return(err);
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = 0;
|
||||
pe_data.stdin = fd;
|
||||
pe_data.stdout = fds[1];
|
||||
pe_data.close_me = fds[0];
|
||||
pid = run_helper(slip_pre_exec, &pe_data, argv, NULL);
|
||||
err = run_helper(slip_pre_exec, &pe_data, argv, NULL);
|
||||
if(err < 0)
|
||||
goto out_close;
|
||||
pid = err;
|
||||
|
||||
if(pid < 0) err = pid;
|
||||
else {
|
||||
output_len = page_size();
|
||||
output = um_kmalloc(output_len);
|
||||
if(output == NULL)
|
||||
printk("slip_tramp : failed to allocate output "
|
||||
"buffer\n");
|
||||
|
||||
os_close_file(fds[1]);
|
||||
read_output(fds[0], output, output_len);
|
||||
if(output != NULL){
|
||||
printk("%s", output);
|
||||
kfree(output);
|
||||
}
|
||||
CATCH_EINTR(err = waitpid(pid, &status, 0));
|
||||
if(err < 0)
|
||||
err = errno;
|
||||
else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)){
|
||||
printk("'%s' didn't exit with status 0\n", argv[0]);
|
||||
err = -EINVAL;
|
||||
}
|
||||
output_len = page_size();
|
||||
output = um_kmalloc(output_len);
|
||||
if(output == NULL){
|
||||
printk("slip_tramp : failed to allocate output buffer\n");
|
||||
os_kill_process(pid, 1);
|
||||
err = -ENOMEM;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
os_close_file(fds[1]);
|
||||
read_output(fds[0], output, output_len);
|
||||
printk("%s", output);
|
||||
|
||||
CATCH_EINTR(err = waitpid(pid, &status, 0));
|
||||
if(err < 0)
|
||||
err = errno;
|
||||
else if(!WIFEXITED(status) || (WEXITSTATUS(status) != 0)){
|
||||
printk("'%s' didn't exit with status 0\n", argv[0]);
|
||||
err = -EINVAL;
|
||||
}
|
||||
else err = 0;
|
||||
|
||||
os_close_file(fds[0]);
|
||||
|
||||
return(err);
|
||||
out_free:
|
||||
kfree(output);
|
||||
return err;
|
||||
|
||||
out_close:
|
||||
os_close_file(fds[0]);
|
||||
os_close_file(fds[1]);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int slip_open(void *data)
|
||||
|
@ -123,21 +133,26 @@ static int slip_open(void *data)
|
|||
NULL };
|
||||
int sfd, mfd, err;
|
||||
|
||||
mfd = get_pty();
|
||||
if(mfd < 0){
|
||||
printk("umn : Failed to open pty, err = %d\n", -mfd);
|
||||
return(mfd);
|
||||
err = get_pty();
|
||||
if(err < 0){
|
||||
printk("slip-open : Failed to open pty, err = %d\n", -err);
|
||||
goto out;
|
||||
}
|
||||
sfd = os_open_file(ptsname(mfd), of_rdwr(OPENFLAGS()), 0);
|
||||
if(sfd < 0){
|
||||
printk("Couldn't open tty for slip line, err = %d\n", -sfd);
|
||||
os_close_file(mfd);
|
||||
return(sfd);
|
||||
mfd = err;
|
||||
|
||||
err = os_open_file(ptsname(mfd), of_rdwr(OPENFLAGS()), 0);
|
||||
if(err < 0){
|
||||
printk("Couldn't open tty for slip line, err = %d\n", -err);
|
||||
goto out_close;
|
||||
}
|
||||
if(set_up_tty(sfd)) return(-1);
|
||||
sfd = err;
|
||||
|
||||
if(set_up_tty(sfd))
|
||||
goto out_close2;
|
||||
|
||||
pri->slave = sfd;
|
||||
pri->pos = 0;
|
||||
pri->esc = 0;
|
||||
pri->slip.pos = 0;
|
||||
pri->slip.esc = 0;
|
||||
if(pri->gate_addr != NULL){
|
||||
sprintf(version_buf, "%d", UML_NET_VERSION);
|
||||
strcpy(gate_buf, pri->gate_addr);
|
||||
|
@ -146,12 +161,12 @@ static int slip_open(void *data)
|
|||
|
||||
if(err < 0){
|
||||
printk("slip_tramp failed - err = %d\n", -err);
|
||||
return(err);
|
||||
goto out_close2;
|
||||
}
|
||||
err = os_get_ifname(pri->slave, pri->name);
|
||||
if(err < 0){
|
||||
printk("get_ifname failed, err = %d\n", -err);
|
||||
return(err);
|
||||
goto out_close2;
|
||||
}
|
||||
iter_addresses(pri->dev, open_addr, pri->name);
|
||||
}
|
||||
|
@ -160,10 +175,16 @@ static int slip_open(void *data)
|
|||
if(err < 0){
|
||||
printk("Failed to set slip discipline encapsulation - "
|
||||
"err = %d\n", -err);
|
||||
return(err);
|
||||
goto out_close2;
|
||||
}
|
||||
}
|
||||
return(mfd);
|
||||
out_close2:
|
||||
os_close_file(sfd);
|
||||
out_close:
|
||||
os_close_file(mfd);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void slip_close(int fd, void *data)
|
||||
|
@ -190,48 +211,12 @@ static void slip_close(int fd, void *data)
|
|||
|
||||
int slip_user_read(int fd, void *buf, int len, struct slip_data *pri)
|
||||
{
|
||||
int i, n, size, start;
|
||||
|
||||
if(pri->more>0) {
|
||||
i = 0;
|
||||
while(i < pri->more) {
|
||||
size = slip_unesc(pri->ibuf[i++],
|
||||
pri->ibuf, &pri->pos, &pri->esc);
|
||||
if(size){
|
||||
memcpy(buf, pri->ibuf, size);
|
||||
memmove(pri->ibuf, &pri->ibuf[i], pri->more-i);
|
||||
pri->more=pri->more-i;
|
||||
return(size);
|
||||
}
|
||||
}
|
||||
pri->more=0;
|
||||
}
|
||||
|
||||
n = net_read(fd, &pri->ibuf[pri->pos], sizeof(pri->ibuf) - pri->pos);
|
||||
if(n <= 0) return(n);
|
||||
|
||||
start = pri->pos;
|
||||
for(i = 0; i < n; i++){
|
||||
size = slip_unesc(pri->ibuf[start + i],
|
||||
pri->ibuf, &pri->pos, &pri->esc);
|
||||
if(size){
|
||||
memcpy(buf, pri->ibuf, size);
|
||||
memmove(pri->ibuf, &pri->ibuf[start+i+1], n-(i+1));
|
||||
pri->more=n-(i+1);
|
||||
return(size);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
return slip_proto_read(fd, buf, len, &pri->slip);
|
||||
}
|
||||
|
||||
int slip_user_write(int fd, void *buf, int len, struct slip_data *pri)
|
||||
{
|
||||
int actual, n;
|
||||
|
||||
actual = slip_esc(buf, pri->obuf, len);
|
||||
n = net_write(fd, pri->obuf, actual);
|
||||
if(n < 0) return(n);
|
||||
else return(len);
|
||||
return slip_proto_write(fd, buf, len, &pri->slip);
|
||||
}
|
||||
|
||||
static int slip_set_mtu(int mtu, void *data)
|
||||
|
@ -267,14 +252,3 @@ struct net_user_info slip_user_info = {
|
|||
.delete_address = slip_del_addr,
|
||||
.max_packet = BUF_SIZE
|
||||
};
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
#ifndef __UM_SLIRP_H
|
||||
#define __UM_SLIRP_H
|
||||
|
||||
#define BUF_SIZE 1500
|
||||
/* two bytes each for a (pathological) max packet of escaped chars + *
|
||||
* terminating END char + initial END char */
|
||||
#define ENC_BUF_SIZE (2 * BUF_SIZE + 2)
|
||||
#include "slip_common.h"
|
||||
|
||||
#define SLIRP_MAX_ARGS 100
|
||||
/*
|
||||
|
@ -24,28 +21,13 @@ struct slirp_data {
|
|||
struct arg_list_dummy_wrapper argw;
|
||||
int pid;
|
||||
int slave;
|
||||
char ibuf[ENC_BUF_SIZE];
|
||||
char obuf[ENC_BUF_SIZE];
|
||||
int more; /* more data: do not read fd until ibuf has been drained */
|
||||
int pos;
|
||||
int esc;
|
||||
struct slip_proto slip;
|
||||
};
|
||||
|
||||
extern struct net_user_info slirp_user_info;
|
||||
|
||||
extern int set_umn_addr(int fd, char *addr, char *ptp_addr);
|
||||
extern int slirp_user_read(int fd, void *buf, int len, struct slirp_data *pri);
|
||||
extern int slirp_user_write(int fd, void *buf, int len, struct slirp_data *pri);
|
||||
extern int slirp_user_write(int fd, void *buf, int len,
|
||||
struct slirp_data *pri);
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
|
|
|
@ -25,10 +25,7 @@ void slirp_init(struct net_device *dev, void *data)
|
|||
{ .argw = init->argw,
|
||||
.pid = -1,
|
||||
.slave = -1,
|
||||
.ibuf = { '\0' },
|
||||
.obuf = { '\0' },
|
||||
.pos = 0,
|
||||
.esc = 0,
|
||||
.slip = SLIP_PROTO_INIT,
|
||||
.dev = dev });
|
||||
|
||||
dev->init = NULL;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "user.h"
|
||||
#include "net_user.h"
|
||||
#include "slirp.h"
|
||||
#include "slip_proto.h"
|
||||
#include "slip_common.h"
|
||||
#include "helper.h"
|
||||
#include "os.h"
|
||||
|
||||
|
@ -48,47 +48,32 @@ static int slirp_tramp(char **argv, int fd)
|
|||
return(pid);
|
||||
}
|
||||
|
||||
/* XXX This is just a trivial wrapper around os_pipe */
|
||||
static int slirp_datachan(int *mfd, int *sfd)
|
||||
{
|
||||
int fds[2], err;
|
||||
|
||||
err = os_pipe(fds, 1, 1);
|
||||
if(err < 0){
|
||||
printk("slirp_datachan: Failed to open pipe, err = %d\n", -err);
|
||||
return(err);
|
||||
}
|
||||
|
||||
*mfd = fds[0];
|
||||
*sfd = fds[1];
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int slirp_open(void *data)
|
||||
{
|
||||
struct slirp_data *pri = data;
|
||||
int sfd, mfd, pid, err;
|
||||
int fds[2], pid, err;
|
||||
|
||||
err = slirp_datachan(&mfd, &sfd);
|
||||
err = os_pipe(fds, 1, 1);
|
||||
if(err)
|
||||
return(err);
|
||||
|
||||
pid = slirp_tramp(pri->argw.argv, sfd);
|
||||
|
||||
if(pid < 0){
|
||||
printk("slirp_tramp failed - errno = %d\n", -pid);
|
||||
os_close_file(sfd);
|
||||
os_close_file(mfd);
|
||||
return(pid);
|
||||
err = slirp_tramp(pri->argw.argv, fds[1]);
|
||||
if(err < 0){
|
||||
printk("slirp_tramp failed - errno = %d\n", -err);
|
||||
goto out;
|
||||
}
|
||||
pid = err;
|
||||
|
||||
pri->slave = sfd;
|
||||
pri->pos = 0;
|
||||
pri->esc = 0;
|
||||
pri->slave = fds[1];
|
||||
pri->slip.pos = 0;
|
||||
pri->slip.esc = 0;
|
||||
pri->pid = err;
|
||||
|
||||
pri->pid = pid;
|
||||
|
||||
return(mfd);
|
||||
return(fds[0]);
|
||||
out:
|
||||
os_close_file(fds[0]);
|
||||
os_close_file(fds[1]);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void slirp_close(int fd, void *data)
|
||||
|
@ -129,48 +114,12 @@ static void slirp_close(int fd, void *data)
|
|||
|
||||
int slirp_user_read(int fd, void *buf, int len, struct slirp_data *pri)
|
||||
{
|
||||
int i, n, size, start;
|
||||
|
||||
if(pri->more>0) {
|
||||
i = 0;
|
||||
while(i < pri->more) {
|
||||
size = slip_unesc(pri->ibuf[i++],
|
||||
pri->ibuf,&pri->pos,&pri->esc);
|
||||
if(size){
|
||||
memcpy(buf, pri->ibuf, size);
|
||||
memmove(pri->ibuf, &pri->ibuf[i], pri->more-i);
|
||||
pri->more=pri->more-i;
|
||||
return(size);
|
||||
}
|
||||
}
|
||||
pri->more=0;
|
||||
}
|
||||
|
||||
n = net_read(fd, &pri->ibuf[pri->pos], sizeof(pri->ibuf) - pri->pos);
|
||||
if(n <= 0) return(n);
|
||||
|
||||
start = pri->pos;
|
||||
for(i = 0; i < n; i++){
|
||||
size = slip_unesc(pri->ibuf[start + i],
|
||||
pri->ibuf,&pri->pos,&pri->esc);
|
||||
if(size){
|
||||
memcpy(buf, pri->ibuf, size);
|
||||
memmove(pri->ibuf, &pri->ibuf[start+i+1], n-(i+1));
|
||||
pri->more=n-(i+1);
|
||||
return(size);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
return slip_proto_read(fd, buf, len, &pri->slip);
|
||||
}
|
||||
|
||||
int slirp_user_write(int fd, void *buf, int len, struct slirp_data *pri)
|
||||
{
|
||||
int actual, n;
|
||||
|
||||
actual = slip_esc(buf, pri->obuf, len);
|
||||
n = net_write(fd, pri->obuf, actual);
|
||||
if(n < 0) return(n);
|
||||
else return(len);
|
||||
return slip_proto_write(fd, buf, len, &pri->slip);
|
||||
}
|
||||
|
||||
static int slirp_set_mtu(int mtu, void *data)
|
||||
|
@ -188,14 +137,3 @@ struct net_user_info slirp_user_info = {
|
|||
.delete_address = NULL,
|
||||
.max_packet = BUF_SIZE
|
||||
};
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-file-style: "linux"
|
||||
* End:
|
||||
*/
|
||||
|
|
|
@ -22,9 +22,9 @@ static void stderr_console_write(struct console *console, const char *string,
|
|||
}
|
||||
|
||||
static struct console stderr_console = {
|
||||
.name "stderr",
|
||||
.write stderr_console_write,
|
||||
.flags CON_PRINTBUFFER,
|
||||
.name = "stderr",
|
||||
.write = stderr_console_write,
|
||||
.flags = CON_PRINTBUFFER,
|
||||
};
|
||||
|
||||
static int __init stderr_console_init(void)
|
||||
|
|
|
@ -56,7 +56,7 @@ struct mc_request
|
|||
int as_interrupt;
|
||||
|
||||
int originating_fd;
|
||||
int originlen;
|
||||
unsigned int originlen;
|
||||
unsigned char origin[128]; /* sockaddr_un */
|
||||
|
||||
struct mconsole_request request;
|
||||
|
|
|
@ -35,7 +35,7 @@ extern void *get_output_buffer(int *len_out);
|
|||
extern void free_output_buffer(void *buffer);
|
||||
|
||||
extern int tap_open_common(void *dev, char *gate_addr);
|
||||
extern void tap_check_ips(char *gate_addr, char *eth_addr);
|
||||
extern void tap_check_ips(char *gate_addr, unsigned char *eth_addr);
|
||||
|
||||
extern void read_output(int fd, char *output_out, int len);
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ extern int os_seek_file(int fd, __u64 offset);
|
|||
extern int os_open_file(char *file, struct openflags flags, int mode);
|
||||
extern int os_read_file(int fd, void *buf, int len);
|
||||
extern int os_write_file(int fd, const void *buf, int count);
|
||||
extern int os_file_size(char *file, long long *size_out);
|
||||
extern int os_file_size(char *file, unsigned long long *size_out);
|
||||
extern int os_file_modtime(char *file, unsigned long *modtime);
|
||||
extern int os_pipe(int *fd, int stream, int close_on_exec);
|
||||
extern int os_set_fd_async(int fd, int owner);
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
#include "uml-config.h"
|
||||
#include "user_constants.h"
|
||||
#include "sysdep/faultinfo.h"
|
||||
#include "choose-mode.h"
|
||||
|
||||
#define MAX_REG_NR (UM_FRAME_SIZE / sizeof(unsigned long))
|
||||
#define MAX_REG_OFFSET (UM_FRAME_SIZE)
|
||||
|
@ -58,9 +60,6 @@ extern int sysemu_supported;
|
|||
#define PTRACE_SYSEMU_SINGLESTEP 32
|
||||
#endif
|
||||
|
||||
#include "sysdep/faultinfo.h"
|
||||
#include "choose-mode.h"
|
||||
|
||||
union uml_pt_regs {
|
||||
#ifdef UML_CONFIG_MODE_TT
|
||||
struct tt_regs {
|
||||
|
|
|
@ -41,9 +41,6 @@ extern unsigned long highmem;
|
|||
extern char host_info[];
|
||||
|
||||
extern char saved_command_line[];
|
||||
extern char command_line[];
|
||||
|
||||
extern char *tempdir;
|
||||
|
||||
extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end;
|
||||
extern unsigned long _unprotected_end;
|
||||
|
|
|
@ -24,8 +24,6 @@
|
|||
#include "mode.h"
|
||||
#include "choose-mode.h"
|
||||
#include "uml-config.h"
|
||||
#include "irq_user.h"
|
||||
#include "time_user.h"
|
||||
#include "os.h"
|
||||
|
||||
/* Set in set_stklim, which is called from main and __wrap_malloc.
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include "init.h"
|
||||
#include "os.h"
|
||||
#include "uml-config.h"
|
||||
#include "ptrace_user.h"
|
||||
#include "choose-mode.h"
|
||||
#include "mode.h"
|
||||
#ifdef UML_CONFIG_MODE_SKAS
|
||||
|
@ -131,7 +130,7 @@ int start_fork_tramp(void *thread_arg, unsigned long temp_stack,
|
|||
return(arg.pid);
|
||||
}
|
||||
|
||||
static int ptrace_child(void *arg)
|
||||
static int ptrace_child(void)
|
||||
{
|
||||
int ret;
|
||||
int pid = os_getpid(), ppid = getppid();
|
||||
|
@ -160,20 +159,16 @@ static int ptrace_child(void *arg)
|
|||
_exit(ret);
|
||||
}
|
||||
|
||||
static int start_ptraced_child(void **stack_out)
|
||||
static int start_ptraced_child(void)
|
||||
{
|
||||
void *stack;
|
||||
unsigned long sp;
|
||||
int pid, n, status;
|
||||
|
||||
stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
if(stack == MAP_FAILED)
|
||||
panic("check_ptrace : mmap failed, errno = %d", errno);
|
||||
sp = (unsigned long) stack + PAGE_SIZE - sizeof(void *);
|
||||
pid = clone(ptrace_child, (void *) sp, SIGCHLD, NULL);
|
||||
pid = fork();
|
||||
if(pid == 0)
|
||||
ptrace_child();
|
||||
|
||||
if(pid < 0)
|
||||
panic("check_ptrace : clone failed, errno = %d", errno);
|
||||
panic("check_ptrace : fork failed, errno = %d", errno);
|
||||
CATCH_EINTR(n = waitpid(pid, &status, WUNTRACED));
|
||||
if(n < 0)
|
||||
panic("check_ptrace : wait failed, errno = %d", errno);
|
||||
|
@ -181,7 +176,6 @@ static int start_ptraced_child(void **stack_out)
|
|||
panic("check_ptrace : expected SIGSTOP, got status = %d",
|
||||
status);
|
||||
|
||||
*stack_out = stack;
|
||||
return(pid);
|
||||
}
|
||||
|
||||
|
@ -189,12 +183,12 @@ static int start_ptraced_child(void **stack_out)
|
|||
* just avoid using sysemu, not panic, but only if SYSEMU features are broken.
|
||||
* So only for SYSEMU features we test mustpanic, while normal host features
|
||||
* must work anyway!*/
|
||||
static int stop_ptraced_child(int pid, void *stack, int exitcode, int mustpanic)
|
||||
static int stop_ptraced_child(int pid, int exitcode, int mustexit)
|
||||
{
|
||||
int status, n, ret = 0;
|
||||
|
||||
if(ptrace(PTRACE_CONT, pid, 0, 0) < 0)
|
||||
panic("check_ptrace : ptrace failed, errno = %d", errno);
|
||||
panic("stop_ptraced_child : ptrace failed, errno = %d", errno);
|
||||
CATCH_EINTR(n = waitpid(pid, &status, 0));
|
||||
if(!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) {
|
||||
int exit_with = WEXITSTATUS(status);
|
||||
|
@ -205,15 +199,13 @@ static int stop_ptraced_child(int pid, void *stack, int exitcode, int mustpanic)
|
|||
printk("check_ptrace : child exited with exitcode %d, while "
|
||||
"expecting %d; status 0x%x", exit_with,
|
||||
exitcode, status);
|
||||
if (mustpanic)
|
||||
if (mustexit)
|
||||
panic("\n");
|
||||
else
|
||||
printk("\n");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
if(munmap(stack, PAGE_SIZE) < 0)
|
||||
panic("check_ptrace : munmap failed, errno = %d", errno);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -235,12 +227,11 @@ __uml_setup("nosysemu", nosysemu_cmd_param,
|
|||
|
||||
static void __init check_sysemu(void)
|
||||
{
|
||||
void *stack;
|
||||
int pid, syscall, n, status, count=0;
|
||||
|
||||
printk("Checking syscall emulation patch for ptrace...");
|
||||
sysemu_supported = 0;
|
||||
pid = start_ptraced_child(&stack);
|
||||
pid = start_ptraced_child();
|
||||
|
||||
if(ptrace(PTRACE_SYSEMU, pid, 0, 0) < 0)
|
||||
goto fail;
|
||||
|
@ -258,7 +249,7 @@ static void __init check_sysemu(void)
|
|||
panic("check_sysemu : failed to modify system "
|
||||
"call return, errno = %d", errno);
|
||||
|
||||
if (stop_ptraced_child(pid, stack, 0, 0) < 0)
|
||||
if (stop_ptraced_child(pid, 0, 0) < 0)
|
||||
goto fail_stopped;
|
||||
|
||||
sysemu_supported = 1;
|
||||
|
@ -266,7 +257,7 @@ static void __init check_sysemu(void)
|
|||
set_using_sysemu(!force_sysemu_disabled);
|
||||
|
||||
printk("Checking advanced syscall emulation patch for ptrace...");
|
||||
pid = start_ptraced_child(&stack);
|
||||
pid = start_ptraced_child();
|
||||
while(1){
|
||||
count++;
|
||||
if(ptrace(PTRACE_SYSEMU_SINGLESTEP, pid, 0, 0) < 0)
|
||||
|
@ -291,7 +282,7 @@ static void __init check_sysemu(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (stop_ptraced_child(pid, stack, 0, 0) < 0)
|
||||
if (stop_ptraced_child(pid, 0, 0) < 0)
|
||||
goto fail_stopped;
|
||||
|
||||
sysemu_supported = 2;
|
||||
|
@ -302,18 +293,17 @@ static void __init check_sysemu(void)
|
|||
return;
|
||||
|
||||
fail:
|
||||
stop_ptraced_child(pid, stack, 1, 0);
|
||||
stop_ptraced_child(pid, 1, 0);
|
||||
fail_stopped:
|
||||
printk("missing\n");
|
||||
}
|
||||
|
||||
void __init check_ptrace(void)
|
||||
{
|
||||
void *stack;
|
||||
int pid, syscall, n, status;
|
||||
|
||||
printk("Checking that ptrace can change system call numbers...");
|
||||
pid = start_ptraced_child(&stack);
|
||||
pid = start_ptraced_child();
|
||||
|
||||
if (ptrace(PTRACE_OLDSETOPTIONS, pid, 0, (void *)PTRACE_O_TRACESYSGOOD) < 0)
|
||||
panic("check_ptrace: PTRACE_SETOPTIONS failed, errno = %d", errno);
|
||||
|
@ -340,7 +330,7 @@ void __init check_ptrace(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
stop_ptraced_child(pid, stack, 0, 1);
|
||||
stop_ptraced_child(pid, 0, 1);
|
||||
printk("OK\n");
|
||||
check_sysemu();
|
||||
}
|
||||
|
@ -372,11 +362,10 @@ void forward_pending_sigio(int target)
|
|||
static inline int check_skas3_ptrace_support(void)
|
||||
{
|
||||
struct ptrace_faultinfo fi;
|
||||
void *stack;
|
||||
int pid, n, ret = 1;
|
||||
|
||||
printf("Checking for the skas3 patch in the host...");
|
||||
pid = start_ptraced_child(&stack);
|
||||
pid = start_ptraced_child();
|
||||
|
||||
n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
|
||||
if (n < 0) {
|
||||
|
@ -391,7 +380,7 @@ static inline int check_skas3_ptrace_support(void)
|
|||
}
|
||||
|
||||
init_registers(pid);
|
||||
stop_ptraced_child(pid, stack, 1, 1);
|
||||
stop_ptraced_child(pid, 1, 1);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
|
|
|
@ -68,8 +68,11 @@ void new_thread_handler(int sig)
|
|||
* 0 if it just exits
|
||||
*/
|
||||
n = run_kernel_thread(fn, arg, ¤t->thread.exec_buf);
|
||||
if(n == 1)
|
||||
if(n == 1){
|
||||
/* Handle any immediate reschedules or signals */
|
||||
interrupt_end();
|
||||
userspace(¤t->thread.regs.regs);
|
||||
}
|
||||
else do_exit(0);
|
||||
}
|
||||
|
||||
|
@ -96,6 +99,8 @@ void fork_handler(int sig)
|
|||
schedule_tail(current->thread.prev_sched);
|
||||
current->thread.prev_sched = NULL;
|
||||
|
||||
/* Handle any immediate reschedules or signals */
|
||||
interrupt_end();
|
||||
userspace(¤t->thread.regs.regs);
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue