Merge with /home/shaggy/git/linus-clean/
This commit is contained in:
		
						commit
						d039ba24f1
					
				
							
								
								
									
										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 | ||||
|  | ||||
| @ -8,7 +8,7 @@ | ||||
| 
 | ||||
| DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
 | ||||
| 	    kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
 | ||||
| 	    procfs-guide.xml writing_usb_driver.xml scsidrivers.xml \
 | ||||
| 	    procfs-guide.xml writing_usb_driver.xml \
 | ||||
| 	    sis900.xml kernel-api.xml journal-api.xml lsm.xml usb.xml \
 | ||||
| 	    gadget.xml libata.xml mtdnand.xml librs.xml | ||||
| 
 | ||||
|  | ||||
| @ -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> | ||||
|  | ||||
| @ -1,193 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | ||||
| 	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | ||||
| 
 | ||||
| <book id="scsidrivers"> | ||||
|  <bookinfo> | ||||
|   <title>SCSI Subsystem Interfaces</title> | ||||
|    | ||||
|   <authorgroup> | ||||
|    <author> | ||||
|     <firstname>Douglas</firstname> | ||||
|     <surname>Gilbert</surname> | ||||
|     <affiliation> | ||||
|      <address> | ||||
|       <email>dgilbert@interlog.com</email> | ||||
|      </address> | ||||
|     </affiliation> | ||||
|    </author> | ||||
|   </authorgroup> | ||||
|   <pubdate>2003-08-11</pubdate> | ||||
| 
 | ||||
|   <copyright> | ||||
|    <year>2002</year> | ||||
|    <year>2003</year> | ||||
|    <holder>Douglas Gilbert</holder> | ||||
|   </copyright> | ||||
| 
 | ||||
|   <legalnotice> | ||||
|    <para> | ||||
|      This documentation is free software; you can redistribute | ||||
|      it and/or modify it under the terms of the GNU General Public | ||||
|      License as published by the Free Software Foundation; either | ||||
|      version 2 of the License, or (at your option) any later | ||||
|      version. | ||||
|    </para> | ||||
|        | ||||
|    <para> | ||||
|      This program is distributed in the hope that it will be | ||||
|      useful, but WITHOUT ANY WARRANTY; without even the implied | ||||
|      warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||||
|      See the GNU General Public License for more details. | ||||
|    </para> | ||||
|        | ||||
|    <para> | ||||
|      You should have received a copy of the GNU General Public | ||||
|      License along with this program; if not, write to the Free | ||||
|      Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||||
|      MA 02111-1307 USA | ||||
|    </para> | ||||
|        | ||||
|    <para> | ||||
|      For more details see the file COPYING in the source | ||||
|      distribution of Linux. | ||||
|    </para> | ||||
|   </legalnotice> | ||||
| 
 | ||||
|  </bookinfo> | ||||
| 
 | ||||
| <toc></toc> | ||||
| 
 | ||||
|   <chapter id="intro"> | ||||
|       <title>Introduction</title> | ||||
|   <para> | ||||
| This document outlines the interface between the Linux scsi mid level | ||||
| and lower level drivers. Lower level drivers are variously called HBA | ||||
| (host bus adapter) drivers, host drivers (HD) or pseudo adapter drivers. | ||||
| The latter alludes to the fact that a lower level driver may be a | ||||
| bridge to another IO subsystem (and the "ide-scsi" driver is an example | ||||
| of this). There can be many lower level drivers active in a running | ||||
| system, but only one per hardware type. For example, the aic7xxx driver | ||||
| controls adaptec controllers based on the 7xxx chip series. Most lower | ||||
| level drivers can control one or more scsi hosts (a.k.a. scsi initiators). | ||||
|   </para> | ||||
| <para> | ||||
| This document can been found in an ASCII text file in the linux kernel  | ||||
| source: <filename>Documentation/scsi/scsi_mid_low_api.txt</filename> . | ||||
| It currently hold a little more information than this document. The | ||||
| <filename>drivers/scsi/hosts.h</filename> and <filename> | ||||
| drivers/scsi/scsi.h</filename> headers contain descriptions of members | ||||
| of important structures for the scsi subsystem. | ||||
| </para> | ||||
|   </chapter> | ||||
| 
 | ||||
|   <chapter id="driver-struct"> | ||||
|       <title>Driver structure</title> | ||||
|   <para> | ||||
| Traditionally a lower level driver for the scsi subsystem has been | ||||
| at least two files in the drivers/scsi directory. For example, a | ||||
| driver called "xyz" has a header file "xyz.h" and a source file | ||||
| "xyz.c". [Actually there is no good reason why this couldn't all | ||||
| be in one file.] Some drivers that have been ported to several operating | ||||
| systems (e.g. aic7xxx which has separate  files for generic and | ||||
| OS-specific code) have more than two files. Such drivers tend to have | ||||
| their own directory under the drivers/scsi directory. | ||||
|   </para> | ||||
|   <para> | ||||
| scsi_module.c is normally included at the end of a lower | ||||
| level driver. For it to work a declaration like this is needed before | ||||
| it is included: | ||||
| <programlisting> | ||||
|     static Scsi_Host_Template driver_template = DRIVER_TEMPLATE; | ||||
|     /* DRIVER_TEMPLATE should contain pointers to supported interface | ||||
|        functions. Scsi_Host_Template is defined hosts.h */ | ||||
|     #include "scsi_module.c" | ||||
| </programlisting> | ||||
|   </para> | ||||
|   <para> | ||||
| The scsi_module.c assumes the name "driver_template" is appropriately | ||||
| defined. It contains 2 functions: | ||||
| <orderedlist> | ||||
| <listitem><para> | ||||
|      init_this_scsi_driver() called during builtin and module driver | ||||
|      initialization: invokes mid level's scsi_register_host() | ||||
| </para></listitem> | ||||
| <listitem><para> | ||||
|      exit_this_scsi_driver() called during closedown: invokes | ||||
|      mid level's scsi_unregister_host() | ||||
| </para></listitem> | ||||
| </orderedlist> | ||||
|   </para> | ||||
| <para> | ||||
| When a new, lower level driver is being added to Linux, the following  | ||||
| files (all found in the drivers/scsi directory) will need some attention:  | ||||
| Makefile, Config.help and Config.in . It is probably best to look at what  | ||||
| an existing lower level driver does in this regard. | ||||
| </para> | ||||
|   </chapter> | ||||
| 
 | ||||
|   <chapter id="intfunctions"> | ||||
|      <title>Interface Functions</title> | ||||
| !EDocumentation/scsi/scsi_mid_low_api.txt | ||||
|   </chapter> | ||||
| 
 | ||||
|   <chapter id="locks"> | ||||
|      <title>Locks</title> | ||||
| <para> | ||||
| Each Scsi_Host instance has a spin_lock called Scsi_Host::default_lock | ||||
| which is initialized in scsi_register() [found in hosts.c]. Within the | ||||
| same function the Scsi_Host::host_lock pointer is initialized to point | ||||
| at default_lock with the scsi_assign_lock() function. Thereafter | ||||
| lock and unlock operations performed by the mid level use the | ||||
| Scsi_Host::host_lock pointer. | ||||
| </para> | ||||
| <para> | ||||
| Lower level drivers can override the use of Scsi_Host::default_lock by | ||||
| using scsi_assign_lock(). The earliest opportunity to do this would | ||||
| be in the detect() function after it has invoked scsi_register(). It | ||||
| could be replaced by a coarser grain lock (e.g. per driver) or a | ||||
| lock of equal granularity (i.e. per host). Using finer grain locks | ||||
| (e.g. per scsi device) may be possible by juggling locks in | ||||
| queuecommand(). | ||||
| </para> | ||||
|   </chapter> | ||||
| 
 | ||||
|   <chapter id="changes"> | ||||
|      <title>Changes since lk 2.4 series</title> | ||||
| <para> | ||||
| io_request_lock has been replaced by several finer grained locks. The lock | ||||
| relevant to lower level drivers is Scsi_Host::host_lock and there is one | ||||
| per scsi host. | ||||
| </para> | ||||
| <para> | ||||
| The older error handling mechanism has been removed. This means the | ||||
| lower level interface functions abort() and reset() have been removed. | ||||
| </para> | ||||
| <para> | ||||
| In the 2.4 series the scsi subsystem configuration descriptions were | ||||
| aggregated with the configuration descriptions from all other Linux | ||||
| subsystems in the Documentation/Configure.help file. In the 2.5 series, | ||||
| the scsi subsystem now has its own (much smaller) drivers/scsi/Config.help | ||||
| file. | ||||
| </para> | ||||
|   </chapter> | ||||
| 
 | ||||
|   <chapter id="credits"> | ||||
|      <title>Credits</title> | ||||
| <para> | ||||
| The following people have contributed to this document: | ||||
| <orderedlist> | ||||
| <listitem><para> | ||||
| Mike Anderson <email>andmike@us.ibm.com</email> | ||||
| </para></listitem> | ||||
| <listitem><para> | ||||
| James Bottomley <email>James.Bottomley@steeleye.com</email> | ||||
| </para></listitem> | ||||
| <listitem><para> | ||||
| Patrick Mansfield <email>patmans@us.ibm.com</email> | ||||
| </para></listitem> | ||||
| </orderedlist> | ||||
| </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> | ||||
|  | ||||
| @ -1,21 +1,21 @@ | ||||
| Generic HDLC layer | ||||
| Krzysztof Halasa <khc@pm.waw.pl> | ||||
| January, 2003 | ||||
| 
 | ||||
| 
 | ||||
| Generic HDLC layer currently supports: | ||||
| - Frame Relay (ANSI, CCITT and no LMI), with ARP support (no InARP). | ||||
|   Normal (routed) and Ethernet-bridged (Ethernet device emulation) | ||||
|   interfaces can share a single PVC. | ||||
| - raw HDLC - either IP (IPv4) interface or Ethernet device emulation. | ||||
| - Cisco HDLC, | ||||
| - PPP (uses syncppp.c), | ||||
| - X.25 (uses X.25 routines). | ||||
| 1. Frame Relay (ANSI, CCITT, Cisco and no LMI). | ||||
|    - Normal (routed) and Ethernet-bridged (Ethernet device emulation) | ||||
|      interfaces can share a single PVC. | ||||
|    - ARP support (no InARP support in the kernel - there is an | ||||
|      experimental InARP user-space daemon available on: | ||||
|      http://www.kernel.org/pub/linux/utils/net/hdlc/). | ||||
| 2. raw HDLC - either IP (IPv4) interface or Ethernet device emulation. | ||||
| 3. Cisco HDLC. | ||||
| 4. PPP (uses syncppp.c). | ||||
| 5. X.25 (uses X.25 routines). | ||||
| 
 | ||||
| There are hardware drivers for the following cards: | ||||
| - C101 by Moxa Technologies Co., Ltd. | ||||
| - RISCom/N2 by SDL Communications Inc. | ||||
| - and others, some not in the official kernel. | ||||
| Generic HDLC is a protocol driver only - it needs a low-level driver | ||||
| for your particular hardware. | ||||
| 
 | ||||
| Ethernet device emulation (using HDLC or Frame-Relay PVC) is compatible | ||||
| with IEEE 802.1Q (VLANs) and 802.1D (Ethernet bridging). | ||||
| @ -24,7 +24,7 @@ with IEEE 802.1Q (VLANs) and 802.1D (Ethernet bridging). | ||||
| Make sure the hdlc.o and the hardware driver are loaded. It should | ||||
| create a number of "hdlc" (hdlc0 etc) network devices, one for each | ||||
| WAN port. You'll need the "sethdlc" utility, get it from: | ||||
| 	http://hq.pm.waw.pl/hdlc/ | ||||
| 	http://www.kernel.org/pub/linux/utils/net/hdlc/ | ||||
| 
 | ||||
| Compile sethdlc.c utility: | ||||
| 	gcc -O2 -Wall -o sethdlc sethdlc.c | ||||
| @ -52,12 +52,12 @@ Setting interface: | ||||
| * v35 | rs232 | x21 | t1 | e1 - sets physical interface for a given port | ||||
|                                 if the card has software-selectable interfaces | ||||
|   loopback - activate hardware loopback (for testing only) | ||||
| * clock ext - external clock (uses DTE RX and TX clock) | ||||
| * clock int - internal clock (provides clock signal on DCE clock output) | ||||
| * clock txint - TX internal, RX external (provides TX clock on DCE output) | ||||
| * clock txfromrx - TX clock derived from RX clock (TX clock on DCE output) | ||||
| * rate - sets clock rate in bps (not required for external clock or | ||||
|                                  for txfromrx) | ||||
| * clock ext - both RX clock and TX clock external | ||||
| * clock int - both RX clock and TX clock internal | ||||
| * clock txint - RX clock external, TX clock internal | ||||
| * clock txfromrx - RX clock external, TX clock derived from RX clock | ||||
| * rate - sets clock rate in bps (for "int" or "txint" clock only) | ||||
| 
 | ||||
| 
 | ||||
| Setting protocol: | ||||
| 
 | ||||
| @ -79,7 +79,7 @@ Setting protocol: | ||||
| * x25 - sets X.25 mode | ||||
| 
 | ||||
| * fr - Frame Relay mode | ||||
|   lmi ansi / ccitt / none - LMI (link management) type | ||||
|   lmi ansi / ccitt / cisco / none - LMI (link management) type | ||||
|   dce - Frame Relay DCE (network) side LMI instead of default DTE (user). | ||||
|   It has nothing to do with clocks! | ||||
|   t391 - link integrity verification polling timer (in seconds) - user | ||||
| @ -119,13 +119,14 @@ or | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| If you have a problem with N2 or C101 card, you can issue the "private" | ||||
| command to see port's packet descriptor rings (in kernel logs): | ||||
| If you have a problem with N2, C101 or PLX200SYN card, you can issue the | ||||
| "private" command to see port's packet descriptor rings (in kernel logs): | ||||
| 
 | ||||
| 	sethdlc hdlc0 private | ||||
| 
 | ||||
| The hardware driver has to be build with CONFIG_HDLC_DEBUG_RINGS. | ||||
| The hardware driver has to be build with #define DEBUG_RINGS. | ||||
| Attaching this info to bug reports would be helpful. Anyway, let me know | ||||
| if you have problems using this. | ||||
| 
 | ||||
| For patches and other info look at http://hq.pm.waw.pl/hdlc/ | ||||
| For patches and other info look at: | ||||
| <http://www.kernel.org/pub/linux/utils/net/hdlc/>. | ||||
|  | ||||
| @ -47,7 +47,6 @@ ni52		<------------------ Buggy ------------------> | ||||
| ni65		YES		YES		YES		Software(#) | ||||
| seeq		NO		NO		NO		N/A | ||||
| sgiseek		<------------------ Buggy ------------------> | ||||
| sk_g16		NO		NO		YES		N/A | ||||
| smc-ultra	YES		YES		YES		Hardware | ||||
| sunlance	YES		YES		YES		Hardware | ||||
| tulip		YES		YES		YES		Hardware | ||||
|  | ||||
| @ -284,9 +284,6 @@ ppp.c: | ||||
| seeq8005.c: *Not modularized* | ||||
| 	(Probes ports: 0x300, 0x320, 0x340, 0x360) | ||||
| 
 | ||||
| sk_g16.c: *Not modularized* | ||||
| 	(Probes ports: 0x100, 0x180, 0x208, 0x220m 0x288, 0x320, 0x328, 0x390) | ||||
| 
 | ||||
| skeleton.c: *Skeleton* | ||||
| 
 | ||||
| slhc.c: | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -1,3 +1,69 @@ | ||||
| Release Date	: Mon Mar 07 12:27:22 EST 2005 - Seokmann Ju <sju@lsil.com> | ||||
| Current Version : 2.20.4.6 (scsi module), 2.20.2.6 (cmm module) | ||||
| Older Version	: 2.20.4.5 (scsi module), 2.20.2.5 (cmm module) | ||||
| 
 | ||||
| 1.	Added IOCTL backward compatibility. | ||||
| 	Convert megaraid_mm driver to new compat_ioctl entry points. | ||||
| 	I don't have easy access to hardware, so only compile tested. | ||||
| 		- Signed-off-by:Andi Kleen <ak@muc.de> | ||||
| 
 | ||||
| 2.	megaraid_mbox fix: wrong order of arguments in memset() | ||||
| 	That, BTW, shows why cross-builds are useful-the only indication of | ||||
| 	problem had been a new warning showing up in sparse output on alpha | ||||
| 	build (number of exceeding 256 got truncated). | ||||
| 		- Signed-off-by: Al Viro | ||||
| 		<viro@parcelfarce.linux.theplanet.co.uk> | ||||
| 
 | ||||
| 3.	Convert pci_module_init to pci_register_driver | ||||
| 	Convert from pci_module_init to pci_register_driver | ||||
| 	(from:http://kerneljanitors.org/TODO) | ||||
| 		- Signed-off-by: Domen Puncer <domen@coderock.org> | ||||
| 
 | ||||
| 4.	Use the pre defined DMA mask constants from dma-mapping.h | ||||
| 	Use the DMA_{64,32}BIT_MASK constants from dma-mapping.h when calling | ||||
| 	pci_set_dma_mask() or pci_set_consistend_dma_mask(). See | ||||
| 	http://marc.theaimsgroup.com/?t=108001993000001&r=1&w=2 for more | ||||
| 	details. | ||||
| 		Signed-off-by: Tobias Klauser <tklauser@nuerscht.ch> | ||||
| 		Signed-off-by: Domen Puncer <domen@coderock.org> | ||||
| 
 | ||||
| 5.	Remove SSID checking for Dobson, Lindsay, and Verde based products. | ||||
| 	Checking the SSVID/SSID for controllers which have Dobson, Lindsay, | ||||
| 	and Verde is unnecessary because device ID has been assigned by LSI | ||||
| 	and it is unique value. So, all controllers with these IOPs have to be | ||||
| 	supported by the driver regardless SSVID/SSID. | ||||
| 
 | ||||
| 6.	Date Thu, 27 Jan 2005 04:31:09 +0100  | ||||
| 	From Herbert Poetzl <>  | ||||
| 	Subject RFC: assert_spin_locked() for 2.6  | ||||
| 
 | ||||
| 	Greetings! | ||||
| 
 | ||||
| 	overcautious programming will kill your kernel ;) | ||||
| 	ever thought about checking a spin_lock or even | ||||
| 	asserting that it must be held (maybe just for | ||||
| 	spinlock debugging?) ... | ||||
| 
 | ||||
| 	there are several checks present in the kernel | ||||
| 	where somebody does a variation on the following: | ||||
| 
 | ||||
| 	  BUG_ON(!spin_is_locked(&some_lock)); | ||||
| 
 | ||||
| 	so what's wrong about that? nothing, unless you | ||||
| 	compile the code with CONFIG_DEBUG_SPINLOCK but  | ||||
| 	without CONFIG_SMP ... in which case the BUG() | ||||
| 	will kill your kernel ... | ||||
| 
 | ||||
| 	maybe it's not advised to make such assertions,  | ||||
| 	but here is a solution which works for me ... | ||||
| 	(compile tested for sh, x86_64 and x86, boot/run | ||||
| 	tested for x86 only) | ||||
| 
 | ||||
| 	best, | ||||
| 	Herbert | ||||
| 
 | ||||
| 		- Herbert Poetzl <herbert@13thfloor.at>, Thu, 27 Jan 2005 | ||||
| 
 | ||||
| Release Date	: Thu Feb 03 12:27:22 EST 2005 - Seokmann Ju <sju@lsil.com> | ||||
| Current Version	: 2.20.4.5 (scsi module), 2.20.2.5 (cmm module) | ||||
| Older Version	: 2.20.4.4 (scsi module), 2.20.2.4 (cmm module) | ||||
|  | ||||
							
								
								
									
										180
									
								
								Documentation/scsi/scsi-changer.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								Documentation/scsi/scsi-changer.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,180 @@ | ||||
| 
 | ||||
| README for the SCSI media changer driver | ||||
| ======================================== | ||||
| 
 | ||||
| This is a driver for SCSI Medium Changer devices, which are listed | ||||
| with "Type: Medium Changer" in /proc/scsi/scsi. | ||||
| 
 | ||||
| This is for *real* Jukeboxes.  It is *not* supported to work with | ||||
| common small CD-ROM changers, neither one-lun-per-slot SCSI changers | ||||
| nor IDE drives. | ||||
| 
 | ||||
| Userland tools available from here: | ||||
| 	http://linux.bytesex.org/misc/changer.html | ||||
| 
 | ||||
| 
 | ||||
| General Information | ||||
| ------------------- | ||||
| 
 | ||||
| First some words about how changers work: A changer has 2 (possibly | ||||
| more) SCSI ID's. One for the changer device which controls the robot, | ||||
| and one for the device which actually reads and writes the data. The | ||||
| later may be anything, a MOD, a CD-ROM, a tape or whatever. For the | ||||
| changer device this is a "don't care", he *only* shuffles around the | ||||
| media, nothing else. | ||||
| 
 | ||||
| 
 | ||||
| The SCSI changer model is complex, compared to - for example - IDE-CD | ||||
| changers. But it allows to handle nearly all possible cases. It knows | ||||
| 4 different types of changer elements: | ||||
| 
 | ||||
|   media transport - this one shuffles around the media, i.e. the | ||||
|                     transport arm.  Also known as "picker". | ||||
|   storage         - a slot which can hold a media. | ||||
|   import/export   - the same as above, but is accessable from outside, | ||||
|                     i.e. there the operator (you !) can use this to | ||||
|                     fill in and remove media from the changer. | ||||
| 		    Sometimes named "mailslot". | ||||
|   data transfer   - this is the device which reads/writes, i.e. the | ||||
| 		    CD-ROM / Tape / whatever drive. | ||||
| 
 | ||||
| None of these is limited to one: A huge Jukebox could have slots for | ||||
| 123 CD-ROM's, 5 CD-ROM readers (and therefore 6 SCSI ID's: the changer | ||||
| and each CD-ROM) and 2 transport arms. No problem to handle. | ||||
| 
 | ||||
| 
 | ||||
| How it is implemented | ||||
| --------------------- | ||||
| 
 | ||||
| I implemented the driver as character device driver with a NetBSD-like | ||||
| ioctl interface. Just grabbed NetBSD's header file and one of the | ||||
| other linux SCSI device drivers as starting point. The interface | ||||
| should be source code compatible with NetBSD. So if there is any | ||||
| software (anybody knows ???) which supports a BSDish changer driver, | ||||
| it should work with this driver too. | ||||
| 
 | ||||
| Over time a few more ioctls where added, volume tag support for example | ||||
| wasn't covered by the NetBSD ioctl API. | ||||
| 
 | ||||
| 
 | ||||
| Current State | ||||
| ------------- | ||||
| 
 | ||||
| Support for more than one transport arm is not implemented yet (and | ||||
| nobody asked for it so far...). | ||||
| 
 | ||||
| I test and use the driver myself with a 35 slot cdrom jukebox from | ||||
| Grundig.  I got some reports telling it works ok with tape autoloaders | ||||
| (Exabyte, HP and DEC).  Some People use this driver with amanda.  It | ||||
| works fine with small (11 slots) and a huge (4 MOs, 88 slots) | ||||
| magneto-optical Jukebox.  Probably with lots of other changers too, most | ||||
| (but not all :-) people mail me only if it does *not* work... | ||||
| 
 | ||||
| I don't have any device lists, neither black-list nor white-list.  Thus | ||||
| it is quite useless to ask me whenever a specific device is supported or | ||||
| not.  In theory every changer device which supports the SCSI-2 media | ||||
| changer command set should work out-of-the-box with this driver.  If it | ||||
| doesn't, it is a bug.  Either within the driver or within the firmware | ||||
| of the changer device. | ||||
| 
 | ||||
| 
 | ||||
| Using it | ||||
| -------- | ||||
| 
 | ||||
| This is a character device with major number is 86, so use | ||||
| "mknod /dev/sch0 c 86 0" to create the special file for the driver. | ||||
| 
 | ||||
| If the module finds the changer, it prints some messages about the | ||||
| device [ try "dmesg" if you don't see anything ] and should show up in | ||||
| /proc/devices. If not....  some changers use ID ? / LUN 0 for the | ||||
| device and ID ? / LUN 1 for the robot mechanism. But Linux does *not* | ||||
| look for LUN's other than 0 as default, becauce there are to many | ||||
| broken devices. So you can try: | ||||
| 
 | ||||
|   1) echo "scsi add-single-device 0 0 ID 1" > /proc/scsi/scsi | ||||
|      (replace ID with the SCSI-ID of the device) | ||||
|   2) boot the kernel with "max_scsi_luns=1" on the command line | ||||
|      (append="max_scsi_luns=1" in lilo.conf should do the trick) | ||||
| 
 | ||||
| 
 | ||||
| Trouble? | ||||
| -------- | ||||
| 
 | ||||
| If you insmod the driver with "insmod debug=1", it will be verbose and | ||||
| prints a lot of stuff to the syslog.  Compiling the kernel with | ||||
| CONFIG_SCSI_CONSTANTS=y improves the quality of the error messages alot | ||||
| because the kernel will translate the error codes into human-readable | ||||
| strings then. | ||||
| 
 | ||||
| You can display these messages with the dmesg command (or check the | ||||
| logfiles).  If you email me some question becauce of a problem with the | ||||
| driver, please include these messages. | ||||
| 
 | ||||
| 
 | ||||
| Insmod options | ||||
| -------------- | ||||
| 
 | ||||
| debug=0/1 | ||||
| 	Enable debug messages (see above, default: 0). | ||||
| 
 | ||||
| verbose=0/1 | ||||
| 	Be verbose (default: 1). | ||||
| 
 | ||||
| init=0/1 | ||||
| 	Send INITIALIZE ELEMENT STATUS command to the changer | ||||
| 	at insmod time (default: 1). | ||||
| 
 | ||||
| timeout_init=<seconds> | ||||
| 	timeout for the INITIALIZE ELEMENT STATUS command | ||||
| 	(default: 3600). | ||||
| 
 | ||||
| timeout_move=<seconds> | ||||
| 	timeout for all other commands (default: 120). | ||||
| 
 | ||||
| dt_id=<id1>,<id2>,... | ||||
| dt_lun=<lun1>,<lun2>,... | ||||
| 	These two allow to specify the SCSI ID and LUN for the data | ||||
| 	transfer elements.  You likely don't need this as the jukebox | ||||
| 	should provide this information.  But some devices don't ... | ||||
| 
 | ||||
| vendor_firsts= | ||||
| vendor_counts= | ||||
| vendor_labels= | ||||
| 	These insmod options can be used to tell the driver that there | ||||
| 	are some vendor-specific element types.  Grundig for example | ||||
| 	does this.  Some jukeboxes have a printer to label fresh burned | ||||
| 	CDs, which is addressed as element 0xc000 (type 5).  To tell the | ||||
| 	driver about this vendor-specific element, use this: | ||||
| 		$ insmod ch			\ | ||||
| 			vendor_firsts=0xc000	\ | ||||
| 			vendor_counts=1		\ | ||||
| 			vendor_labels=printer | ||||
| 	All three insmod options accept up to four comma-separated | ||||
| 	values, this way you can configure the element types 5-8. | ||||
| 	You likely need the SCSI specs for the device in question to | ||||
| 	find the correct values as they are not covered by the SCSI-2 | ||||
| 	standard. | ||||
| 
 | ||||
| 
 | ||||
| Credits | ||||
| ------- | ||||
| 
 | ||||
| I wrote this driver using the famous mailing-patches-around-the-world | ||||
| method.  With (more or less) help from: | ||||
| 
 | ||||
| 	Daniel Moehwald <moehwald@hdg.de> | ||||
| 	Dane Jasper <dane@sonic.net> | ||||
| 	R. Scott Bailey <sbailey@dsddi.eds.com> | ||||
| 	Jonathan Corbet <corbet@lwn.net> | ||||
| 
 | ||||
| Special thanks go to | ||||
| 	Martin Kuehne <martin.kuehne@bnbt.de> | ||||
| for a old, second-hand (but full functional) cdrom jukebox which I use | ||||
| to develop/test driver and tools now. | ||||
| 
 | ||||
| Have fun, | ||||
| 
 | ||||
|    Gerd | ||||
| 
 | ||||
| --  | ||||
| Gerd Knorr <kraxel@bytesex.org> | ||||
| @ -936,8 +936,7 @@ Details: | ||||
|  * | ||||
|  *      Returns SUCCESS if command aborted else FAILED | ||||
|  * | ||||
|  *      Locks: struct Scsi_Host::host_lock held (with irqsave) on entry  | ||||
|  *      and assumed to be held on return. | ||||
|  *      Locks: None held | ||||
|  * | ||||
|  *      Calling context: kernel thread | ||||
|  * | ||||
| @ -955,8 +954,7 @@ Details: | ||||
|  * | ||||
|  *      Returns SUCCESS if command aborted else FAILED | ||||
|  * | ||||
|  *      Locks: struct Scsi_Host::host_lock held (with irqsave) on entry  | ||||
|  *      and assumed to be held on return. | ||||
|  *      Locks: None held | ||||
|  * | ||||
|  *      Calling context: kernel thread | ||||
|  * | ||||
| @ -974,8 +972,7 @@ Details: | ||||
|  * | ||||
|  *      Returns SUCCESS if command aborted else FAILED | ||||
|  * | ||||
|  *      Locks: struct Scsi_Host::host_lock held (with irqsave) on entry | ||||
|  *      and assumed to be held on return. | ||||
|  *      Locks: None held | ||||
|  * | ||||
|  *      Calling context: kernel thread | ||||
|  * | ||||
| @ -993,8 +990,7 @@ Details: | ||||
|  * | ||||
|  *      Returns SUCCESS if command aborted else FAILED | ||||
|  * | ||||
|  *      Locks: struct Scsi_Host::host_lock held (with irqsave) on entry | ||||
|  *      and assumed to be held on return. | ||||
|  *      Locks: None held | ||||
|  * | ||||
|  *      Calling context: kernel thread | ||||
|  * | ||||
|  | ||||
							
								
								
									
										53
									
								
								MAINTAINERS
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								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 | ||||
| 
 | ||||
| @ -736,6 +736,11 @@ M:	tori@unhappy.mine.nu | ||||
| L:	linux-kernel@vger.kernel.org | ||||
| S:	Maintained | ||||
| 
 | ||||
| DOCBOOK FOR DOCUMENTATION | ||||
| P:	Martin Waitz | ||||
| M:	tali@admingilde.org | ||||
| S:	Maintained | ||||
| 
 | ||||
| DOUBLETALK DRIVER | ||||
| P:	James R. Van Zandt | ||||
| M:	jrv@vanzandt.mv.com | ||||
| @ -812,7 +817,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 +880,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 +1220,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 +1487,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 +1597,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 +1619,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 +1639,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 +1681,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 +1788,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 +1800,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 +1835,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 +2052,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 +2111,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 +2168,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 +2247,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 | ||||
|  | ||||
| @ -23,49 +23,92 @@ | ||||
| 
 | ||||
| #include "entry-header.S" | ||||
| 
 | ||||
| /* | ||||
|  * Interrupt handling.  Preserves r7, r8, r9 | ||||
|  */ | ||||
| 	.macro	irq_handler
 | ||||
| 1:	get_irqnr_and_base r0, r6, r5, lr | ||||
| 	movne	r1, sp | ||||
| 	@
 | ||||
| 	@ routine called with r0 = irq number, r1 = struct pt_regs *
 | ||||
| 	@
 | ||||
| 	adrne	lr, 1b | ||||
| 	bne	asm_do_IRQ | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| 	/* | ||||
| 	 * XXX | ||||
| 	 * | ||||
| 	 * this macro assumes that irqstat (r6) and base (r5) are | ||||
| 	 * preserved from get_irqnr_and_base above | ||||
| 	 */ | ||||
| 	test_for_ipi r0, r6, r5, lr | ||||
| 	movne	r0, sp | ||||
| 	adrne	lr, 1b | ||||
| 	bne	do_IPI | ||||
| #endif | ||||
| 
 | ||||
| 	.endm | ||||
| 
 | ||||
| /* | ||||
|  * Invalid mode handlers | ||||
|  */ | ||||
| 	.macro	inv_entry, sym, reason | ||||
| 	sub	sp, sp, #S_FRAME_SIZE		@ Allocate frame size in one go | ||||
| 	stmia	sp, {r0 - lr}			@ Save XXX r0 - lr
 | ||||
| 	ldr	r4, .LC\sym | ||||
| 	.macro	inv_entry, reason | ||||
| 	sub	sp, sp, #S_FRAME_SIZE | ||||
| 	stmib	sp, {r1 - lr} | ||||
| 	mov	r1, #\reason | ||||
| 	.endm | ||||
| 
 | ||||
| __pabt_invalid: | ||||
| 	inv_entry abt, BAD_PREFETCH | ||||
| 	b	1f | ||||
| 	inv_entry BAD_PREFETCH | ||||
| 	b	common_invalid | ||||
| 
 | ||||
| __dabt_invalid: | ||||
| 	inv_entry abt, BAD_DATA | ||||
| 	b	1f | ||||
| 	inv_entry BAD_DATA | ||||
| 	b	common_invalid | ||||
| 
 | ||||
| __irq_invalid: | ||||
| 	inv_entry irq, BAD_IRQ | ||||
| 	b	1f | ||||
| 	inv_entry BAD_IRQ | ||||
| 	b	common_invalid | ||||
| 
 | ||||
| __und_invalid: | ||||
| 	inv_entry und, BAD_UNDEFINSTR | ||||
| 	inv_entry BAD_UNDEFINSTR | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ XXX fall through to common_invalid
 | ||||
| 	@
 | ||||
| 
 | ||||
| @
 | ||||
| @ common_invalid - generic code for failed exception (re-entrant version of handlers)
 | ||||
| @
 | ||||
| common_invalid: | ||||
| 	zero_fp | ||||
| 
 | ||||
| 	ldmia	r0, {r4 - r6} | ||||
| 	add	r0, sp, #S_PC		@ here for interlock avoidance | ||||
| 	mov	r7, #-1			@  ""   ""    ""        ""
 | ||||
| 	str	r4, [sp]		@ save preserved r0
 | ||||
| 	stmia	r0, {r5 - r7}		@ lr_<exception>,
 | ||||
| 					@ cpsr_<exception>, "old_r0"
 | ||||
| 
 | ||||
| 1:	zero_fp | ||||
| 	ldmia	r4, {r5 - r7}			@ Get XXX pc, cpsr, old_r0
 | ||||
| 	add	r4, sp, #S_PC | ||||
| 	stmia	r4, {r5 - r7}			@ Save XXX pc, cpsr, old_r0
 | ||||
| 	mov	r0, sp | ||||
| 	and	r2, r6, #31			@ int mode
 | ||||
| 	and	r2, r6, #0x1f | ||||
| 	b	bad_mode | ||||
| 
 | ||||
| /* | ||||
|  * SVC mode handlers | ||||
|  */ | ||||
| 	.macro	svc_entry, sym | ||||
| 	.macro	svc_entry
 | ||||
| 	sub	sp, sp, #S_FRAME_SIZE | ||||
| 	stmia	sp, {r0 - r12}			@ save r0 - r12
 | ||||
| 	ldr	r2, .LC\sym | ||||
| 	add	r0, sp, #S_FRAME_SIZE | ||||
| 	ldmia	r2, {r2 - r4}			@ get pc, cpsr
 | ||||
| 	add	r5, sp, #S_SP | ||||
| 	stmib	sp, {r1 - r12} | ||||
| 
 | ||||
| 	ldmia	r0, {r1 - r3} | ||||
| 	add	r5, sp, #S_SP		@ here for interlock avoidance | ||||
| 	mov	r4, #-1			@  ""  ""      ""       ""
 | ||||
| 	add	r0, sp, #S_FRAME_SIZE   @  ""  ""      ""       "" | ||||
| 	str	r1, [sp]		@ save the "real" r0 copied
 | ||||
| 					@ from the exception stack
 | ||||
| 
 | ||||
| 	mov	r1, lr | ||||
| 
 | ||||
| 	@
 | ||||
| @ -82,7 +125,7 @@ __und_invalid: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __dabt_svc: | ||||
| 	svc_entry abt | ||||
| 	svc_entry | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ get ready to re-enable interrupts if appropriate
 | ||||
| @ -129,28 +172,24 @@ __dabt_svc: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __irq_svc: | ||||
| 	svc_entry irq | ||||
| 	svc_entry | ||||
| 
 | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	get_thread_info r8 | ||||
| 	ldr	r9, [r8, #TI_PREEMPT]		@ get preempt count | ||||
| 	add	r7, r9, #1			@ increment it
 | ||||
| 	str	r7, [r8, #TI_PREEMPT] | ||||
| 	get_thread_info tsk | ||||
| 	ldr	r8, [tsk, #TI_PREEMPT]		@ get preempt count | ||||
| 	add	r7, r8, #1			@ increment it
 | ||||
| 	str	r7, [tsk, #TI_PREEMPT] | ||||
| #endif | ||||
| 1:	get_irqnr_and_base r0, r6, r5, lr | ||||
| 	movne	r1, sp | ||||
| 	@
 | ||||
| 	@ routine called with r0 = irq number, r1 = struct pt_regs *
 | ||||
| 	@
 | ||||
| 	adrne	lr, 1b | ||||
| 	bne	asm_do_IRQ | ||||
| 
 | ||||
| 	irq_handler | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	ldr	r0, [r8, #TI_FLAGS]		@ get flags | ||||
| 	ldr	r0, [tsk, #TI_FLAGS]		@ get flags | ||||
| 	tst	r0, #_TIF_NEED_RESCHED | ||||
| 	blne	svc_preempt | ||||
| preempt_return: | ||||
| 	ldr	r0, [r8, #TI_PREEMPT]		@ read preempt value | ||||
| 	ldr	r0, [tsk, #TI_PREEMPT]		@ read preempt value | ||||
| 	str	r8, [tsk, #TI_PREEMPT]		@ restore preempt count | ||||
| 	teq	r0, r7 | ||||
| 	str	r9, [r8, #TI_PREEMPT]		@ restore preempt count | ||||
| 	strne	r0, [r0, -r0]			@ bug()
 | ||||
| #endif | ||||
| 	ldr	r0, [sp, #S_PSR]		@ irqs are already disabled | ||||
| @ -161,7 +200,7 @@ preempt_return: | ||||
| 
 | ||||
| #ifdef CONFIG_PREEMPT | ||||
| svc_preempt: | ||||
| 	teq	r9, #0				@ was preempt count = 0
 | ||||
| 	teq	r8, #0				@ was preempt count = 0
 | ||||
| 	ldreq	r6, .LCirq_stat | ||||
| 	movne	pc, lr				@ no
 | ||||
| 	ldr	r0, [r6, #4]			@ local_irq_count
 | ||||
| @ -169,9 +208,9 @@ svc_preempt: | ||||
| 	adds	r0, r0, r1 | ||||
| 	movne	pc, lr | ||||
| 	mov	r7, #0				@ preempt_schedule_irq
 | ||||
| 	str	r7, [r8, #TI_PREEMPT]		@ expects preempt_count == 0 | ||||
| 	str	r7, [tsk, #TI_PREEMPT]		@ expects preempt_count == 0 | ||||
| 1:	bl	preempt_schedule_irq		@ irq en/disable is done inside
 | ||||
| 	ldr	r0, [r8, #TI_FLAGS]		@ get new tasks TI_FLAGS | ||||
| 	ldr	r0, [tsk, #TI_FLAGS]		@ get new tasks TI_FLAGS | ||||
| 	tst	r0, #_TIF_NEED_RESCHED | ||||
| 	beq	preempt_return			@ go again
 | ||||
| 	b	1b | ||||
| @ -179,7 +218,7 @@ svc_preempt: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __und_svc: | ||||
| 	svc_entry und | ||||
| 	svc_entry | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ call emulation code, which returns using r9 if it has emulated
 | ||||
| @ -209,7 +248,7 @@ __und_svc: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __pabt_svc: | ||||
| 	svc_entry abt | ||||
| 	svc_entry | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ re-enable interrupts if appropriate
 | ||||
| @ -242,12 +281,8 @@ __pabt_svc: | ||||
| 	ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr
 | ||||
| 
 | ||||
| 	.align	5
 | ||||
| .LCirq: | ||||
| 	.word	__temp_irq
 | ||||
| .LCund: | ||||
| 	.word	__temp_und
 | ||||
| .LCabt: | ||||
| 	.word	__temp_abt
 | ||||
| .LCcralign: | ||||
| 	.word	cr_alignment
 | ||||
| #ifdef MULTI_ABORT | ||||
| .LCprocfns: | ||||
| 	.word	processor
 | ||||
| @ -262,14 +297,18 @@ __pabt_svc: | ||||
| /* | ||||
|  * User mode handlers | ||||
|  */ | ||||
| 	.macro	usr_entry, sym | ||||
| 	sub	sp, sp, #S_FRAME_SIZE		@ Allocate frame size in one go | ||||
| 	stmia	sp, {r0 - r12}			@ save r0 - r12
 | ||||
| 	ldr	r7, .LC\sym | ||||
| 	add	r5, sp, #S_PC | ||||
| 	ldmia	r7, {r2 - r4}			@ Get USR pc, cpsr
 | ||||
| 	.macro	usr_entry
 | ||||
| 	sub	sp, sp, #S_FRAME_SIZE | ||||
| 	stmib	sp, {r1 - r12} | ||||
| 
 | ||||
| #if __LINUX_ARM_ARCH__ < 6 | ||||
| 	ldmia	r0, {r1 - r3} | ||||
| 	add	r0, sp, #S_PC		@ here for interlock avoidance | ||||
| 	mov	r4, #-1			@  ""  ""     ""        ""
 | ||||
| 
 | ||||
| 	str	r1, [sp]		@ save the "real" r0 copied
 | ||||
| 					@ from the exception stack
 | ||||
| 
 | ||||
| #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 | ||||
| @ -284,13 +323,13 @@ __pabt_svc: | ||||
| 	@
 | ||||
| 	@ Also, separately save sp_usr and lr_usr
 | ||||
| 	@
 | ||||
| 	stmia	r5, {r2 - r4} | ||||
| 	stmdb	r5, {sp, lr}^ | ||||
| 	stmia	r0, {r2 - r4} | ||||
| 	stmdb	r0, {sp, lr}^ | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ Enable the alignment trap while in kernel mode
 | ||||
| 	@
 | ||||
| 	alignment_trap r7, r0, __temp_\sym | ||||
| 	alignment_trap r0 | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ Clear FP to mark the first stack frame
 | ||||
| @ -300,7 +339,7 @@ __pabt_svc: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __dabt_usr: | ||||
| 	usr_entry abt | ||||
| 	usr_entry | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ Call the processor-specific abort handler:
 | ||||
| @ -329,30 +368,23 @@ __dabt_usr: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __irq_usr: | ||||
| 	usr_entry irq | ||||
| 	usr_entry | ||||
| 
 | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	get_thread_info r8 | ||||
| 	ldr	r9, [r8, #TI_PREEMPT]		@ get preempt count | ||||
| 	add	r7, r9, #1			@ increment it
 | ||||
| 	str	r7, [r8, #TI_PREEMPT] | ||||
| #endif | ||||
| 1:	get_irqnr_and_base r0, r6, r5, lr | ||||
| 	movne	r1, sp | ||||
| 	adrne	lr, 1b | ||||
| 	@
 | ||||
| 	@ routine called with r0 = irq number, r1 = struct pt_regs *
 | ||||
| 	@
 | ||||
| 	bne	asm_do_IRQ | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	ldr	r0, [r8, #TI_PREEMPT] | ||||
| 	teq	r0, r7 | ||||
| 	str	r9, [r8, #TI_PREEMPT] | ||||
| 	strne	r0, [r0, -r0] | ||||
| 	mov	tsk, r8 | ||||
| #else | ||||
| 	get_thread_info tsk | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	ldr	r8, [tsk, #TI_PREEMPT]		@ get preempt count | ||||
| 	add	r7, r8, #1			@ increment it
 | ||||
| 	str	r7, [tsk, #TI_PREEMPT] | ||||
| #endif | ||||
| 
 | ||||
| 	irq_handler | ||||
| #ifdef CONFIG_PREEMPT | ||||
| 	ldr	r0, [tsk, #TI_PREEMPT] | ||||
| 	str	r8, [tsk, #TI_PREEMPT] | ||||
| 	teq	r0, r7 | ||||
| 	strne	r0, [r0, -r0] | ||||
| #endif | ||||
| 
 | ||||
| 	mov	why, #0 | ||||
| 	b	ret_to_user | ||||
| 
 | ||||
| @ -360,7 +392,7 @@ __irq_usr: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __und_usr: | ||||
| 	usr_entry und | ||||
| 	usr_entry | ||||
| 
 | ||||
| 	tst	r3, #PSR_T_BIT			@ Thumb mode? | ||||
| 	bne	fpundefinstr			@ ignore FP
 | ||||
| @ -476,7 +508,7 @@ fpundefinstr: | ||||
| 
 | ||||
| 	.align	5
 | ||||
| __pabt_usr: | ||||
| 	usr_entry abt | ||||
| 	usr_entry | ||||
| 
 | ||||
| 	enable_irq				@ Enable interrupts
 | ||||
| 	mov	r0, r2				@ address (pc)
 | ||||
| @ -616,11 +648,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: | ||||
| @ -735,29 +773,41 @@ __kuser_helper_end: | ||||
|  * | ||||
|  * Common stub entry macro: | ||||
|  *   Enter in IRQ mode, spsr = SVC/USR CPSR, lr = SVC/USR PC | ||||
|  * | ||||
|  * SP points to a minimal amount of processor-private memory, the address | ||||
|  * of which is copied into r0 for the mode specific abort handler. | ||||
|  */ | ||||
| 	.macro	vector_stub, name, sym, correction=0 | ||||
| 	.macro	vector_stub, name, correction=0 | ||||
| 	.align	5
 | ||||
| 
 | ||||
| vector_\name: | ||||
| 	ldr	r13, .LCs\sym | ||||
| 	.if \correction | ||||
| 	sub	lr, lr, #\correction | ||||
| 	.endif | ||||
| 	str	lr, [r13]			@ save lr_IRQ
 | ||||
| 	mrs	lr, spsr | ||||
| 	str	lr, [r13, #4]			@ save spsr_IRQ
 | ||||
| 	@
 | ||||
| 	@ now branch to the relevant MODE handling routine
 | ||||
| 	@
 | ||||
| 	mrs	r13, cpsr | ||||
| 	bic	r13, r13, #MODE_MASK | ||||
| 	orr	r13, r13, #SVC_MODE | ||||
| 	msr	spsr_cxsf, r13			@ switch to SVC_32 mode
 | ||||
| 
 | ||||
| 	and	lr, lr, #15 | ||||
| 	@
 | ||||
| 	@ Save r0, lr_<exception> (parent PC) and spsr_<exception>
 | ||||
| 	@ (parent CPSR)
 | ||||
| 	@
 | ||||
| 	stmia	sp, {r0, lr}		@ save r0, lr
 | ||||
| 	mrs	lr, spsr | ||||
| 	str	lr, [sp, #8]		@ save spsr
 | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ Prepare for SVC32 mode.  IRQs remain disabled.
 | ||||
| 	@
 | ||||
| 	mrs	r0, cpsr | ||||
| 	bic	r0, r0, #MODE_MASK | ||||
| 	orr	r0, r0, #SVC_MODE | ||||
| 	msr	spsr_cxsf, r0 | ||||
| 
 | ||||
| 	@
 | ||||
| 	@ the branch table must immediately follow this code
 | ||||
| 	@
 | ||||
| 	mov	r0, sp | ||||
| 	and	lr, lr, #0x0f | ||||
| 	ldr	lr, [pc, lr, lsl #2] | ||||
| 	movs	pc, lr				@ Changes mode and branches
 | ||||
| 	movs	pc, lr			@ branch to handler in SVC mode
 | ||||
| 	.endm | ||||
| 
 | ||||
| 	.globl	__stubs_start
 | ||||
| @ -765,7 +815,7 @@ __stubs_start: | ||||
| /* | ||||
|  * Interrupt dispatcher | ||||
|  */ | ||||
| 	vector_stub	irq, irq, 4 | ||||
| 	vector_stub	irq, 4 | ||||
| 
 | ||||
| 	.long	__irq_usr			@  0  (USR_26 / USR_32)
 | ||||
| 	.long	__irq_invalid			@  1  (FIQ_26 / FIQ_32)
 | ||||
| @ -788,7 +838,7 @@ __stubs_start: | ||||
|  * Data abort dispatcher | ||||
|  * Enter in ABT mode, spsr = USR CPSR, lr = USR PC | ||||
|  */ | ||||
| 	vector_stub	dabt, abt, 8 | ||||
| 	vector_stub	dabt, 8 | ||||
| 
 | ||||
| 	.long	__dabt_usr			@  0  (USR_26 / USR_32)
 | ||||
| 	.long	__dabt_invalid			@  1  (FIQ_26 / FIQ_32)
 | ||||
| @ -811,7 +861,7 @@ __stubs_start: | ||||
|  * Prefetch abort dispatcher | ||||
|  * Enter in ABT mode, spsr = USR CPSR, lr = USR PC | ||||
|  */ | ||||
| 	vector_stub	pabt, abt, 4 | ||||
| 	vector_stub	pabt, 4 | ||||
| 
 | ||||
| 	.long	__pabt_usr			@  0 (USR_26 / USR_32)
 | ||||
| 	.long	__pabt_invalid			@  1 (FIQ_26 / FIQ_32)
 | ||||
| @ -834,7 +884,7 @@ __stubs_start: | ||||
|  * Undef instr entry dispatcher | ||||
|  * Enter in UND mode, spsr = SVC/USR CPSR, lr = SVC/USR PC | ||||
|  */ | ||||
| 	vector_stub	und, und | ||||
| 	vector_stub	und | ||||
| 
 | ||||
| 	.long	__und_usr			@  0 (USR_26 / USR_32)
 | ||||
| 	.long	__und_invalid			@  1 (FIQ_26 / FIQ_32)
 | ||||
| @ -888,13 +938,6 @@ vector_addrexcptn: | ||||
| .LCvswi: | ||||
| 	.word	vector_swi
 | ||||
| 
 | ||||
| .LCsirq: | ||||
| 	.word	__temp_irq
 | ||||
| .LCsund: | ||||
| 	.word	__temp_und
 | ||||
| .LCsabt: | ||||
| 	.word	__temp_abt
 | ||||
| 
 | ||||
| 	.globl	__stubs_end
 | ||||
| __stubs_end: | ||||
| 
 | ||||
| @ -916,23 +959,6 @@ __vectors_end: | ||||
| 
 | ||||
| 	.data | ||||
| 
 | ||||
| /* | ||||
|  * Do not reorder these, and do not insert extra data between... | ||||
|  */ | ||||
| 
 | ||||
| __temp_irq: | ||||
| 	.word	0				@ saved lr_irq
 | ||||
| 	.word	0				@ saved spsr_irq
 | ||||
| 	.word	-1				@ old_r0
 | ||||
| __temp_und: | ||||
| 	.word	0				@ Saved lr_und
 | ||||
| 	.word	0				@ Saved spsr_und
 | ||||
| 	.word	-1				@ old_r0
 | ||||
| __temp_abt: | ||||
| 	.word	0				@ Saved lr_abt
 | ||||
| 	.word	0				@ Saved spsr_abt
 | ||||
| 	.word	-1				@ old_r0
 | ||||
| 
 | ||||
| 	.globl	cr_alignment
 | ||||
| 	.globl	cr_no_alignment
 | ||||
| cr_alignment: | ||||
|  | ||||
| @ -59,11 +59,10 @@ | ||||
| 	mov	\rd, \rd, lsl #13 | ||||
| 	.endm | ||||
| 
 | ||||
| 	.macro	alignment_trap, rbase, rtemp, sym | ||||
| 	.macro	alignment_trap, rtemp | ||||
| #ifdef CONFIG_ALIGNMENT_TRAP | ||||
| #define OFF_CR_ALIGNMENT(x)	cr_alignment - x | ||||
| 
 | ||||
| 	ldr	\rtemp, [\rbase, #OFF_CR_ALIGNMENT(\sym)] | ||||
| 	ldr	\rtemp, .LCcralign | ||||
| 	ldr	\rtemp, [\rtemp] | ||||
| 	mcr	p15, 0, \rtemp, c1, c0 | ||||
| #endif | ||||
| 	.endm | ||||
|  | ||||
| @ -2,6 +2,8 @@ | ||||
|  *  linux/arch/arm/kernel/head.S | ||||
|  * | ||||
|  *  Copyright (C) 1994-2002 Russell King | ||||
|  *  Copyright (c) 2003 ARM Limited | ||||
|  *  All Rights Reserved | ||||
|  * | ||||
|  * 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 | ||||
| @ -165,6 +167,48 @@ __mmap_switched: | ||||
| 	stmia	r6, {r0, r4}			@ Save control register values
 | ||||
| 	b	start_kernel | ||||
| 
 | ||||
| #if defined(CONFIG_SMP) | ||||
| 	.type   secondary_startup, #function | ||||
| ENTRY(secondary_startup) | ||||
| 	/* | ||||
| 	 * Common entry point for secondary CPUs. | ||||
| 	 * | ||||
| 	 * Ensure that we're in SVC mode, and IRQs are disabled.  Lookup | ||||
| 	 * the processor type - there is no need to check the machine type | ||||
| 	 * as it has already been validated by the primary processor. | ||||
| 	 */ | ||||
| 	msr	cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC | ||||
| 	bl	__lookup_processor_type | ||||
| 	movs	r10, r5				@ invalid processor?
 | ||||
| 	moveq	r0, #'p'			@ yes, error 'p'
 | ||||
| 	beq	__error | ||||
| 
 | ||||
| 	/* | ||||
| 	 * Use the page tables supplied from  __cpu_up. | ||||
| 	 */ | ||||
| 	adr	r4, __secondary_data | ||||
| 	ldmia	r4, {r5, r6, r13}		@ address to jump to after
 | ||||
| 	sub	r4, r4, r5			@ mmu has been enabled
 | ||||
| 	ldr	r4, [r6, r4]			@ get secondary_data.pgdir
 | ||||
| 	adr	lr, __enable_mmu		@ return address
 | ||||
| 	add	pc, r10, #12			@ initialise processor
 | ||||
| 						@ (return control reg)
 | ||||
| 
 | ||||
| 	/* | ||||
| 	 * r6  = &secondary_data | ||||
| 	 */ | ||||
| ENTRY(__secondary_switched) | ||||
| 	ldr	sp, [r6, #4]			@ get secondary_data.stack
 | ||||
| 	mov	fp, #0 | ||||
| 	b	secondary_start_kernel | ||||
| 
 | ||||
| 	.type	__secondary_data, %object | ||||
| __secondary_data: | ||||
| 	.long	. | ||||
| 	.long	secondary_data
 | ||||
| 	.long	__secondary_switched
 | ||||
| #endif /* defined(CONFIG_SMP) */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* | ||||
|  | ||||
| @ -92,6 +92,14 @@ struct cpu_user_fns cpu_user; | ||||
| struct cpu_cache_fns cpu_cache; | ||||
| #endif | ||||
| 
 | ||||
| struct stack { | ||||
| 	u32 irq[3]; | ||||
| 	u32 abt[3]; | ||||
| 	u32 und[3]; | ||||
| } ____cacheline_aligned; | ||||
| 
 | ||||
| static struct stack stacks[NR_CPUS]; | ||||
| 
 | ||||
| char elf_platform[ELF_PLATFORM_SIZE]; | ||||
| EXPORT_SYMBOL(elf_platform); | ||||
| 
 | ||||
| @ -307,8 +315,6 @@ static void __init setup_processor(void) | ||||
| 	       cpu_name, processor_id, (int)processor_id & 15, | ||||
| 	       proc_arch[cpu_architecture()]); | ||||
| 
 | ||||
| 	dump_cpu_info(smp_processor_id()); | ||||
| 
 | ||||
| 	sprintf(system_utsname.machine, "%s%c", list->arch_name, ENDIANNESS); | ||||
| 	sprintf(elf_platform, "%s%c", list->elf_name, ENDIANNESS); | ||||
| 	elf_hwcap = list->elf_hwcap; | ||||
| @ -316,6 +322,46 @@ static void __init setup_processor(void) | ||||
| 	cpu_proc_init(); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * cpu_init - initialise one CPU. | ||||
|  * | ||||
|  * cpu_init dumps the cache information, initialises SMP specific | ||||
|  * information, and sets up the per-CPU stacks. | ||||
|  */ | ||||
| void cpu_init(void) | ||||
| { | ||||
| 	unsigned int cpu = smp_processor_id(); | ||||
| 	struct stack *stk = &stacks[cpu]; | ||||
| 
 | ||||
| 	if (cpu >= NR_CPUS) { | ||||
| 		printk(KERN_CRIT "CPU%u: bad primary CPU number\n", cpu); | ||||
| 		BUG(); | ||||
| 	} | ||||
| 
 | ||||
| 	dump_cpu_info(cpu); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * setup stacks for re-entrant exception handlers | ||||
| 	 */ | ||||
| 	__asm__ ( | ||||
| 	"msr	cpsr_c, %1\n\t" | ||||
| 	"add	sp, %0, %2\n\t" | ||||
| 	"msr	cpsr_c, %3\n\t" | ||||
| 	"add	sp, %0, %4\n\t" | ||||
| 	"msr	cpsr_c, %5\n\t" | ||||
| 	"add	sp, %0, %6\n\t" | ||||
| 	"msr	cpsr_c, %7" | ||||
| 	    : | ||||
| 	    : "r" (stk), | ||||
| 	      "I" (PSR_F_BIT | PSR_I_BIT | IRQ_MODE), | ||||
| 	      "I" (offsetof(struct stack, irq[0])), | ||||
| 	      "I" (PSR_F_BIT | PSR_I_BIT | ABT_MODE), | ||||
| 	      "I" (offsetof(struct stack, abt[0])), | ||||
| 	      "I" (PSR_F_BIT | PSR_I_BIT | UND_MODE), | ||||
| 	      "I" (offsetof(struct stack, und[0])), | ||||
| 	      "I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE)); | ||||
| } | ||||
| 
 | ||||
| static struct machine_desc * __init setup_machine(unsigned int nr) | ||||
| { | ||||
| 	struct machine_desc *list; | ||||
| @ -715,6 +761,8 @@ void __init setup_arch(char **cmdline_p) | ||||
| 	paging_init(&meminfo, mdesc); | ||||
| 	request_standard_resources(&meminfo, mdesc); | ||||
| 
 | ||||
| 	cpu_init(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set up various architecture-specific pointers | ||||
| 	 */ | ||||
|  | ||||
| @ -24,6 +24,9 @@ | ||||
| #include <asm/atomic.h> | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/cpu.h> | ||||
| #include <asm/mmu_context.h> | ||||
| #include <asm/pgtable.h> | ||||
| #include <asm/pgalloc.h> | ||||
| #include <asm/processor.h> | ||||
| #include <asm/tlbflush.h> | ||||
| #include <asm/ptrace.h> | ||||
| @ -36,6 +39,13 @@ | ||||
| cpumask_t cpu_present_mask; | ||||
| cpumask_t cpu_online_map; | ||||
| 
 | ||||
| /*
 | ||||
|  * as from 2.5, kernels no longer have an init_tasks structure | ||||
|  * so we need some other way of telling a new secondary core | ||||
|  * where to place its SVC stack | ||||
|  */ | ||||
| struct secondary_data secondary_data; | ||||
| 
 | ||||
| /*
 | ||||
|  * structures for inter-processor calls | ||||
|  * - A collection of single bit ipi messages. | ||||
| @ -71,6 +81,8 @@ static DEFINE_SPINLOCK(smp_call_function_lock); | ||||
| int __init __cpu_up(unsigned int cpu) | ||||
| { | ||||
| 	struct task_struct *idle; | ||||
| 	pgd_t *pgd; | ||||
| 	pmd_t *pmd; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	/*
 | ||||
| @ -83,10 +95,55 @@ int __init __cpu_up(unsigned int cpu) | ||||
| 		return PTR_ERR(idle); | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Allocate initial page tables to allow the new CPU to | ||||
| 	 * enable the MMU safely.  This essentially means a set | ||||
| 	 * of our "standard" page tables, with the addition of | ||||
| 	 * a 1:1 mapping for the physical address of the kernel. | ||||
| 	 */ | ||||
| 	pgd = pgd_alloc(&init_mm); | ||||
| 	pmd = pmd_offset(pgd, PHYS_OFFSET); | ||||
| 	*pmd = __pmd((PHYS_OFFSET & PGDIR_MASK) | | ||||
| 		     PMD_TYPE_SECT | PMD_SECT_AP_WRITE); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * We need to tell the secondary core where to find | ||||
| 	 * its stack and the page tables. | ||||
| 	 */ | ||||
| 	secondary_data.stack = (void *)idle->thread_info + THREAD_SIZE - 8; | ||||
| 	secondary_data.pgdir = virt_to_phys(pgd); | ||||
| 	wmb(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Now bring the CPU into our world. | ||||
| 	 */ | ||||
| 	ret = boot_secondary(cpu, idle); | ||||
| 	if (ret == 0) { | ||||
| 		unsigned long timeout; | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * CPU was successfully started, wait for it | ||||
| 		 * to come online or time out. | ||||
| 		 */ | ||||
| 		timeout = jiffies + HZ; | ||||
| 		while (time_before(jiffies, timeout)) { | ||||
| 			if (cpu_online(cpu)) | ||||
| 				break; | ||||
| 
 | ||||
| 			udelay(10); | ||||
| 			barrier(); | ||||
| 		} | ||||
| 
 | ||||
| 		if (!cpu_online(cpu)) | ||||
| 			ret = -EIO; | ||||
| 	} | ||||
| 
 | ||||
| 	secondary_data.stack = 0; | ||||
| 	secondary_data.pgdir = 0; | ||||
| 
 | ||||
| 	*pmd_offset(pgd, PHYS_OFFSET) = __pmd(0); | ||||
| 	pgd_free(pgd); | ||||
| 
 | ||||
| 	if (ret) { | ||||
| 		printk(KERN_CRIT "cpu_up: processor %d failed to boot\n", cpu); | ||||
| 		/*
 | ||||
| @ -97,6 +154,56 @@ int __init __cpu_up(unsigned int cpu) | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * This is the secondary CPU boot entry.  We're using this CPUs | ||||
|  * idle thread stack, but a set of temporary page tables. | ||||
|  */ | ||||
| asmlinkage void __init secondary_start_kernel(void) | ||||
| { | ||||
| 	struct mm_struct *mm = &init_mm; | ||||
| 	unsigned int cpu = smp_processor_id(); | ||||
| 
 | ||||
| 	printk("CPU%u: Booted secondary processor\n", cpu); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * All kernel threads share the same mm context; grab a | ||||
| 	 * reference and switch to it. | ||||
| 	 */ | ||||
| 	atomic_inc(&mm->mm_users); | ||||
| 	atomic_inc(&mm->mm_count); | ||||
| 	current->active_mm = mm; | ||||
| 	cpu_set(cpu, mm->cpu_vm_mask); | ||||
| 	cpu_switch_mm(mm->pgd, mm); | ||||
| 	enter_lazy_tlb(mm, current); | ||||
| 
 | ||||
| 	cpu_init(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Give the platform a chance to do its own initialisation. | ||||
| 	 */ | ||||
| 	platform_secondary_init(cpu); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Enable local interrupts. | ||||
| 	 */ | ||||
| 	local_irq_enable(); | ||||
| 	local_fiq_enable(); | ||||
| 
 | ||||
| 	calibrate_delay(); | ||||
| 
 | ||||
| 	smp_store_cpu_info(cpu); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * OK, now it's safe to let the boot CPU continue | ||||
| 	 */ | ||||
| 	cpu_set(cpu, cpu_online_map); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * OK, it's off to the idle thread for us | ||||
| 	 */ | ||||
| 	cpu_idle(); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Called by both boot and secondaries to move global data into | ||||
|  * per-processor storage. | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -12,3 +12,4 @@ obj-$(CONFIG_LEDS)			+= leds.o | ||||
| obj-$(CONFIG_PCI)			+= pci_v3.o pci.o | ||||
| obj-$(CONFIG_CPU_FREQ_INTEGRATOR)	+= cpu.o | ||||
| obj-$(CONFIG_INTEGRATOR_IMPD1)		+= impd1.o | ||||
| obj-$(CONFIG_SMP)			+= platsmp.o headsmp.o | ||||
|  | ||||
| @ -14,6 +14,7 @@ | ||||
| #include <linux/spinlock.h> | ||||
| #include <linux/interrupt.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/smp.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/irq.h> | ||||
| @ -221,7 +222,24 @@ integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) | ||||
| 	 */ | ||||
| 	timer1->TimerClear = 1; | ||||
| 
 | ||||
| 	timer_tick(regs); | ||||
| 	/*
 | ||||
| 	 * the clock tick routines are only processed on the | ||||
| 	 * primary CPU | ||||
| 	 */ | ||||
| 	if (hard_smp_processor_id() == 0) { | ||||
| 		nmi_tick(); | ||||
| 		timer_tick(regs); | ||||
| #ifdef CONFIG_SMP | ||||
| 		smp_send_timer(); | ||||
| #endif | ||||
| 	} | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| 	/*
 | ||||
| 	 * this is the ARM equivalent of the APIC timer interrupt | ||||
| 	 */ | ||||
| 	update_process_times(user_mode(regs)); | ||||
| #endif /* CONFIG_SMP */ | ||||
| 
 | ||||
| 	write_sequnlock(&xtime_lock); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										37
									
								
								arch/arm/mach-integrator/headsmp.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								arch/arm/mach-integrator/headsmp.S
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | ||||
| /* | ||||
|  *  linux/arch/arm/mach-integrator/headsmp.S | ||||
|  * | ||||
|  *  Copyright (c) 2003 ARM Limited | ||||
|  *  All Rights Reserved | ||||
|  * | ||||
|  * 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> | ||||
| 
 | ||||
| 	__INIT | ||||
| 
 | ||||
| /* | ||||
|  * Integrator specific entry point for secondary CPUs.  This provides | ||||
|  * a "holding pen" into which all secondary cores are held until we're | ||||
|  * ready for them to initialise. | ||||
|  */ | ||||
| ENTRY(integrator_secondary_startup) | ||||
| 	adr	r4, 1f | ||||
| 	ldmia	r4, {r5, r6} | ||||
| 	sub	r4, r4, r5 | ||||
| 	ldr	r6, [r6, r4] | ||||
| pen:	ldr	r7, [r6] | ||||
| 	cmp	r7, r0 | ||||
| 	bne	pen | ||||
| 
 | ||||
| 	/* | ||||
| 	 * we've been released from the holding pen: secondary_stack | ||||
| 	 * should now contain the SVC stack for this core | ||||
| 	 */ | ||||
| 	b	secondary_startup | ||||
| 
 | ||||
| 1:	.long	. | ||||
| 	.long	phys_pen_release
 | ||||
| @ -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 }, | ||||
| }; | ||||
|  | ||||
| @ -22,6 +22,8 @@ | ||||
|  */ | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/smp.h> | ||||
| #include <linux/spinlock.h> | ||||
| 
 | ||||
| #include <asm/hardware.h> | ||||
| #include <asm/io.h> | ||||
| @ -85,4 +87,4 @@ static int __init leds_init(void) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| __initcall(leds_init); | ||||
| core_initcall(leds_init); | ||||
|  | ||||
							
								
								
									
										192
									
								
								arch/arm/mach-integrator/platsmp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								arch/arm/mach-integrator/platsmp.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,192 @@ | ||||
| /*
 | ||||
|  *  linux/arch/arm/mach-cintegrator/platsmp.c | ||||
|  * | ||||
|  *  Copyright (C) 2002 ARM Ltd. | ||||
|  *  All Rights Reserved | ||||
|  * | ||||
|  * 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/init.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/errno.h> | ||||
| #include <linux/mm.h> | ||||
| 
 | ||||
| #include <asm/atomic.h> | ||||
| #include <asm/delay.h> | ||||
| #include <asm/mmu_context.h> | ||||
| #include <asm/procinfo.h> | ||||
| #include <asm/ptrace.h> | ||||
| #include <asm/smp.h> | ||||
| 
 | ||||
| extern void integrator_secondary_startup(void); | ||||
| 
 | ||||
| /*
 | ||||
|  * control for which core is the next to come out of the secondary | ||||
|  * boot "holding pen" | ||||
|  */ | ||||
| volatile int __initdata pen_release = -1; | ||||
| unsigned long __initdata phys_pen_release = 0; | ||||
| 
 | ||||
| static DEFINE_SPINLOCK(boot_lock); | ||||
| 
 | ||||
| void __init platform_secondary_init(unsigned int cpu) | ||||
| { | ||||
| 	/*
 | ||||
| 	 * the primary core may have used a "cross call" soft interrupt | ||||
| 	 * to get this processor out of WFI in the BootMonitor - make | ||||
| 	 * sure that we are no longer being sent this soft interrupt | ||||
| 	 */ | ||||
| 	smp_cross_call_done(cpumask_of_cpu(cpu)); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * if any interrupts are already enabled for the primary | ||||
| 	 * core (e.g. timer irq), then they will not have been enabled | ||||
| 	 * for us: do so | ||||
| 	 */ | ||||
| 	secondary_scan_irqs(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * let the primary processor know we're out of the | ||||
| 	 * pen, then head off into the C entry point | ||||
| 	 */ | ||||
| 	pen_release = -1; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Synchronise with the boot thread. | ||||
| 	 */ | ||||
| 	spin_lock(&boot_lock); | ||||
| 	spin_unlock(&boot_lock); | ||||
| } | ||||
| 
 | ||||
| int __init boot_secondary(unsigned int cpu, struct task_struct *idle) | ||||
| { | ||||
| 	unsigned long timeout; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * set synchronisation state between this boot processor | ||||
| 	 * and the secondary one | ||||
| 	 */ | ||||
| 	spin_lock(&boot_lock); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * The secondary processor is waiting to be released from | ||||
| 	 * the holding pen - release it, then wait for it to flag | ||||
| 	 * that it has been released by resetting pen_release. | ||||
| 	 * | ||||
| 	 * Note that "pen_release" is the hardware CPU ID, whereas | ||||
| 	 * "cpu" is Linux's internal ID. | ||||
| 	 */ | ||||
| 	pen_release = cpu; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * XXX | ||||
| 	 * | ||||
| 	 * This is a later addition to the booting protocol: the | ||||
| 	 * bootMonitor now puts secondary cores into WFI, so | ||||
| 	 * poke_milo() no longer gets the cores moving; we need | ||||
| 	 * to send a soft interrupt to wake the secondary core. | ||||
| 	 * Use smp_cross_call() for this, since there's little | ||||
| 	 * point duplicating the code here | ||||
| 	 */ | ||||
| 	smp_cross_call(cpumask_of_cpu(cpu)); | ||||
| 
 | ||||
| 	timeout = jiffies + (1 * HZ); | ||||
| 	while (time_before(jiffies, timeout)) { | ||||
| 		if (pen_release == -1) | ||||
| 			break; | ||||
| 
 | ||||
| 		udelay(10); | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * now the secondary core is starting up let it run its | ||||
| 	 * calibrations, then wait for it to finish | ||||
| 	 */ | ||||
| 	spin_unlock(&boot_lock); | ||||
| 
 | ||||
| 	return pen_release != -1 ? -ENOSYS : 0; | ||||
| } | ||||
| 
 | ||||
| static void __init poke_milo(void) | ||||
| { | ||||
| 	extern void secondary_startup(void); | ||||
| 
 | ||||
| 	/* nobody is to be released from the pen yet */ | ||||
| 	pen_release = -1; | ||||
| 
 | ||||
| 	phys_pen_release = virt_to_phys(&pen_release); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * write the address of secondary startup into the system-wide | ||||
| 	 * flags register, then clear the bottom two bits, which is what | ||||
| 	 * BootMonitor is waiting for | ||||
| 	 */ | ||||
| #if 1 | ||||
| #define CINTEGRATOR_HDR_FLAGSS_OFFSET 0x30 | ||||
| 	__raw_writel(virt_to_phys(integrator_secondary_startup), | ||||
| 		     (IO_ADDRESS(INTEGRATOR_HDR_BASE) + | ||||
| 		      CINTEGRATOR_HDR_FLAGSS_OFFSET)); | ||||
| #define CINTEGRATOR_HDR_FLAGSC_OFFSET 0x34 | ||||
| 	__raw_writel(3, | ||||
| 		     (IO_ADDRESS(INTEGRATOR_HDR_BASE) + | ||||
| 		      CINTEGRATOR_HDR_FLAGSC_OFFSET)); | ||||
| #endif | ||||
| 
 | ||||
| 	mb(); | ||||
| } | ||||
| 
 | ||||
| void __init smp_prepare_cpus(unsigned int max_cpus) | ||||
| { | ||||
| 	unsigned int ncores = get_core_count(); | ||||
| 	unsigned int cpu = smp_processor_id(); | ||||
| 	int i; | ||||
| 
 | ||||
| 	/* sanity check */ | ||||
| 	if (ncores == 0) { | ||||
| 		printk(KERN_ERR | ||||
| 		       "Integrator/CP: strange CM count of 0? Default to 1\n"); | ||||
| 
 | ||||
| 		ncores = 1; | ||||
| 	} | ||||
| 
 | ||||
| 	if (ncores > NR_CPUS) { | ||||
| 		printk(KERN_WARNING | ||||
| 		       "Integrator/CP: no. of cores (%d) greater than configured " | ||||
| 		       "maximum of %d - clipping\n", | ||||
| 		       ncores, NR_CPUS); | ||||
| 		ncores = NR_CPUS; | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * start with some more config for the Boot CPU, now that | ||||
| 	 * the world is a bit more alive (which was not the case | ||||
| 	 * when smp_prepare_boot_cpu() was called) | ||||
| 	 */ | ||||
| 	smp_store_cpu_info(cpu); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * are we trying to boot more cores than exist? | ||||
| 	 */ | ||||
| 	if (max_cpus > ncores) | ||||
| 		max_cpus = ncores; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Initialise the present mask - this tells us which CPUs should | ||||
| 	 * be present. | ||||
| 	 */ | ||||
| 	for (i = 0; i < max_cpus; i++) { | ||||
| 		cpu_set(i, cpu_present_mask); | ||||
| 	} | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Do we need any more CPUs? If so, then let them know where | ||||
| 	 * to start. Note that, on modern versions of MILO, the "poke" | ||||
| 	 * doesn't actually do anything until each individual core is | ||||
| 	 * sent a soft interrupt to get it out of WFI | ||||
| 	 */ | ||||
| 	if (max_cpus > 1) | ||||
| 		poke_milo(); | ||||
| } | ||||
| @ -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,15 @@ 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); | ||||
| 
 | ||||
| 	cpu_init(); | ||||
| 
 | ||||
| 	/* after sleeping, validate the checksum */ | ||||
| 	checksum = 0; | ||||
| @ -145,7 +146,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 +163,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 +201,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 | ||||
|  | ||||
| @ -88,6 +88,8 @@ static int sa11x0_pm_enter(suspend_state_t state) | ||||
| 	/* go zzz */ | ||||
| 	sa1100_cpu_suspend(); | ||||
| 
 | ||||
| 	cpu_init(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Ensure not to come back here if it wasn't intended | ||||
| 	 */ | ||||
|  | ||||
| @ -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 | ||||
							
								
								
									
										131
									
								
								arch/arm/mm/copypage-xscale.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								arch/arm/mm/copypage-xscale.c
									
									
									
									
									
										Normal file
									
								
							| @ -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) | ||||
|  | ||||
| @ -1083,6 +1083,23 @@ source "drivers/zorro/Kconfig" | ||||
| 
 | ||||
| source kernel/power/Kconfig | ||||
| 
 | ||||
| config SECCOMP | ||||
| 	bool "Enable seccomp to safely compute untrusted bytecode" | ||||
| 	depends on PROC_FS | ||||
| 	default y | ||||
| 	help | ||||
| 	  This kernel feature is useful for number crunching applications | ||||
| 	  that may need to compute untrusted bytecode during their | ||||
| 	  execution. By using pipes or other transports made available to | ||||
| 	  the process as file descriptors supporting the read/write | ||||
| 	  syscalls, it's possible to isolate those applications in | ||||
| 	  their own address space using seccomp. Once seccomp is | ||||
| 	  enabled via /proc/<pid>/seccomp, it cannot be disabled | ||||
| 	  and the task is only allowed to execute a few safe syscalls | ||||
| 	  defined by each seccomp mode. | ||||
| 
 | ||||
| 	  If unsure, say Y. Only embedded should say N here. | ||||
| 
 | ||||
| endmenu | ||||
| 
 | ||||
| config ISA_DMA_API | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -202,7 +202,7 @@ _GLOBAL(DoSyscall) | ||||
| 	rlwinm	r11,r11,0,~_TIFL_FORCE_NOERROR | ||||
| 	stw	r11,TI_LOCAL_FLAGS(r10) | ||||
| 	lwz	r11,TI_FLAGS(r10) | ||||
| 	andi.	r11,r11,_TIF_SYSCALL_TRACE | ||||
| 	andi.	r11,r11,_TIF_SYSCALL_T_OR_A | ||||
| 	bne-	syscall_dotrace | ||||
| syscall_dotrace_cont: | ||||
| 	cmplwi	0,r0,NR_syscalls | ||||
| @ -237,7 +237,7 @@ ret_from_syscall: | ||||
| 	SYNC | ||||
| 	MTMSRD(r10) | ||||
| 	lwz	r9,TI_FLAGS(r12) | ||||
| 	andi.	r0,r9,(_TIF_SYSCALL_TRACE|_TIF_SIGPENDING|_TIF_NEED_RESCHED) | ||||
| 	andi.	r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SIGPENDING|_TIF_NEED_RESCHED) | ||||
| 	bne-	syscall_exit_work | ||||
| syscall_exit_cont: | ||||
| #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) | ||||
| @ -277,7 +277,8 @@ syscall_dotrace: | ||||
| 	SAVE_NVGPRS(r1) | ||||
| 	li	r0,0xc00 | ||||
| 	stw	r0,TRAP(r1) | ||||
| 	bl	do_syscall_trace | ||||
| 	addi	r3,r1,STACK_FRAME_OVERHEAD | ||||
| 	bl	do_syscall_trace_enter | ||||
| 	lwz	r0,GPR0(r1)	/* Restore original registers */ | ||||
| 	lwz	r3,GPR3(r1) | ||||
| 	lwz	r4,GPR4(r1) | ||||
| @ -291,7 +292,7 @@ syscall_dotrace: | ||||
| syscall_exit_work: | ||||
| 	stw	r6,RESULT(r1)	/* Save result */ | ||||
| 	stw	r3,GPR3(r1)	/* Update return value */ | ||||
| 	andi.	r0,r9,_TIF_SYSCALL_TRACE | ||||
| 	andi.	r0,r9,_TIF_SYSCALL_T_OR_A | ||||
| 	beq	5f | ||||
| 	ori	r10,r10,MSR_EE | ||||
| 	SYNC | ||||
| @ -303,7 +304,8 @@ syscall_exit_work: | ||||
| 	li	r4,0xc00 | ||||
| 	stw	r4,TRAP(r1) | ||||
| 4: | ||||
| 	bl	do_syscall_trace | ||||
| 	addi	r3,r1,STACK_FRAME_OVERHEAD | ||||
| 	bl	do_syscall_trace_leave | ||||
| 	REST_NVGPRS(r1) | ||||
| 2: | ||||
| 	lwz	r3,GPR3(r1) | ||||
| @ -627,8 +629,8 @@ sigreturn_exit: | ||||
| 	subi	r1,r3,STACK_FRAME_OVERHEAD | ||||
| 	rlwinm	r12,r1,0,0,18	/* current_thread_info() */ | ||||
| 	lwz	r9,TI_FLAGS(r12) | ||||
| 	andi.	r0,r9,_TIF_SYSCALL_TRACE | ||||
| 	bnel-	do_syscall_trace | ||||
| 	andi.	r0,r9,_TIF_SYSCALL_T_OR_A | ||||
| 	bnel-	do_syscall_trace_leave | ||||
| 	/* fall through */ | ||||
| 
 | ||||
| 	.globl	ret_from_except_full
 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -55,7 +55,6 @@ | ||||
| #define EXPORT_SYMTAB_STROPS | ||||
| 
 | ||||
| extern void transfer_to_handler(void); | ||||
| extern void do_syscall_trace(void); | ||||
| extern void do_IRQ(struct pt_regs *regs); | ||||
| extern void MachineCheckException(struct pt_regs *regs); | ||||
| extern void AlignmentException(struct pt_regs *regs); | ||||
| @ -74,7 +73,6 @@ extern unsigned long mm_ptov (unsigned long paddr); | ||||
| EXPORT_SYMBOL(clear_pages); | ||||
| EXPORT_SYMBOL(clear_user_page); | ||||
| EXPORT_SYMBOL(do_signal); | ||||
| EXPORT_SYMBOL(do_syscall_trace); | ||||
| EXPORT_SYMBOL(transfer_to_handler); | ||||
| EXPORT_SYMBOL(do_IRQ); | ||||
| EXPORT_SYMBOL(MachineCheckException); | ||||
|  | ||||
| @ -27,6 +27,9 @@ | ||||
| #include <linux/user.h> | ||||
| #include <linux/security.h> | ||||
| #include <linux/signal.h> | ||||
| #include <linux/seccomp.h> | ||||
| #include <linux/audit.h> | ||||
| #include <linux/module.h> | ||||
| 
 | ||||
| #include <asm/uaccess.h> | ||||
| #include <asm/page.h> | ||||
| @ -455,11 +458,10 @@ out: | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| void do_syscall_trace(void) | ||||
| static void do_syscall_trace(void) | ||||
| { | ||||
|         if (!test_thread_flag(TIF_SYSCALL_TRACE) | ||||
| 	    || !(current->ptrace & PT_PTRACED)) | ||||
| 		return; | ||||
| 	/* the 0x80 provides a way for the tracing parent to distinguish
 | ||||
| 	   between a syscall stop and SIGTRAP delivery */ | ||||
| 	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) | ||||
| 				 ? 0x80 : 0)); | ||||
| 
 | ||||
| @ -473,3 +475,33 @@ void do_syscall_trace(void) | ||||
| 		current->exit_code = 0; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void do_syscall_trace_enter(struct pt_regs *regs) | ||||
| { | ||||
| 	if (test_thread_flag(TIF_SYSCALL_TRACE) | ||||
| 	    && (current->ptrace & PT_PTRACED)) | ||||
| 		do_syscall_trace(); | ||||
| 
 | ||||
| 	if (unlikely(current->audit_context)) | ||||
| 		audit_syscall_entry(current, AUDIT_ARCH_PPC, | ||||
| 				    regs->gpr[0], | ||||
| 				    regs->gpr[3], regs->gpr[4], | ||||
| 				    regs->gpr[5], regs->gpr[6]); | ||||
| } | ||||
| 
 | ||||
| void do_syscall_trace_leave(struct pt_regs *regs) | ||||
| { | ||||
| 	secure_computing(regs->gpr[0]); | ||||
| 
 | ||||
| 	if (unlikely(current->audit_context)) | ||||
| 		audit_syscall_exit(current, | ||||
| 				   (regs->ccr&0x1000)?AUDITSC_FAILURE:AUDITSC_SUCCESS, | ||||
| 				   regs->result); | ||||
| 
 | ||||
| 	if ((test_thread_flag(TIF_SYSCALL_TRACE)) | ||||
| 	    && (current->ptrace & PT_PTRACED)) | ||||
| 		do_syscall_trace(); | ||||
| } | ||||
| 
 | ||||
| EXPORT_SYMBOL(do_syscall_trace_enter); | ||||
| EXPORT_SYMBOL(do_syscall_trace_leave); | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -1370,7 +1370,7 @@ 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 (!PHANDLE_VALID(rtas)) { | ||||
| 	if (PHANDLE_VALID(rtas)) { | ||||
| 		int x = prom_getproplen(rtas, "ibm,hypertas-functions"); | ||||
| 		if (x != PROM_ERROR) { | ||||
| 			prom_printf("Hypertas detected, assuming LPAR !\n"); | ||||
|  | ||||
| @ -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; | ||||
| 
 | ||||
| 	/*
 | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user