Merge commit '305b07680f' into orion/master
This commit is contained in:
commit
d6f818f71f
|
@ -1,3 +1,46 @@
|
||||||
|
What: /sys/bus/pci/drivers/.../bind
|
||||||
|
Date: December 2003
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing a device location to this file will cause
|
||||||
|
the driver to attempt to bind to the device found at
|
||||||
|
this location. This is useful for overriding default
|
||||||
|
bindings. The format for the location is: DDDD:BB:DD.F.
|
||||||
|
That is Domain:Bus:Device.Function and is the same as
|
||||||
|
found in /sys/bus/pci/devices/. For example:
|
||||||
|
# echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/bind
|
||||||
|
(Note: kernels before 2.6.28 may require echo -n).
|
||||||
|
|
||||||
|
What: /sys/bus/pci/drivers/.../unbind
|
||||||
|
Date: December 2003
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing a device location to this file will cause the
|
||||||
|
driver to attempt to unbind from the device found at
|
||||||
|
this location. This may be useful when overriding default
|
||||||
|
bindings. The format for the location is: DDDD:BB:DD.F.
|
||||||
|
That is Domain:Bus:Device.Function and is the same as
|
||||||
|
found in /sys/bus/pci/devices/. For example:
|
||||||
|
# echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/unbind
|
||||||
|
(Note: kernels before 2.6.28 may require echo -n).
|
||||||
|
|
||||||
|
What: /sys/bus/pci/drivers/.../new_id
|
||||||
|
Date: December 2003
|
||||||
|
Contact: linux-pci@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
Writing a device ID to this file will attempt to
|
||||||
|
dynamically add a new device ID to a PCI device driver.
|
||||||
|
This may allow the driver to support more hardware than
|
||||||
|
was included in the driver's static device ID support
|
||||||
|
table at compile time. The format for the device ID is:
|
||||||
|
VVVV DDDD SVVV SDDD CCCC MMMM PPPP. That is Vendor ID,
|
||||||
|
Device ID, Subsystem Vendor ID, Subsystem Device ID,
|
||||||
|
Class, Class Mask, and Private Driver Data. The Vendor ID
|
||||||
|
and Device ID fields are required, the rest are optional.
|
||||||
|
Upon successfully adding an ID, the driver will probe
|
||||||
|
for the device and attempt to bind to it. For example:
|
||||||
|
# echo "8086 10f5" > /sys/bus/pci/drivers/foo/new_id
|
||||||
|
|
||||||
What: /sys/bus/pci/devices/.../vpd
|
What: /sys/bus/pci/devices/.../vpd
|
||||||
Date: February 2008
|
Date: February 2008
|
||||||
Contact: Ben Hutchings <bhutchings@solarflare.com>
|
Contact: Ben Hutchings <bhutchings@solarflare.com>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
# To add a new book the only step required is to add the book to the
|
# To add a new book the only step required is to add the book to the
|
||||||
# list of DOCBOOKS.
|
# list of DOCBOOKS.
|
||||||
|
|
||||||
DOCBOOKS := z8530book.xml mcabook.xml \
|
DOCBOOKS := z8530book.xml mcabook.xml device-drivers.xml \
|
||||||
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
|
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
|
||||||
procfs-guide.xml writing_usb_driver.xml networking.xml \
|
procfs-guide.xml writing_usb_driver.xml networking.xml \
|
||||||
kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \
|
kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \
|
||||||
|
|
|
@ -0,0 +1,418 @@
|
||||||
|
<?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="LinuxDriversAPI">
|
||||||
|
<bookinfo>
|
||||||
|
<title>Linux Device Drivers</title>
|
||||||
|
|
||||||
|
<legalnotice>
|
||||||
|
<para>
|
||||||
|
This documentation is free software; you can redistribute
|
||||||
|
it and/or modify it under the terms of the GNU General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This program is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
See the GNU General Public License for more details.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You should have received a copy of the GNU General Public
|
||||||
|
License along with this program; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||||
|
MA 02111-1307 USA
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For more details see the file COPYING in the source
|
||||||
|
distribution of Linux.
|
||||||
|
</para>
|
||||||
|
</legalnotice>
|
||||||
|
</bookinfo>
|
||||||
|
|
||||||
|
<toc></toc>
|
||||||
|
|
||||||
|
<chapter id="Basics">
|
||||||
|
<title>Driver Basics</title>
|
||||||
|
<sect1><title>Driver Entry and Exit points</title>
|
||||||
|
!Iinclude/linux/init.h
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1><title>Atomic and pointer manipulation</title>
|
||||||
|
!Iarch/x86/include/asm/atomic_32.h
|
||||||
|
!Iarch/x86/include/asm/unaligned.h
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1><title>Delaying, scheduling, and timer routines</title>
|
||||||
|
!Iinclude/linux/sched.h
|
||||||
|
!Ekernel/sched.c
|
||||||
|
!Ekernel/timer.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>High-resolution timers</title>
|
||||||
|
!Iinclude/linux/ktime.h
|
||||||
|
!Iinclude/linux/hrtimer.h
|
||||||
|
!Ekernel/hrtimer.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Workqueues and Kevents</title>
|
||||||
|
!Ekernel/workqueue.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Internal Functions</title>
|
||||||
|
!Ikernel/exit.c
|
||||||
|
!Ikernel/signal.c
|
||||||
|
!Iinclude/linux/kthread.h
|
||||||
|
!Ekernel/kthread.c
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1><title>Kernel objects manipulation</title>
|
||||||
|
<!--
|
||||||
|
X!Iinclude/linux/kobject.h
|
||||||
|
-->
|
||||||
|
!Elib/kobject.c
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1><title>Kernel utility functions</title>
|
||||||
|
!Iinclude/linux/kernel.h
|
||||||
|
!Ekernel/printk.c
|
||||||
|
!Ekernel/panic.c
|
||||||
|
!Ekernel/sys.c
|
||||||
|
!Ekernel/rcupdate.c
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1><title>Device Resource Management</title>
|
||||||
|
!Edrivers/base/devres.c
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="devdrivers">
|
||||||
|
<title>Device drivers infrastructure</title>
|
||||||
|
<sect1><title>Device Drivers Base</title>
|
||||||
|
<!--
|
||||||
|
X!Iinclude/linux/device.h
|
||||||
|
-->
|
||||||
|
!Edrivers/base/driver.c
|
||||||
|
!Edrivers/base/core.c
|
||||||
|
!Edrivers/base/class.c
|
||||||
|
!Edrivers/base/firmware_class.c
|
||||||
|
!Edrivers/base/transport_class.c
|
||||||
|
<!-- Cannot be included, because
|
||||||
|
attribute_container_add_class_device_adapter
|
||||||
|
and attribute_container_classdev_to_container
|
||||||
|
exceed allowed 44 characters maximum
|
||||||
|
X!Edrivers/base/attribute_container.c
|
||||||
|
-->
|
||||||
|
!Edrivers/base/sys.c
|
||||||
|
<!--
|
||||||
|
X!Edrivers/base/interface.c
|
||||||
|
-->
|
||||||
|
!Edrivers/base/platform.c
|
||||||
|
!Edrivers/base/bus.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Device Drivers Power Management</title>
|
||||||
|
!Edrivers/base/power/main.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Device Drivers ACPI Support</title>
|
||||||
|
<!-- Internal functions only
|
||||||
|
X!Edrivers/acpi/sleep/main.c
|
||||||
|
X!Edrivers/acpi/sleep/wakeup.c
|
||||||
|
X!Edrivers/acpi/motherboard.c
|
||||||
|
X!Edrivers/acpi/bus.c
|
||||||
|
-->
|
||||||
|
!Edrivers/acpi/scan.c
|
||||||
|
!Idrivers/acpi/scan.c
|
||||||
|
<!-- No correct structured comments
|
||||||
|
X!Edrivers/acpi/pci_bind.c
|
||||||
|
-->
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Device drivers PnP support</title>
|
||||||
|
!Idrivers/pnp/core.c
|
||||||
|
<!-- No correct structured comments
|
||||||
|
X!Edrivers/pnp/system.c
|
||||||
|
-->
|
||||||
|
!Edrivers/pnp/card.c
|
||||||
|
!Idrivers/pnp/driver.c
|
||||||
|
!Edrivers/pnp/manager.c
|
||||||
|
!Edrivers/pnp/support.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Userspace IO devices</title>
|
||||||
|
!Edrivers/uio/uio.c
|
||||||
|
!Iinclude/linux/uio_driver.h
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="parportdev">
|
||||||
|
<title>Parallel Port Devices</title>
|
||||||
|
!Iinclude/linux/parport.h
|
||||||
|
!Edrivers/parport/ieee1284.c
|
||||||
|
!Edrivers/parport/share.c
|
||||||
|
!Idrivers/parport/daisy.c
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="message_devices">
|
||||||
|
<title>Message-based devices</title>
|
||||||
|
<sect1><title>Fusion message devices</title>
|
||||||
|
!Edrivers/message/fusion/mptbase.c
|
||||||
|
!Idrivers/message/fusion/mptbase.c
|
||||||
|
!Edrivers/message/fusion/mptscsih.c
|
||||||
|
!Idrivers/message/fusion/mptscsih.c
|
||||||
|
!Idrivers/message/fusion/mptctl.c
|
||||||
|
!Idrivers/message/fusion/mptspi.c
|
||||||
|
!Idrivers/message/fusion/mptfc.c
|
||||||
|
!Idrivers/message/fusion/mptlan.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>I2O message devices</title>
|
||||||
|
!Iinclude/linux/i2o.h
|
||||||
|
!Idrivers/message/i2o/core.h
|
||||||
|
!Edrivers/message/i2o/iop.c
|
||||||
|
!Idrivers/message/i2o/iop.c
|
||||||
|
!Idrivers/message/i2o/config-osm.c
|
||||||
|
!Edrivers/message/i2o/exec-osm.c
|
||||||
|
!Idrivers/message/i2o/exec-osm.c
|
||||||
|
!Idrivers/message/i2o/bus-osm.c
|
||||||
|
!Edrivers/message/i2o/device.c
|
||||||
|
!Idrivers/message/i2o/device.c
|
||||||
|
!Idrivers/message/i2o/driver.c
|
||||||
|
!Idrivers/message/i2o/pci.c
|
||||||
|
!Idrivers/message/i2o/i2o_block.c
|
||||||
|
!Idrivers/message/i2o/i2o_scsi.c
|
||||||
|
!Idrivers/message/i2o/i2o_proc.c
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="snddev">
|
||||||
|
<title>Sound Devices</title>
|
||||||
|
!Iinclude/sound/core.h
|
||||||
|
!Esound/sound_core.c
|
||||||
|
!Iinclude/sound/pcm.h
|
||||||
|
!Esound/core/pcm.c
|
||||||
|
!Esound/core/device.c
|
||||||
|
!Esound/core/info.c
|
||||||
|
!Esound/core/rawmidi.c
|
||||||
|
!Esound/core/sound.c
|
||||||
|
!Esound/core/memory.c
|
||||||
|
!Esound/core/pcm_memory.c
|
||||||
|
!Esound/core/init.c
|
||||||
|
!Esound/core/isadma.c
|
||||||
|
!Esound/core/control.c
|
||||||
|
!Esound/core/pcm_lib.c
|
||||||
|
!Esound/core/hwdep.c
|
||||||
|
!Esound/core/pcm_native.c
|
||||||
|
!Esound/core/memalloc.c
|
||||||
|
<!-- FIXME: Removed for now since no structured comments in source
|
||||||
|
X!Isound/sound_firmware.c
|
||||||
|
-->
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="uart16x50">
|
||||||
|
<title>16x50 UART Driver</title>
|
||||||
|
!Iinclude/linux/serial_core.h
|
||||||
|
!Edrivers/serial/serial_core.c
|
||||||
|
!Edrivers/serial/8250.c
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="fbdev">
|
||||||
|
<title>Frame Buffer Library</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The frame buffer drivers depend heavily on four data structures.
|
||||||
|
These structures are declared in include/linux/fb.h. They are
|
||||||
|
fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs.
|
||||||
|
The last three can be made available to and from userland.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
fb_info defines the current state of a particular video card.
|
||||||
|
Inside fb_info, there exists a fb_ops structure which is a
|
||||||
|
collection of needed functions to make fbdev and fbcon work.
|
||||||
|
fb_info is only visible to the kernel.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
fb_var_screeninfo is used to describe the features of a video card
|
||||||
|
that are user defined. With fb_var_screeninfo, things such as
|
||||||
|
depth and the resolution may be defined.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The next structure is fb_fix_screeninfo. This defines the
|
||||||
|
properties of a card that are created when a mode is set and can't
|
||||||
|
be changed otherwise. A good example of this is the start of the
|
||||||
|
frame buffer memory. This "locks" the address of the frame buffer
|
||||||
|
memory, so that it cannot be changed or moved.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The last structure is fb_monospecs. In the old API, there was
|
||||||
|
little importance for fb_monospecs. This allowed for forbidden things
|
||||||
|
such as setting a mode of 800x600 on a fix frequency monitor. With
|
||||||
|
the new API, fb_monospecs prevents such things, and if used
|
||||||
|
correctly, can prevent a monitor from being cooked. fb_monospecs
|
||||||
|
will not be useful until kernels 2.5.x.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1><title>Frame Buffer Memory</title>
|
||||||
|
!Edrivers/video/fbmem.c
|
||||||
|
</sect1>
|
||||||
|
<!--
|
||||||
|
<sect1><title>Frame Buffer Console</title>
|
||||||
|
X!Edrivers/video/console/fbcon.c
|
||||||
|
</sect1>
|
||||||
|
-->
|
||||||
|
<sect1><title>Frame Buffer Colormap</title>
|
||||||
|
!Edrivers/video/fbcmap.c
|
||||||
|
</sect1>
|
||||||
|
<!-- FIXME:
|
||||||
|
drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
|
||||||
|
out until somebody adds docs. KAO
|
||||||
|
<sect1><title>Frame Buffer Generic Functions</title>
|
||||||
|
X!Idrivers/video/fbgen.c
|
||||||
|
</sect1>
|
||||||
|
KAO -->
|
||||||
|
<sect1><title>Frame Buffer Video Mode Database</title>
|
||||||
|
!Idrivers/video/modedb.c
|
||||||
|
!Edrivers/video/modedb.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Frame Buffer Macintosh Video Mode Database</title>
|
||||||
|
!Edrivers/video/macmodes.c
|
||||||
|
</sect1>
|
||||||
|
<sect1><title>Frame Buffer Fonts</title>
|
||||||
|
<para>
|
||||||
|
Refer to the file drivers/video/console/fonts.c for more information.
|
||||||
|
</para>
|
||||||
|
<!-- FIXME: Removed for now since no structured comments in source
|
||||||
|
X!Idrivers/video/console/fonts.c
|
||||||
|
-->
|
||||||
|
</sect1>
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="input_subsystem">
|
||||||
|
<title>Input Subsystem</title>
|
||||||
|
!Iinclude/linux/input.h
|
||||||
|
!Edrivers/input/input.c
|
||||||
|
!Edrivers/input/ff-core.c
|
||||||
|
!Edrivers/input/ff-memless.c
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="spi">
|
||||||
|
<title>Serial Peripheral Interface (SPI)</title>
|
||||||
|
<para>
|
||||||
|
SPI is the "Serial Peripheral Interface", widely used with
|
||||||
|
embedded systems because it is a simple and efficient
|
||||||
|
interface: basically a multiplexed shift register.
|
||||||
|
Its three signal wires hold a clock (SCK, often in the range
|
||||||
|
of 1-20 MHz), a "Master Out, Slave In" (MOSI) data line, and
|
||||||
|
a "Master In, Slave Out" (MISO) data line.
|
||||||
|
SPI is a full duplex protocol; for each bit shifted out the
|
||||||
|
MOSI line (one per clock) another is shifted in on the MISO line.
|
||||||
|
Those bits are assembled into words of various sizes on the
|
||||||
|
way to and from system memory.
|
||||||
|
An additional chipselect line is usually active-low (nCS);
|
||||||
|
four signals are normally used for each peripheral, plus
|
||||||
|
sometimes an interrupt.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The SPI bus facilities listed here provide a generalized
|
||||||
|
interface to declare SPI busses and devices, manage them
|
||||||
|
according to the standard Linux driver model, and perform
|
||||||
|
input/output operations.
|
||||||
|
At this time, only "master" side interfaces are supported,
|
||||||
|
where Linux talks to SPI peripherals and does not implement
|
||||||
|
such a peripheral itself.
|
||||||
|
(Interfaces to support implementing SPI slaves would
|
||||||
|
necessarily look different.)
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The programming interface is structured around two kinds of driver,
|
||||||
|
and two kinds of device.
|
||||||
|
A "Controller Driver" abstracts the controller hardware, which may
|
||||||
|
be as simple as a set of GPIO pins or as complex as a pair of FIFOs
|
||||||
|
connected to dual DMA engines on the other side of the SPI shift
|
||||||
|
register (maximizing throughput). Such drivers bridge between
|
||||||
|
whatever bus they sit on (often the platform bus) and SPI, and
|
||||||
|
expose the SPI side of their device as a
|
||||||
|
<structname>struct spi_master</structname>.
|
||||||
|
SPI devices are children of that master, represented as a
|
||||||
|
<structname>struct spi_device</structname> and manufactured from
|
||||||
|
<structname>struct spi_board_info</structname> descriptors which
|
||||||
|
are usually provided by board-specific initialization code.
|
||||||
|
A <structname>struct spi_driver</structname> is called a
|
||||||
|
"Protocol Driver", and is bound to a spi_device using normal
|
||||||
|
driver model calls.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
The I/O model is a set of queued messages. Protocol drivers
|
||||||
|
submit one or more <structname>struct spi_message</structname>
|
||||||
|
objects, which are processed and completed asynchronously.
|
||||||
|
(There are synchronous wrappers, however.) Messages are
|
||||||
|
built from one or more <structname>struct spi_transfer</structname>
|
||||||
|
objects, each of which wraps a full duplex SPI transfer.
|
||||||
|
A variety of protocol tweaking options are needed, because
|
||||||
|
different chips adopt very different policies for how they
|
||||||
|
use the bits transferred with SPI.
|
||||||
|
</para>
|
||||||
|
!Iinclude/linux/spi/spi.h
|
||||||
|
!Fdrivers/spi/spi.c spi_register_board_info
|
||||||
|
!Edrivers/spi/spi.c
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="i2c">
|
||||||
|
<title>I<superscript>2</superscript>C and SMBus Subsystem</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
I<superscript>2</superscript>C (or without fancy typography, "I2C")
|
||||||
|
is an acronym for the "Inter-IC" bus, a simple bus protocol which is
|
||||||
|
widely used where low data rate communications suffice.
|
||||||
|
Since it's also a licensed trademark, some vendors use another
|
||||||
|
name (such as "Two-Wire Interface", TWI) for the same bus.
|
||||||
|
I2C only needs two signals (SCL for clock, SDA for data), conserving
|
||||||
|
board real estate and minimizing signal quality issues.
|
||||||
|
Most I2C devices use seven bit addresses, and bus speeds of up
|
||||||
|
to 400 kHz; there's a high speed extension (3.4 MHz) that's not yet
|
||||||
|
found wide use.
|
||||||
|
I2C is a multi-master bus; open drain signaling is used to
|
||||||
|
arbitrate between masters, as well as to handshake and to
|
||||||
|
synchronize clocks from slower clients.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The Linux I2C programming interfaces support only the master
|
||||||
|
side of bus interactions, not the slave side.
|
||||||
|
The programming interface is structured around two kinds of driver,
|
||||||
|
and two kinds of device.
|
||||||
|
An I2C "Adapter Driver" abstracts the controller hardware; it binds
|
||||||
|
to a physical device (perhaps a PCI device or platform_device) and
|
||||||
|
exposes a <structname>struct i2c_adapter</structname> representing
|
||||||
|
each I2C bus segment it manages.
|
||||||
|
On each I2C bus segment will be I2C devices represented by a
|
||||||
|
<structname>struct i2c_client</structname>. Those devices will
|
||||||
|
be bound to a <structname>struct i2c_driver</structname>,
|
||||||
|
which should follow the standard Linux driver model.
|
||||||
|
(At this writing, a legacy model is more widely used.)
|
||||||
|
There are functions to perform various I2C protocol operations; at
|
||||||
|
this writing all such functions are usable only from task context.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The System Management Bus (SMBus) is a sibling protocol. Most SMBus
|
||||||
|
systems are also I2C conformant. The electrical constraints are
|
||||||
|
tighter for SMBus, and it standardizes particular protocol messages
|
||||||
|
and idioms. Controllers that support I2C can also support most
|
||||||
|
SMBus operations, but SMBus controllers don't support all the protocol
|
||||||
|
options that an I2C controller will.
|
||||||
|
There are functions to perform various SMBus protocol operations,
|
||||||
|
either using I2C primitives or by issuing SMBus commands to
|
||||||
|
i2c_adapter devices which don't support those I2C operations.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
!Iinclude/linux/i2c.h
|
||||||
|
!Fdrivers/i2c/i2c-boardinfo.c i2c_register_board_info
|
||||||
|
!Edrivers/i2c/i2c-core.c
|
||||||
|
</chapter>
|
||||||
|
|
||||||
|
</book>
|
|
@ -38,58 +38,6 @@
|
||||||
|
|
||||||
<toc></toc>
|
<toc></toc>
|
||||||
|
|
||||||
<chapter id="Basics">
|
|
||||||
<title>Driver Basics</title>
|
|
||||||
<sect1><title>Driver Entry and Exit points</title>
|
|
||||||
!Iinclude/linux/init.h
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1><title>Atomic and pointer manipulation</title>
|
|
||||||
!Iarch/x86/include/asm/atomic_32.h
|
|
||||||
!Iarch/x86/include/asm/unaligned.h
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1><title>Delaying, scheduling, and timer routines</title>
|
|
||||||
!Iinclude/linux/sched.h
|
|
||||||
!Ekernel/sched.c
|
|
||||||
!Ekernel/timer.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>High-resolution timers</title>
|
|
||||||
!Iinclude/linux/ktime.h
|
|
||||||
!Iinclude/linux/hrtimer.h
|
|
||||||
!Ekernel/hrtimer.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Workqueues and Kevents</title>
|
|
||||||
!Ekernel/workqueue.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Internal Functions</title>
|
|
||||||
!Ikernel/exit.c
|
|
||||||
!Ikernel/signal.c
|
|
||||||
!Iinclude/linux/kthread.h
|
|
||||||
!Ekernel/kthread.c
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1><title>Kernel objects manipulation</title>
|
|
||||||
<!--
|
|
||||||
X!Iinclude/linux/kobject.h
|
|
||||||
-->
|
|
||||||
!Elib/kobject.c
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1><title>Kernel utility functions</title>
|
|
||||||
!Iinclude/linux/kernel.h
|
|
||||||
!Ekernel/printk.c
|
|
||||||
!Ekernel/panic.c
|
|
||||||
!Ekernel/sys.c
|
|
||||||
!Ekernel/rcupdate.c
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
<sect1><title>Device Resource Management</title>
|
|
||||||
!Edrivers/base/devres.c
|
|
||||||
</sect1>
|
|
||||||
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="adt">
|
<chapter id="adt">
|
||||||
<title>Data Types</title>
|
<title>Data Types</title>
|
||||||
<sect1><title>Doubly Linked Lists</title>
|
<sect1><title>Doubly Linked Lists</title>
|
||||||
|
@ -298,62 +246,6 @@ X!Earch/x86/kernel/mca_32.c
|
||||||
!Ikernel/acct.c
|
!Ikernel/acct.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="devdrivers">
|
|
||||||
<title>Device drivers infrastructure</title>
|
|
||||||
<sect1><title>Device Drivers Base</title>
|
|
||||||
<!--
|
|
||||||
X!Iinclude/linux/device.h
|
|
||||||
-->
|
|
||||||
!Edrivers/base/driver.c
|
|
||||||
!Edrivers/base/core.c
|
|
||||||
!Edrivers/base/class.c
|
|
||||||
!Edrivers/base/firmware_class.c
|
|
||||||
!Edrivers/base/transport_class.c
|
|
||||||
<!-- Cannot be included, because
|
|
||||||
attribute_container_add_class_device_adapter
|
|
||||||
and attribute_container_classdev_to_container
|
|
||||||
exceed allowed 44 characters maximum
|
|
||||||
X!Edrivers/base/attribute_container.c
|
|
||||||
-->
|
|
||||||
!Edrivers/base/sys.c
|
|
||||||
<!--
|
|
||||||
X!Edrivers/base/interface.c
|
|
||||||
-->
|
|
||||||
!Edrivers/base/platform.c
|
|
||||||
!Edrivers/base/bus.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Device Drivers Power Management</title>
|
|
||||||
!Edrivers/base/power/main.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Device Drivers ACPI Support</title>
|
|
||||||
<!-- Internal functions only
|
|
||||||
X!Edrivers/acpi/sleep/main.c
|
|
||||||
X!Edrivers/acpi/sleep/wakeup.c
|
|
||||||
X!Edrivers/acpi/motherboard.c
|
|
||||||
X!Edrivers/acpi/bus.c
|
|
||||||
-->
|
|
||||||
!Edrivers/acpi/scan.c
|
|
||||||
!Idrivers/acpi/scan.c
|
|
||||||
<!-- No correct structured comments
|
|
||||||
X!Edrivers/acpi/pci_bind.c
|
|
||||||
-->
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Device drivers PnP support</title>
|
|
||||||
!Idrivers/pnp/core.c
|
|
||||||
<!-- No correct structured comments
|
|
||||||
X!Edrivers/pnp/system.c
|
|
||||||
-->
|
|
||||||
!Edrivers/pnp/card.c
|
|
||||||
!Idrivers/pnp/driver.c
|
|
||||||
!Edrivers/pnp/manager.c
|
|
||||||
!Edrivers/pnp/support.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Userspace IO devices</title>
|
|
||||||
!Edrivers/uio/uio.c
|
|
||||||
!Iinclude/linux/uio_driver.h
|
|
||||||
</sect1>
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="blkdev">
|
<chapter id="blkdev">
|
||||||
<title>Block Devices</title>
|
<title>Block Devices</title>
|
||||||
!Eblock/blk-core.c
|
!Eblock/blk-core.c
|
||||||
|
@ -381,275 +273,6 @@ X!Edrivers/pnp/system.c
|
||||||
!Edrivers/char/misc.c
|
!Edrivers/char/misc.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="parportdev">
|
|
||||||
<title>Parallel Port Devices</title>
|
|
||||||
!Iinclude/linux/parport.h
|
|
||||||
!Edrivers/parport/ieee1284.c
|
|
||||||
!Edrivers/parport/share.c
|
|
||||||
!Idrivers/parport/daisy.c
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="message_devices">
|
|
||||||
<title>Message-based devices</title>
|
|
||||||
<sect1><title>Fusion message devices</title>
|
|
||||||
!Edrivers/message/fusion/mptbase.c
|
|
||||||
!Idrivers/message/fusion/mptbase.c
|
|
||||||
!Edrivers/message/fusion/mptscsih.c
|
|
||||||
!Idrivers/message/fusion/mptscsih.c
|
|
||||||
!Idrivers/message/fusion/mptctl.c
|
|
||||||
!Idrivers/message/fusion/mptspi.c
|
|
||||||
!Idrivers/message/fusion/mptfc.c
|
|
||||||
!Idrivers/message/fusion/mptlan.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>I2O message devices</title>
|
|
||||||
!Iinclude/linux/i2o.h
|
|
||||||
!Idrivers/message/i2o/core.h
|
|
||||||
!Edrivers/message/i2o/iop.c
|
|
||||||
!Idrivers/message/i2o/iop.c
|
|
||||||
!Idrivers/message/i2o/config-osm.c
|
|
||||||
!Edrivers/message/i2o/exec-osm.c
|
|
||||||
!Idrivers/message/i2o/exec-osm.c
|
|
||||||
!Idrivers/message/i2o/bus-osm.c
|
|
||||||
!Edrivers/message/i2o/device.c
|
|
||||||
!Idrivers/message/i2o/device.c
|
|
||||||
!Idrivers/message/i2o/driver.c
|
|
||||||
!Idrivers/message/i2o/pci.c
|
|
||||||
!Idrivers/message/i2o/i2o_block.c
|
|
||||||
!Idrivers/message/i2o/i2o_scsi.c
|
|
||||||
!Idrivers/message/i2o/i2o_proc.c
|
|
||||||
</sect1>
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="snddev">
|
|
||||||
<title>Sound Devices</title>
|
|
||||||
!Iinclude/sound/core.h
|
|
||||||
!Esound/sound_core.c
|
|
||||||
!Iinclude/sound/pcm.h
|
|
||||||
!Esound/core/pcm.c
|
|
||||||
!Esound/core/device.c
|
|
||||||
!Esound/core/info.c
|
|
||||||
!Esound/core/rawmidi.c
|
|
||||||
!Esound/core/sound.c
|
|
||||||
!Esound/core/memory.c
|
|
||||||
!Esound/core/pcm_memory.c
|
|
||||||
!Esound/core/init.c
|
|
||||||
!Esound/core/isadma.c
|
|
||||||
!Esound/core/control.c
|
|
||||||
!Esound/core/pcm_lib.c
|
|
||||||
!Esound/core/hwdep.c
|
|
||||||
!Esound/core/pcm_native.c
|
|
||||||
!Esound/core/memalloc.c
|
|
||||||
<!-- FIXME: Removed for now since no structured comments in source
|
|
||||||
X!Isound/sound_firmware.c
|
|
||||||
-->
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="uart16x50">
|
|
||||||
<title>16x50 UART Driver</title>
|
|
||||||
!Iinclude/linux/serial_core.h
|
|
||||||
!Edrivers/serial/serial_core.c
|
|
||||||
!Edrivers/serial/8250.c
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="fbdev">
|
|
||||||
<title>Frame Buffer Library</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The frame buffer drivers depend heavily on four data structures.
|
|
||||||
These structures are declared in include/linux/fb.h. They are
|
|
||||||
fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs.
|
|
||||||
The last three can be made available to and from userland.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
fb_info defines the current state of a particular video card.
|
|
||||||
Inside fb_info, there exists a fb_ops structure which is a
|
|
||||||
collection of needed functions to make fbdev and fbcon work.
|
|
||||||
fb_info is only visible to the kernel.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
fb_var_screeninfo is used to describe the features of a video card
|
|
||||||
that are user defined. With fb_var_screeninfo, things such as
|
|
||||||
depth and the resolution may be defined.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The next structure is fb_fix_screeninfo. This defines the
|
|
||||||
properties of a card that are created when a mode is set and can't
|
|
||||||
be changed otherwise. A good example of this is the start of the
|
|
||||||
frame buffer memory. This "locks" the address of the frame buffer
|
|
||||||
memory, so that it cannot be changed or moved.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The last structure is fb_monospecs. In the old API, there was
|
|
||||||
little importance for fb_monospecs. This allowed for forbidden things
|
|
||||||
such as setting a mode of 800x600 on a fix frequency monitor. With
|
|
||||||
the new API, fb_monospecs prevents such things, and if used
|
|
||||||
correctly, can prevent a monitor from being cooked. fb_monospecs
|
|
||||||
will not be useful until kernels 2.5.x.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<sect1><title>Frame Buffer Memory</title>
|
|
||||||
!Edrivers/video/fbmem.c
|
|
||||||
</sect1>
|
|
||||||
<!--
|
|
||||||
<sect1><title>Frame Buffer Console</title>
|
|
||||||
X!Edrivers/video/console/fbcon.c
|
|
||||||
</sect1>
|
|
||||||
-->
|
|
||||||
<sect1><title>Frame Buffer Colormap</title>
|
|
||||||
!Edrivers/video/fbcmap.c
|
|
||||||
</sect1>
|
|
||||||
<!-- FIXME:
|
|
||||||
drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
|
|
||||||
out until somebody adds docs. KAO
|
|
||||||
<sect1><title>Frame Buffer Generic Functions</title>
|
|
||||||
X!Idrivers/video/fbgen.c
|
|
||||||
</sect1>
|
|
||||||
KAO -->
|
|
||||||
<sect1><title>Frame Buffer Video Mode Database</title>
|
|
||||||
!Idrivers/video/modedb.c
|
|
||||||
!Edrivers/video/modedb.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Frame Buffer Macintosh Video Mode Database</title>
|
|
||||||
!Edrivers/video/macmodes.c
|
|
||||||
</sect1>
|
|
||||||
<sect1><title>Frame Buffer Fonts</title>
|
|
||||||
<para>
|
|
||||||
Refer to the file drivers/video/console/fonts.c for more information.
|
|
||||||
</para>
|
|
||||||
<!-- FIXME: Removed for now since no structured comments in source
|
|
||||||
X!Idrivers/video/console/fonts.c
|
|
||||||
-->
|
|
||||||
</sect1>
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="input_subsystem">
|
|
||||||
<title>Input Subsystem</title>
|
|
||||||
!Iinclude/linux/input.h
|
|
||||||
!Edrivers/input/input.c
|
|
||||||
!Edrivers/input/ff-core.c
|
|
||||||
!Edrivers/input/ff-memless.c
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="spi">
|
|
||||||
<title>Serial Peripheral Interface (SPI)</title>
|
|
||||||
<para>
|
|
||||||
SPI is the "Serial Peripheral Interface", widely used with
|
|
||||||
embedded systems because it is a simple and efficient
|
|
||||||
interface: basically a multiplexed shift register.
|
|
||||||
Its three signal wires hold a clock (SCK, often in the range
|
|
||||||
of 1-20 MHz), a "Master Out, Slave In" (MOSI) data line, and
|
|
||||||
a "Master In, Slave Out" (MISO) data line.
|
|
||||||
SPI is a full duplex protocol; for each bit shifted out the
|
|
||||||
MOSI line (one per clock) another is shifted in on the MISO line.
|
|
||||||
Those bits are assembled into words of various sizes on the
|
|
||||||
way to and from system memory.
|
|
||||||
An additional chipselect line is usually active-low (nCS);
|
|
||||||
four signals are normally used for each peripheral, plus
|
|
||||||
sometimes an interrupt.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
The SPI bus facilities listed here provide a generalized
|
|
||||||
interface to declare SPI busses and devices, manage them
|
|
||||||
according to the standard Linux driver model, and perform
|
|
||||||
input/output operations.
|
|
||||||
At this time, only "master" side interfaces are supported,
|
|
||||||
where Linux talks to SPI peripherals and does not implement
|
|
||||||
such a peripheral itself.
|
|
||||||
(Interfaces to support implementing SPI slaves would
|
|
||||||
necessarily look different.)
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
The programming interface is structured around two kinds of driver,
|
|
||||||
and two kinds of device.
|
|
||||||
A "Controller Driver" abstracts the controller hardware, which may
|
|
||||||
be as simple as a set of GPIO pins or as complex as a pair of FIFOs
|
|
||||||
connected to dual DMA engines on the other side of the SPI shift
|
|
||||||
register (maximizing throughput). Such drivers bridge between
|
|
||||||
whatever bus they sit on (often the platform bus) and SPI, and
|
|
||||||
expose the SPI side of their device as a
|
|
||||||
<structname>struct spi_master</structname>.
|
|
||||||
SPI devices are children of that master, represented as a
|
|
||||||
<structname>struct spi_device</structname> and manufactured from
|
|
||||||
<structname>struct spi_board_info</structname> descriptors which
|
|
||||||
are usually provided by board-specific initialization code.
|
|
||||||
A <structname>struct spi_driver</structname> is called a
|
|
||||||
"Protocol Driver", and is bound to a spi_device using normal
|
|
||||||
driver model calls.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
The I/O model is a set of queued messages. Protocol drivers
|
|
||||||
submit one or more <structname>struct spi_message</structname>
|
|
||||||
objects, which are processed and completed asynchronously.
|
|
||||||
(There are synchronous wrappers, however.) Messages are
|
|
||||||
built from one or more <structname>struct spi_transfer</structname>
|
|
||||||
objects, each of which wraps a full duplex SPI transfer.
|
|
||||||
A variety of protocol tweaking options are needed, because
|
|
||||||
different chips adopt very different policies for how they
|
|
||||||
use the bits transferred with SPI.
|
|
||||||
</para>
|
|
||||||
!Iinclude/linux/spi/spi.h
|
|
||||||
!Fdrivers/spi/spi.c spi_register_board_info
|
|
||||||
!Edrivers/spi/spi.c
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="i2c">
|
|
||||||
<title>I<superscript>2</superscript>C and SMBus Subsystem</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
I<superscript>2</superscript>C (or without fancy typography, "I2C")
|
|
||||||
is an acronym for the "Inter-IC" bus, a simple bus protocol which is
|
|
||||||
widely used where low data rate communications suffice.
|
|
||||||
Since it's also a licensed trademark, some vendors use another
|
|
||||||
name (such as "Two-Wire Interface", TWI) for the same bus.
|
|
||||||
I2C only needs two signals (SCL for clock, SDA for data), conserving
|
|
||||||
board real estate and minimizing signal quality issues.
|
|
||||||
Most I2C devices use seven bit addresses, and bus speeds of up
|
|
||||||
to 400 kHz; there's a high speed extension (3.4 MHz) that's not yet
|
|
||||||
found wide use.
|
|
||||||
I2C is a multi-master bus; open drain signaling is used to
|
|
||||||
arbitrate between masters, as well as to handshake and to
|
|
||||||
synchronize clocks from slower clients.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The Linux I2C programming interfaces support only the master
|
|
||||||
side of bus interactions, not the slave side.
|
|
||||||
The programming interface is structured around two kinds of driver,
|
|
||||||
and two kinds of device.
|
|
||||||
An I2C "Adapter Driver" abstracts the controller hardware; it binds
|
|
||||||
to a physical device (perhaps a PCI device or platform_device) and
|
|
||||||
exposes a <structname>struct i2c_adapter</structname> representing
|
|
||||||
each I2C bus segment it manages.
|
|
||||||
On each I2C bus segment will be I2C devices represented by a
|
|
||||||
<structname>struct i2c_client</structname>. Those devices will
|
|
||||||
be bound to a <structname>struct i2c_driver</structname>,
|
|
||||||
which should follow the standard Linux driver model.
|
|
||||||
(At this writing, a legacy model is more widely used.)
|
|
||||||
There are functions to perform various I2C protocol operations; at
|
|
||||||
this writing all such functions are usable only from task context.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The System Management Bus (SMBus) is a sibling protocol. Most SMBus
|
|
||||||
systems are also I2C conformant. The electrical constraints are
|
|
||||||
tighter for SMBus, and it standardizes particular protocol messages
|
|
||||||
and idioms. Controllers that support I2C can also support most
|
|
||||||
SMBus operations, but SMBus controllers don't support all the protocol
|
|
||||||
options that an I2C controller will.
|
|
||||||
There are functions to perform various SMBus protocol operations,
|
|
||||||
either using I2C primitives or by issuing SMBus commands to
|
|
||||||
i2c_adapter devices which don't support those I2C operations.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
!Iinclude/linux/i2c.h
|
|
||||||
!Fdrivers/i2c/i2c-boardinfo.c i2c_register_board_info
|
|
||||||
!Edrivers/i2c/i2c-core.c
|
|
||||||
</chapter>
|
|
||||||
|
|
||||||
<chapter id="clk">
|
<chapter id="clk">
|
||||||
<title>Clock Framework</title>
|
<title>Clock Framework</title>
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,7 @@ into the rest of the kernel, none in performance critical paths:
|
||||||
- in fork and exit, to attach and detach a task from its cpuset.
|
- in fork and exit, to attach and detach a task from its cpuset.
|
||||||
- in sched_setaffinity, to mask the requested CPUs by what's
|
- in sched_setaffinity, to mask the requested CPUs by what's
|
||||||
allowed in that tasks cpuset.
|
allowed in that tasks cpuset.
|
||||||
- in sched.c migrate_all_tasks(), to keep migrating tasks within
|
- in sched.c migrate_live_tasks(), to keep migrating tasks within
|
||||||
the CPUs allowed by their cpuset, if possible.
|
the CPUs allowed by their cpuset, if possible.
|
||||||
- in the mbind and set_mempolicy system calls, to mask the requested
|
- in the mbind and set_mempolicy system calls, to mask the requested
|
||||||
Memory Nodes by what's allowed in that tasks cpuset.
|
Memory Nodes by what's allowed in that tasks cpuset.
|
||||||
|
@ -175,6 +175,10 @@ files describing that cpuset:
|
||||||
- mem_exclusive flag: is memory placement exclusive?
|
- mem_exclusive flag: is memory placement exclusive?
|
||||||
- mem_hardwall flag: is memory allocation hardwalled
|
- mem_hardwall flag: is memory allocation hardwalled
|
||||||
- memory_pressure: measure of how much paging pressure in cpuset
|
- memory_pressure: measure of how much paging pressure in cpuset
|
||||||
|
- memory_spread_page flag: if set, spread page cache evenly on allowed nodes
|
||||||
|
- memory_spread_slab flag: if set, spread slab cache evenly on allowed nodes
|
||||||
|
- sched_load_balance flag: if set, load balance within CPUs on that cpuset
|
||||||
|
- sched_relax_domain_level: the searching range when migrating tasks
|
||||||
|
|
||||||
In addition, the root cpuset only has the following file:
|
In addition, the root cpuset only has the following file:
|
||||||
- memory_pressure_enabled flag: compute memory_pressure?
|
- memory_pressure_enabled flag: compute memory_pressure?
|
||||||
|
@ -252,7 +256,7 @@ is causing.
|
||||||
|
|
||||||
This is useful both on tightly managed systems running a wide mix of
|
This is useful both on tightly managed systems running a wide mix of
|
||||||
submitted jobs, which may choose to terminate or re-prioritize jobs that
|
submitted jobs, which may choose to terminate or re-prioritize jobs that
|
||||||
are trying to use more memory than allowed on the nodes assigned them,
|
are trying to use more memory than allowed on the nodes assigned to them,
|
||||||
and with tightly coupled, long running, massively parallel scientific
|
and with tightly coupled, long running, massively parallel scientific
|
||||||
computing jobs that will dramatically fail to meet required performance
|
computing jobs that will dramatically fail to meet required performance
|
||||||
goals if they start to use more memory than allowed to them.
|
goals if they start to use more memory than allowed to them.
|
||||||
|
@ -378,7 +382,7 @@ as cpusets and sched_setaffinity.
|
||||||
The algorithmic cost of load balancing and its impact on key shared
|
The algorithmic cost of load balancing and its impact on key shared
|
||||||
kernel data structures such as the task list increases more than
|
kernel data structures such as the task list increases more than
|
||||||
linearly with the number of CPUs being balanced. So the scheduler
|
linearly with the number of CPUs being balanced. So the scheduler
|
||||||
has support to partition the systems CPUs into a number of sched
|
has support to partition the systems CPUs into a number of sched
|
||||||
domains such that it only load balances within each sched domain.
|
domains such that it only load balances within each sched domain.
|
||||||
Each sched domain covers some subset of the CPUs in the system;
|
Each sched domain covers some subset of the CPUs in the system;
|
||||||
no two sched domains overlap; some CPUs might not be in any sched
|
no two sched domains overlap; some CPUs might not be in any sched
|
||||||
|
@ -485,17 +489,22 @@ of CPUs allowed to a cpuset having 'sched_load_balance' enabled.
|
||||||
The internal kernel cpuset to scheduler interface passes from the
|
The internal kernel cpuset to scheduler interface passes from the
|
||||||
cpuset code to the scheduler code a partition of the load balanced
|
cpuset code to the scheduler code a partition of the load balanced
|
||||||
CPUs in the system. This partition is a set of subsets (represented
|
CPUs in the system. This partition is a set of subsets (represented
|
||||||
as an array of cpumask_t) of CPUs, pairwise disjoint, that cover all
|
as an array of struct cpumask) of CPUs, pairwise disjoint, that cover
|
||||||
the CPUs that must be load balanced.
|
all the CPUs that must be load balanced.
|
||||||
|
|
||||||
Whenever the 'sched_load_balance' flag changes, or CPUs come or go
|
The cpuset code builds a new such partition and passes it to the
|
||||||
from a cpuset with this flag enabled, or a cpuset with this flag
|
scheduler sched domain setup code, to have the sched domains rebuilt
|
||||||
enabled is removed, the cpuset code builds a new such partition and
|
as necessary, whenever:
|
||||||
passes it to the scheduler sched domain setup code, to have the sched
|
- the 'sched_load_balance' flag of a cpuset with non-empty CPUs changes,
|
||||||
domains rebuilt as necessary.
|
- or CPUs come or go from a cpuset with this flag enabled,
|
||||||
|
- or 'sched_relax_domain_level' value of a cpuset with non-empty CPUs
|
||||||
|
and with this flag enabled changes,
|
||||||
|
- or a cpuset with non-empty CPUs and with this flag enabled is removed,
|
||||||
|
- or a cpu is offlined/onlined.
|
||||||
|
|
||||||
This partition exactly defines what sched domains the scheduler should
|
This partition exactly defines what sched domains the scheduler should
|
||||||
setup - one sched domain for each element (cpumask_t) in the partition.
|
setup - one sched domain for each element (struct cpumask) in the
|
||||||
|
partition.
|
||||||
|
|
||||||
The scheduler remembers the currently active sched domain partitions.
|
The scheduler remembers the currently active sched domain partitions.
|
||||||
When the scheduler routine partition_sched_domains() is invoked from
|
When the scheduler routine partition_sched_domains() is invoked from
|
||||||
|
@ -559,7 +568,7 @@ domain, the largest value among those is used. Be careful, if one
|
||||||
requests 0 and others are -1 then 0 is used.
|
requests 0 and others are -1 then 0 is used.
|
||||||
|
|
||||||
Note that modifying this file will have both good and bad effects,
|
Note that modifying this file will have both good and bad effects,
|
||||||
and whether it is acceptable or not will be depend on your situation.
|
and whether it is acceptable or not depends on your situation.
|
||||||
Don't modify this file if you are not sure.
|
Don't modify this file if you are not sure.
|
||||||
|
|
||||||
If your situation is:
|
If your situation is:
|
||||||
|
@ -600,19 +609,15 @@ to allocate a page of memory for that task.
|
||||||
|
|
||||||
If a cpuset has its 'cpus' modified, then each task in that cpuset
|
If a cpuset has its 'cpus' modified, then each task in that cpuset
|
||||||
will have its allowed CPU placement changed immediately. Similarly,
|
will have its allowed CPU placement changed immediately. Similarly,
|
||||||
if a tasks pid is written to a cpusets 'tasks' file, in either its
|
if a tasks pid is written to another cpusets 'tasks' file, then its
|
||||||
current cpuset or another cpuset, then its allowed CPU placement is
|
allowed CPU placement is changed immediately. If such a task had been
|
||||||
changed immediately. If such a task had been bound to some subset
|
bound to some subset of its cpuset using the sched_setaffinity() call,
|
||||||
of its cpuset using the sched_setaffinity() call, the task will be
|
the task will be allowed to run on any CPU allowed in its new cpuset,
|
||||||
allowed to run on any CPU allowed in its new cpuset, negating the
|
negating the effect of the prior sched_setaffinity() call.
|
||||||
affect of the prior sched_setaffinity() call.
|
|
||||||
|
|
||||||
In summary, the memory placement of a task whose cpuset is changed is
|
In summary, the memory placement of a task whose cpuset is changed is
|
||||||
updated by the kernel, on the next allocation of a page for that task,
|
updated by the kernel, on the next allocation of a page for that task,
|
||||||
but the processor placement is not updated, until that tasks pid is
|
and the processor placement is updated immediately.
|
||||||
rewritten to the 'tasks' file of its cpuset. This is done to avoid
|
|
||||||
impacting the scheduler code in the kernel with a check for changes
|
|
||||||
in a tasks processor placement.
|
|
||||||
|
|
||||||
Normally, once a page is allocated (given a physical page
|
Normally, once a page is allocated (given a physical page
|
||||||
of main memory) then that page stays on whatever node it
|
of main memory) then that page stays on whatever node it
|
||||||
|
@ -681,10 +686,14 @@ and then start a subshell 'sh' in that cpuset:
|
||||||
# The next line should display '/Charlie'
|
# The next line should display '/Charlie'
|
||||||
cat /proc/self/cpuset
|
cat /proc/self/cpuset
|
||||||
|
|
||||||
In the future, a C library interface to cpusets will likely be
|
There are ways to query or modify cpusets:
|
||||||
available. For now, the only way to query or modify cpusets is
|
- via the cpuset file system directly, using the various cd, mkdir, echo,
|
||||||
via the cpuset file system, using the various cd, mkdir, echo, cat,
|
cat, rmdir commands from the shell, or their equivalent from C.
|
||||||
rmdir commands from the shell, or their equivalent from C.
|
- via the C library libcpuset.
|
||||||
|
- via the C library libcgroup.
|
||||||
|
(http://sourceforge.net/proects/libcg/)
|
||||||
|
- via the python application cset.
|
||||||
|
(http://developer.novell.com/wiki/index.php/Cpuset)
|
||||||
|
|
||||||
The sched_setaffinity calls can also be done at the shell prompt using
|
The sched_setaffinity calls can also be done at the shell prompt using
|
||||||
SGI's runon or Robert Love's taskset. The mbind and set_mempolicy
|
SGI's runon or Robert Love's taskset. The mbind and set_mempolicy
|
||||||
|
@ -756,7 +765,7 @@ mount -t cpuset X /dev/cpuset
|
||||||
|
|
||||||
is equivalent to
|
is equivalent to
|
||||||
|
|
||||||
mount -t cgroup -ocpuset X /dev/cpuset
|
mount -t cgroup -ocpuset,noprefix X /dev/cpuset
|
||||||
echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent
|
echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent
|
||||||
|
|
||||||
2.2 Adding/removing cpus
|
2.2 Adding/removing cpus
|
||||||
|
|
|
@ -127,9 +127,11 @@ void unlock_device(struct device * dev);
|
||||||
Attributes
|
Attributes
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
struct device_attribute {
|
struct device_attribute {
|
||||||
struct attribute attr;
|
struct attribute attr;
|
||||||
ssize_t (*show)(struct device * dev, char * buf, size_t count, loff_t off);
|
ssize_t (*show)(struct device *dev, struct device_attribute *attr,
|
||||||
ssize_t (*store)(struct device * dev, const char * buf, size_t count, loff_t off);
|
char *buf);
|
||||||
|
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
|
||||||
|
const char *buf, size_t count);
|
||||||
};
|
};
|
||||||
|
|
||||||
Attributes of devices can be exported via drivers using a simple
|
Attributes of devices can be exported via drivers using a simple
|
||||||
|
|
|
@ -1,205 +0,0 @@
|
||||||
This README escorted the skystar2-driver rewriting procedure. It describes the
|
|
||||||
state of the new flexcop-driver set and some internals are written down here
|
|
||||||
too.
|
|
||||||
|
|
||||||
This document hopefully describes things about the flexcop and its
|
|
||||||
device-offsprings. Goal was to write an easy-to-write and easy-to-read set of
|
|
||||||
drivers based on the skystar2.c and other information.
|
|
||||||
|
|
||||||
Remark: flexcop-pci.c was a copy of skystar2.c, but every line has been
|
|
||||||
touched and rewritten.
|
|
||||||
|
|
||||||
History & News
|
|
||||||
==============
|
|
||||||
2005-04-01 - correct USB ISOC transfers (thanks to Vadim Catana)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
General coding processing
|
|
||||||
=========================
|
|
||||||
|
|
||||||
We should proceed as follows (as long as no one complains):
|
|
||||||
|
|
||||||
0) Think before start writing code!
|
|
||||||
|
|
||||||
1) rewriting the skystar2.c with the help of the flexcop register descriptions
|
|
||||||
and splitting up the files to a pci-bus-part and a flexcop-part.
|
|
||||||
The new driver will be called b2c2-flexcop-pci.ko/b2c2-flexcop-usb.ko for the
|
|
||||||
device-specific part and b2c2-flexcop.ko for the common flexcop-functions.
|
|
||||||
|
|
||||||
2) Search for errors in the leftover of flexcop-pci.c (compare with pluto2.c
|
|
||||||
and other pci drivers)
|
|
||||||
|
|
||||||
3) make some beautification (see 'Improvements when rewriting (refactoring) is
|
|
||||||
done')
|
|
||||||
|
|
||||||
4) Testing the new driver and maybe substitute the skystar2.c with it, to reach
|
|
||||||
a wider tester audience.
|
|
||||||
|
|
||||||
5) creating an usb-bus-part using the already written flexcop code for the pci
|
|
||||||
card.
|
|
||||||
|
|
||||||
Idea: create a kernel-object for the flexcop and export all important
|
|
||||||
functions. This option saves kernel-memory, but maybe a lot of functions have
|
|
||||||
to be exported to kernel namespace.
|
|
||||||
|
|
||||||
|
|
||||||
Current situation
|
|
||||||
=================
|
|
||||||
|
|
||||||
0) Done :)
|
|
||||||
1) Done (some minor issues left)
|
|
||||||
2) Done
|
|
||||||
3) Not ready yet, more information is necessary
|
|
||||||
4) next to be done (see the table below)
|
|
||||||
5) USB driver is working (yes, there are some minor issues)
|
|
||||||
|
|
||||||
What seems to be ready?
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
1) Rewriting
|
|
||||||
1a) i2c is cut off from the flexcop-pci.c and seems to work
|
|
||||||
1b) moved tuner and demod stuff from flexcop-pci.c to flexcop-tuner-fe.c
|
|
||||||
1c) moved lnb and diseqc stuff from flexcop-pci.c to flexcop-tuner-fe.c
|
|
||||||
1e) eeprom (reading MAC address)
|
|
||||||
1d) sram (no dynamic sll size detection (commented out) (using default as JJ told me))
|
|
||||||
1f) misc. register accesses for reading parameters (e.g. resetting, revision)
|
|
||||||
1g) pid/mac filter (flexcop-hw-filter.c)
|
|
||||||
1i) dvb-stuff initialization in flexcop.c (done)
|
|
||||||
1h) dma stuff (now just using the size-irq, instead of all-together, to be done)
|
|
||||||
1j) remove flexcop initialization from flexcop-pci.c completely (done)
|
|
||||||
1l) use a well working dma IRQ method (done, see 'Known bugs and problems and TODO')
|
|
||||||
1k) cleanup flexcop-files (remove unused EXPORT_SYMBOLs, make static from
|
|
||||||
non-static where possible, moved code to proper places)
|
|
||||||
|
|
||||||
2) Search for errors in the leftover of flexcop-pci.c (partially done)
|
|
||||||
5a) add MAC address reading
|
|
||||||
5c) feeding of ISOC data to the software demux (format of the isochronous data
|
|
||||||
and speed optimization, no real error) (thanks to Vadim Catana)
|
|
||||||
|
|
||||||
What to do in the near future?
|
|
||||||
--------------------------------------
|
|
||||||
(no special order here)
|
|
||||||
|
|
||||||
5) USB driver
|
|
||||||
5b) optimize isoc-transfer (submitting/killing isoc URBs when transfer is starting)
|
|
||||||
|
|
||||||
Testing changes
|
|
||||||
---------------
|
|
||||||
|
|
||||||
O = item is working
|
|
||||||
P = item is partially working
|
|
||||||
X = item is not working
|
|
||||||
N = item does not apply here
|
|
||||||
<empty field> = item need to be examined
|
|
||||||
|
|
||||||
| PCI | USB
|
|
||||||
item | mt352 | nxt2002 | stv0299 | mt312 | mt352 | nxt2002 | stv0299 | mt312
|
|
||||||
-------+-------+---------+---------+-------+-------+---------+---------+-------
|
|
||||||
1a) | O | | | | N | N | N | N
|
|
||||||
1b) | O | | | | | | O |
|
|
||||||
1c) | N | N | | | N | N | O |
|
|
||||||
1d) | O | O
|
|
||||||
1e) | O | O
|
|
||||||
1f) | P
|
|
||||||
1g) | O
|
|
||||||
1h) | P |
|
|
||||||
1i) | O | N
|
|
||||||
1j) | O | N
|
|
||||||
1l) | O | N
|
|
||||||
2) | O | N
|
|
||||||
5a) | N | O
|
|
||||||
5b)* | N |
|
|
||||||
5c) | N | O
|
|
||||||
|
|
||||||
* - not done yet
|
|
||||||
|
|
||||||
Known bugs and problems and TODO
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
1g/h/l) when pid filtering is enabled on the pci card
|
|
||||||
|
|
||||||
DMA usage currently:
|
|
||||||
The DMA is splitted in 2 equal-sized subbuffers. The Flexcop writes to first
|
|
||||||
address and triggers an IRQ when it's full and starts writing to the second
|
|
||||||
address. When the second address is full, the IRQ is triggered again, and
|
|
||||||
the flexcop writes to first address again, and so on.
|
|
||||||
The buffersize of each address is currently 640*188 bytes.
|
|
||||||
|
|
||||||
Problem is, when using hw-pid-filtering and doing some low-bandwidth
|
|
||||||
operation (like scanning) the buffers won't be filled enough to trigger
|
|
||||||
the IRQ. That's why:
|
|
||||||
|
|
||||||
When PID filtering is activated, the timer IRQ is used. Every 1.97 ms the IRQ
|
|
||||||
is triggered. Is the current write address of DMA1 different to the one
|
|
||||||
during the last IRQ, then the data is passed to the demuxer.
|
|
||||||
|
|
||||||
There is an additional DMA-IRQ-method: packet count IRQ. This isn't
|
|
||||||
implemented correctly yet.
|
|
||||||
|
|
||||||
The solution is to disable HW PID filtering, but I don't know how the DVB
|
|
||||||
API software demux behaves on slow systems with 45MBit/s TS.
|
|
||||||
|
|
||||||
Solved bugs :)
|
|
||||||
--------------
|
|
||||||
1g) pid-filtering (somehow pid index 4 and 5 (EMM_PID and ECM_PID) aren't
|
|
||||||
working)
|
|
||||||
SOLUTION: also index 0 was affected, because net_translation is done for
|
|
||||||
these indexes by default
|
|
||||||
|
|
||||||
5b) isochronous transfer does only work in the first attempt (for the Sky2PC
|
|
||||||
USB, Air2PC is working) SOLUTION: the flexcop was going asleep and never really
|
|
||||||
woke up again (don't know if this need fixes, see
|
|
||||||
flexcop-fe-tuner.c:flexcop_sleep)
|
|
||||||
|
|
||||||
NEWS: when the driver is loaded and unloaded and loaded again (w/o doing
|
|
||||||
anything in the while the driver is loaded the first time), no transfers take
|
|
||||||
place anymore.
|
|
||||||
|
|
||||||
Improvements when rewriting (refactoring) is done
|
|
||||||
=================================================
|
|
||||||
|
|
||||||
- split sleeping of the flexcop (misc_204.ACPI3_sig = 1;) from lnb_control
|
|
||||||
(enable sleeping for other demods than dvb-s)
|
|
||||||
- add support for CableStar (stv0297 Microtune 203x/ALPS) (almost done, incompatibilities with the Nexus-CA)
|
|
||||||
|
|
||||||
Debugging
|
|
||||||
---------
|
|
||||||
- add verbose debugging to skystar2.c (dump the reg_dw_data) and compare it
|
|
||||||
with this flexcop, this is important, because i2c is now using the
|
|
||||||
flexcop_ibi_value union from flexcop-reg.h (do you have a better idea for
|
|
||||||
that, please tell us so).
|
|
||||||
|
|
||||||
Everything which is identical in the following table, can be put into a common
|
|
||||||
flexcop-module.
|
|
||||||
|
|
||||||
PCI USB
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Different:
|
|
||||||
Register access: accessing IO memory USB control message
|
|
||||||
I2C bus: I2C bus of the FC USB control message
|
|
||||||
Data transfer: DMA isochronous transfer
|
|
||||||
EEPROM transfer: through i2c bus not clear yet
|
|
||||||
|
|
||||||
Identical:
|
|
||||||
Streaming: accessing registers
|
|
||||||
PID Filtering: accessing registers
|
|
||||||
Sram destinations: accessing registers
|
|
||||||
Tuner/Demod: I2C bus
|
|
||||||
DVB-stuff: can be written for common use
|
|
||||||
|
|
||||||
Acknowledgements (just for the rewriting part)
|
|
||||||
================
|
|
||||||
|
|
||||||
Bjarne Steinsbo thought a lot in the first place of the pci part for this code
|
|
||||||
sharing idea.
|
|
||||||
|
|
||||||
Andreas Oberritter for providing a recent PCI initialization template
|
|
||||||
(pluto2.c).
|
|
||||||
|
|
||||||
Boleslaw Ciesielski for pointing out a problem with firmware loader.
|
|
||||||
|
|
||||||
Vadim Catana for correcting the USB transfer.
|
|
||||||
|
|
||||||
comments, critics and ideas to linux-dvb@linuxtv.org.
|
|
|
@ -1,5 +1,5 @@
|
||||||
How to set up the Technisat devices
|
How to set up the Technisat/B2C2 Flexcop devices
|
||||||
===================================
|
================================================
|
||||||
|
|
||||||
1) Find out what device you have
|
1) Find out what device you have
|
||||||
================================
|
================================
|
||||||
|
@ -16,54 +16,60 @@ DVB: registering frontend 0 (Conexant CX24123/CX24109)...
|
||||||
|
|
||||||
If the Technisat is the only TV device in your box get rid of unnecessary modules and check this one:
|
If the Technisat is the only TV device in your box get rid of unnecessary modules and check this one:
|
||||||
"Multimedia devices" => "Customise analog and hybrid tuner modules to build"
|
"Multimedia devices" => "Customise analog and hybrid tuner modules to build"
|
||||||
In this directory uncheck every driver which is activated there.
|
In this directory uncheck every driver which is activated there (except "Simple tuner support" for case 9 only).
|
||||||
|
|
||||||
Then please activate:
|
Then please activate:
|
||||||
2a) Main module part:
|
2a) Main module part:
|
||||||
|
|
||||||
a.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters"
|
a.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters"
|
||||||
b.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC PCI" in case of a PCI card OR
|
b.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC PCI" in case of a PCI card
|
||||||
|
OR
|
||||||
c.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC USB" in case of an USB 1.1 adapter
|
c.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC USB" in case of an USB 1.1 adapter
|
||||||
d.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Enable debug for the B2C2 FlexCop drivers"
|
d.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Enable debug for the B2C2 FlexCop drivers"
|
||||||
Notice: d.) is helpful for troubleshooting
|
Notice: d.) is helpful for troubleshooting
|
||||||
|
|
||||||
2b) Frontend module part:
|
2b) Frontend module part:
|
||||||
|
|
||||||
1.) Revision 2.3:
|
1.) SkyStar DVB-S Revision 2.3:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink VP310/MT312/ZL10313 based"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink VP310/MT312/ZL10313 based"
|
||||||
|
|
||||||
2.) Revision 2.6:
|
2.) SkyStar DVB-S Revision 2.6:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0299 based"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0299 based"
|
||||||
|
|
||||||
3.) Revision 2.7:
|
3.) SkyStar DVB-S Revision 2.7:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "Samsung S5H1420 based"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "Samsung S5H1420 based"
|
||||||
c.)"Multimedia devices" => "Customise DVB frontends" => "Integrant ITD1000 Zero IF tuner for DVB-S/DSS"
|
c.)"Multimedia devices" => "Customise DVB frontends" => "Integrant ITD1000 Zero IF tuner for DVB-S/DSS"
|
||||||
d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller"
|
d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller"
|
||||||
|
|
||||||
4.) Revision 2.8:
|
4.) SkyStar DVB-S Revision 2.8:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24113/CX24128 tuner for DVB-S/DSS"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24113/CX24128 tuner for DVB-S/DSS"
|
||||||
c.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24123 based"
|
c.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24123 based"
|
||||||
d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller"
|
d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller"
|
||||||
|
|
||||||
5.) DVB-T card:
|
5.) AirStar DVB-T card:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink MT352 based"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink MT352 based"
|
||||||
|
|
||||||
6.) DVB-C card:
|
6.) CableStar DVB-C card:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0297 based"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0297 based"
|
||||||
|
|
||||||
7.) ATSC card 1st generation:
|
7.) AirStar ATSC card 1st generation:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "Broadcom BCM3510"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "Broadcom BCM3510"
|
||||||
|
|
||||||
8.) ATSC card 2nd generation:
|
8.) AirStar ATSC card 2nd generation:
|
||||||
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
b.)"Multimedia devices" => "Customise DVB frontends" => "NxtWave Communications NXT2002/NXT2004 based"
|
b.)"Multimedia devices" => "Customise DVB frontends" => "NxtWave Communications NXT2002/NXT2004 based"
|
||||||
c.)"Multimedia devices" => "Customise DVB frontends" => "LG Electronics LGDT3302/LGDT3303 based"
|
c.)"Multimedia devices" => "Customise DVB frontends" => "Generic I2C PLL based tuners"
|
||||||
|
|
||||||
Author: Uwe Bugla <uwe.bugla@gmx.de> December 2008
|
9.) AirStar ATSC card 3rd generation:
|
||||||
|
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
|
||||||
|
b.)"Multimedia devices" => "Customise DVB frontends" => "LG Electronics LGDT3302/LGDT3303 based"
|
||||||
|
c.)"Multimedia devices" => "Customise analog and hybrid tuner modules to build" => "Simple tuner support"
|
||||||
|
|
||||||
|
Author: Uwe Bugla <uwe.bugla@gmx.de> February 2009
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
sysfs - _The_ filesystem for exporting kernel objects.
|
sysfs - _The_ filesystem for exporting kernel objects.
|
||||||
|
|
||||||
Patrick Mochel <mochel@osdl.org>
|
Patrick Mochel <mochel@osdl.org>
|
||||||
|
Mike Murphy <mamurph@cs.clemson.edu>
|
||||||
|
|
||||||
10 January 2003
|
Revised: 22 February 2009
|
||||||
|
Original: 10 January 2003
|
||||||
|
|
||||||
|
|
||||||
What it is:
|
What it is:
|
||||||
|
@ -64,12 +66,13 @@ An attribute definition is simply:
|
||||||
|
|
||||||
struct attribute {
|
struct attribute {
|
||||||
char * name;
|
char * name;
|
||||||
|
struct module *owner;
|
||||||
mode_t mode;
|
mode_t mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int sysfs_create_file(struct kobject * kobj, struct attribute * attr);
|
int sysfs_create_file(struct kobject * kobj, const struct attribute * attr);
|
||||||
void sysfs_remove_file(struct kobject * kobj, struct attribute * attr);
|
void sysfs_remove_file(struct kobject * kobj, const struct attribute * attr);
|
||||||
|
|
||||||
|
|
||||||
A bare attribute contains no means to read or write the value of the
|
A bare attribute contains no means to read or write the value of the
|
||||||
|
@ -80,9 +83,11 @@ a specific object type.
|
||||||
For example, the driver model defines struct device_attribute like:
|
For example, the driver model defines struct device_attribute like:
|
||||||
|
|
||||||
struct device_attribute {
|
struct device_attribute {
|
||||||
struct attribute attr;
|
struct attribute attr;
|
||||||
ssize_t (*show)(struct device * dev, char * buf);
|
ssize_t (*show)(struct device *dev, struct device_attribute *attr,
|
||||||
ssize_t (*store)(struct device * dev, const char * buf);
|
char *buf);
|
||||||
|
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
|
||||||
|
const char *buf, size_t count);
|
||||||
};
|
};
|
||||||
|
|
||||||
int device_create_file(struct device *, struct device_attribute *);
|
int device_create_file(struct device *, struct device_attribute *);
|
||||||
|
@ -90,12 +95,8 @@ void device_remove_file(struct device *, struct device_attribute *);
|
||||||
|
|
||||||
It also defines this helper for defining device attributes:
|
It also defines this helper for defining device attributes:
|
||||||
|
|
||||||
#define DEVICE_ATTR(_name, _mode, _show, _store) \
|
#define DEVICE_ATTR(_name, _mode, _show, _store) \
|
||||||
struct device_attribute dev_attr_##_name = { \
|
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
|
||||||
.attr = {.name = __stringify(_name) , .mode = _mode }, \
|
|
||||||
.show = _show, \
|
|
||||||
.store = _store, \
|
|
||||||
};
|
|
||||||
|
|
||||||
For example, declaring
|
For example, declaring
|
||||||
|
|
||||||
|
@ -107,9 +108,9 @@ static struct device_attribute dev_attr_foo = {
|
||||||
.attr = {
|
.attr = {
|
||||||
.name = "foo",
|
.name = "foo",
|
||||||
.mode = S_IWUSR | S_IRUGO,
|
.mode = S_IWUSR | S_IRUGO,
|
||||||
|
.show = show_foo,
|
||||||
|
.store = store_foo,
|
||||||
},
|
},
|
||||||
.show = show_foo,
|
|
||||||
.store = store_foo,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,10 +162,12 @@ To read or write attributes, show() or store() methods must be
|
||||||
specified when declaring the attribute. The method types should be as
|
specified when declaring the attribute. The method types should be as
|
||||||
simple as those defined for device attributes:
|
simple as those defined for device attributes:
|
||||||
|
|
||||||
ssize_t (*show)(struct device * dev, char * buf);
|
ssize_t (*show)(struct device * dev, struct device_attribute * attr,
|
||||||
ssize_t (*store)(struct device * dev, const char * buf);
|
char * buf);
|
||||||
|
ssize_t (*store)(struct device * dev, struct device_attribute * attr,
|
||||||
|
const char * buf);
|
||||||
|
|
||||||
IOW, they should take only an object and a buffer as parameters.
|
IOW, they should take only an object, an attribute, and a buffer as parameters.
|
||||||
|
|
||||||
|
|
||||||
sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the
|
sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the
|
||||||
|
@ -299,14 +302,16 @@ The following interface layers currently exist in sysfs:
|
||||||
Structure:
|
Structure:
|
||||||
|
|
||||||
struct device_attribute {
|
struct device_attribute {
|
||||||
struct attribute attr;
|
struct attribute attr;
|
||||||
ssize_t (*show)(struct device * dev, char * buf);
|
ssize_t (*show)(struct device *dev, struct device_attribute *attr,
|
||||||
ssize_t (*store)(struct device * dev, const char * buf);
|
char *buf);
|
||||||
|
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
|
||||||
|
const char *buf, size_t count);
|
||||||
};
|
};
|
||||||
|
|
||||||
Declaring:
|
Declaring:
|
||||||
|
|
||||||
DEVICE_ATTR(_name, _str, _mode, _show, _store);
|
DEVICE_ATTR(_name, _mode, _show, _store);
|
||||||
|
|
||||||
Creation/Removal:
|
Creation/Removal:
|
||||||
|
|
||||||
|
@ -342,7 +347,8 @@ Structure:
|
||||||
struct driver_attribute {
|
struct driver_attribute {
|
||||||
struct attribute attr;
|
struct attribute attr;
|
||||||
ssize_t (*show)(struct device_driver *, char * buf);
|
ssize_t (*show)(struct device_driver *, char * buf);
|
||||||
ssize_t (*store)(struct device_driver *, const char * buf);
|
ssize_t (*store)(struct device_driver *, const char * buf,
|
||||||
|
size_t count);
|
||||||
};
|
};
|
||||||
|
|
||||||
Declaring:
|
Declaring:
|
||||||
|
|
|
@ -114,7 +114,7 @@ In addition, the following text indicates that the option:
|
||||||
Parameters denoted with BOOT are actually interpreted by the boot
|
Parameters denoted with BOOT are actually interpreted by the boot
|
||||||
loader, and have no meaning to the kernel directly.
|
loader, and have no meaning to the kernel directly.
|
||||||
Do not modify the syntax of boot loader parameters without extreme
|
Do not modify the syntax of boot loader parameters without extreme
|
||||||
need or coordination with <Documentation/x86/i386/boot.txt>.
|
need or coordination with <Documentation/x86/boot.txt>.
|
||||||
|
|
||||||
There are also arch-specific kernel-parameters not documented here.
|
There are also arch-specific kernel-parameters not documented here.
|
||||||
See for example <Documentation/x86/x86_64/boot-options.txt>.
|
See for example <Documentation/x86/x86_64/boot-options.txt>.
|
||||||
|
@ -134,7 +134,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
acpi= [HW,ACPI,X86-64,i386]
|
acpi= [HW,ACPI,X86-64,i386]
|
||||||
Advanced Configuration and Power Interface
|
Advanced Configuration and Power Interface
|
||||||
Format: { force | off | ht | strict | noirq }
|
Format: { force | off | ht | strict | noirq | rsdt }
|
||||||
force -- enable ACPI if default was off
|
force -- enable ACPI if default was off
|
||||||
off -- disable ACPI if default was on
|
off -- disable ACPI if default was on
|
||||||
noirq -- do not use ACPI for IRQ routing
|
noirq -- do not use ACPI for IRQ routing
|
||||||
|
@ -868,8 +868,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
icn= [HW,ISDN]
|
icn= [HW,ISDN]
|
||||||
Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]]
|
Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]]
|
||||||
|
|
||||||
ide= [HW] (E)IDE subsystem
|
ide-core.nodma= [HW] (E)IDE subsystem
|
||||||
Format: ide=nodma or ide=doubler
|
Format: =0.0 to prevent dma on hda, =0.1 hdb =1.0 hdc
|
||||||
|
.vlb_clock .pci_clock .noflush .noprobe .nowerr .cdrom
|
||||||
|
.chs .ignore_cable are additional options
|
||||||
See Documentation/ide/ide.txt.
|
See Documentation/ide/ide.txt.
|
||||||
|
|
||||||
idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
|
idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
|
||||||
|
@ -2449,7 +2451,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
See Documentation/fb/modedb.txt.
|
See Documentation/fb/modedb.txt.
|
||||||
|
|
||||||
vga= [BOOT,X86-32] Select a particular video mode
|
vga= [BOOT,X86-32] Select a particular video mode
|
||||||
See Documentation/x86/i386/boot.txt and
|
See Documentation/x86/boot.txt and
|
||||||
Documentation/svga.txt.
|
Documentation/svga.txt.
|
||||||
Use vga=ask for menu.
|
Use vga=ask for menu.
|
||||||
This is actually a boot loader parameter; the value is
|
This is actually a boot loader parameter; the value is
|
||||||
|
|
|
@ -4,7 +4,7 @@ Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc.
|
The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc.
|
||||||
series of products) supports iSCSI acceleration and iSCSI Direct Data Placement
|
series of products) support iSCSI acceleration and iSCSI Direct Data Placement
|
||||||
(DDP) where the hardware handles the expensive byte touching operations, such
|
(DDP) where the hardware handles the expensive byte touching operations, such
|
||||||
as CRC computation and verification, and direct DMA to the final host memory
|
as CRC computation and verification, and direct DMA to the final host memory
|
||||||
destination:
|
destination:
|
||||||
|
@ -31,9 +31,9 @@ destination:
|
||||||
the TCP segments onto the wire. It handles TCP retransmission if
|
the TCP segments onto the wire. It handles TCP retransmission if
|
||||||
needed.
|
needed.
|
||||||
|
|
||||||
On receving, S3 h/w recovers the iSCSI PDU by reassembling TCP
|
On receiving, S3 h/w recovers the iSCSI PDU by reassembling TCP
|
||||||
segments, separating the header and data, calculating and verifying
|
segments, separating the header and data, calculating and verifying
|
||||||
the digests, then forwards the header to the host. The payload data,
|
the digests, then forwarding the header to the host. The payload data,
|
||||||
if possible, will be directly placed into the pre-posted host DDP
|
if possible, will be directly placed into the pre-posted host DDP
|
||||||
buffer. Otherwise, the payload data will be sent to the host too.
|
buffer. Otherwise, the payload data will be sent to the host too.
|
||||||
|
|
||||||
|
@ -68,9 +68,8 @@ The following steps need to be taken to accelerates the open-iscsi initiator:
|
||||||
sure the ip address is unique in the network.
|
sure the ip address is unique in the network.
|
||||||
|
|
||||||
3. edit /etc/iscsi/iscsid.conf
|
3. edit /etc/iscsi/iscsid.conf
|
||||||
The default setting for MaxRecvDataSegmentLength (131072) is too big,
|
The default setting for MaxRecvDataSegmentLength (131072) is too big;
|
||||||
replace "node.conn[0].iscsi.MaxRecvDataSegmentLength" to be a value no
|
replace with a value no bigger than 15360 (for example 8192):
|
||||||
bigger than 15360 (for example 8192):
|
|
||||||
|
|
||||||
node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192
|
node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192
|
||||||
|
|
||||||
|
|
|
@ -2464,7 +2464,7 @@ S: Maintained
|
||||||
|
|
||||||
ISDN SUBSYSTEM
|
ISDN SUBSYSTEM
|
||||||
P: Karsten Keil
|
P: Karsten Keil
|
||||||
M: kkeil@suse.de
|
M: isdn@linux-pingi.de
|
||||||
L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
|
L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
|
||||||
W: http://www.isdn4linux.de
|
W: http://www.isdn4linux.de
|
||||||
T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
|
T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
|
||||||
|
@ -3334,8 +3334,8 @@ P: Jeremy Fitzhardinge
|
||||||
M: jeremy@xensource.com
|
M: jeremy@xensource.com
|
||||||
P: Chris Wright
|
P: Chris Wright
|
||||||
M: chrisw@sous-sol.org
|
M: chrisw@sous-sol.org
|
||||||
P: Zachary Amsden
|
P: Alok Kataria
|
||||||
M: zach@vmware.com
|
M: akataria@vmware.com
|
||||||
P: Rusty Russell
|
P: Rusty Russell
|
||||||
M: rusty@rustcorp.com.au
|
M: rusty@rustcorp.com.au
|
||||||
L: virtualization@lists.osdl.org
|
L: virtualization@lists.osdl.org
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 29
|
SUBLEVEL = 29
|
||||||
EXTRAVERSION = -rc5
|
EXTRAVERSION = -rc7
|
||||||
NAME = Erotic Pickled Herring
|
NAME = Erotic Pickled Herring
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
2
README
2
README
|
@ -188,7 +188,7 @@ CONFIGURING the kernel:
|
||||||
values to random values.
|
values to random values.
|
||||||
|
|
||||||
You can find more information on using the Linux kernel config tools
|
You can find more information on using the Linux kernel config tools
|
||||||
in Documentation/kbuild/make-configs.txt.
|
in Documentation/kbuild/kconfig.txt.
|
||||||
|
|
||||||
NOTES on "make config":
|
NOTES on "make config":
|
||||||
- having unnecessary drivers will make the kernel bigger, and can
|
- having unnecessary drivers will make the kernel bigger, and can
|
||||||
|
|
|
@ -111,6 +111,7 @@ ENTRY(mcount)
|
||||||
.globl mcount_call
|
.globl mcount_call
|
||||||
mcount_call:
|
mcount_call:
|
||||||
bl ftrace_stub
|
bl ftrace_stub
|
||||||
|
ldr lr, [fp, #-4] @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
ENTRY(ftrace_caller)
|
ENTRY(ftrace_caller)
|
||||||
|
@ -122,6 +123,7 @@ ENTRY(ftrace_caller)
|
||||||
.globl ftrace_call
|
.globl ftrace_call
|
||||||
ftrace_call:
|
ftrace_call:
|
||||||
bl ftrace_stub
|
bl ftrace_stub
|
||||||
|
ldr lr, [fp, #-4] @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -133,6 +135,7 @@ ENTRY(mcount)
|
||||||
adr r0, ftrace_stub
|
adr r0, ftrace_stub
|
||||||
cmp r0, r2
|
cmp r0, r2
|
||||||
bne trace
|
bne trace
|
||||||
|
ldr lr, [fp, #-4] @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
trace:
|
trace:
|
||||||
|
@ -141,6 +144,7 @@ trace:
|
||||||
sub r0, r0, #MCOUNT_INSN_SIZE
|
sub r0, r0, #MCOUNT_INSN_SIZE
|
||||||
mov lr, pc
|
mov lr, pc
|
||||||
mov pc, r2
|
mov pc, r2
|
||||||
|
mov lr, r1 @ restore lr
|
||||||
ldmia sp!, {r0-r3, pc}
|
ldmia sp!, {r0-r3, pc}
|
||||||
|
|
||||||
#endif /* CONFIG_DYNAMIC_FTRACE */
|
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||||
|
|
|
@ -88,7 +88,7 @@ void set_fiq_handler(void *start, unsigned int length)
|
||||||
* disable irqs for the duration. Note - these functions are almost
|
* disable irqs for the duration. Note - these functions are almost
|
||||||
* entirely coded in assembly.
|
* entirely coded in assembly.
|
||||||
*/
|
*/
|
||||||
void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
|
void __naked set_fiq_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
register unsigned long tmp;
|
register unsigned long tmp;
|
||||||
asm volatile (
|
asm volatile (
|
||||||
|
@ -106,7 +106,7 @@ void __attribute__((naked)) set_fiq_regs(struct pt_regs *regs)
|
||||||
: "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
|
: "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE));
|
||||||
}
|
}
|
||||||
|
|
||||||
void __attribute__((naked)) get_fiq_regs(struct pt_regs *regs)
|
void __naked get_fiq_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
register unsigned long tmp;
|
register unsigned long tmp;
|
||||||
asm volatile (
|
asm volatile (
|
||||||
|
|
|
@ -233,12 +233,13 @@ static void __init cacheid_init(void)
|
||||||
unsigned int cachetype = read_cpuid_cachetype();
|
unsigned int cachetype = read_cpuid_cachetype();
|
||||||
unsigned int arch = cpu_architecture();
|
unsigned int arch = cpu_architecture();
|
||||||
|
|
||||||
if (arch >= CPU_ARCH_ARMv7) {
|
if (arch >= CPU_ARCH_ARMv6) {
|
||||||
cacheid = CACHEID_VIPT_NONALIASING;
|
if ((cachetype & (7 << 29)) == 4 << 29) {
|
||||||
if ((cachetype & (3 << 14)) == 1 << 14)
|
/* ARMv7 register format */
|
||||||
cacheid |= CACHEID_ASID_TAGGED;
|
cacheid = CACHEID_VIPT_NONALIASING;
|
||||||
} else if (arch >= CPU_ARCH_ARMv6) {
|
if ((cachetype & (3 << 14)) == 1 << 14)
|
||||||
if (cachetype & (1 << 23))
|
cacheid |= CACHEID_ASID_TAGGED;
|
||||||
|
} else if (cachetype & (1 << 23))
|
||||||
cacheid = CACHEID_VIPT_ALIASING;
|
cacheid = CACHEID_VIPT_ALIASING;
|
||||||
else
|
else
|
||||||
cacheid = CACHEID_VIPT_NONALIASING;
|
cacheid = CACHEID_VIPT_NONALIASING;
|
||||||
|
|
|
@ -332,7 +332,6 @@ static int at91_pm_enter(suspend_state_t state)
|
||||||
at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR));
|
at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR));
|
||||||
|
|
||||||
error:
|
error:
|
||||||
sdram_selfrefresh_disable();
|
|
||||||
target_state = PM_SUSPEND_ON;
|
target_state = PM_SUSPEND_ON;
|
||||||
at91_irq_resume();
|
at91_irq_resume();
|
||||||
at91_gpio_resume();
|
at91_gpio_resume();
|
||||||
|
|
|
@ -311,6 +311,9 @@ evm_u35_setup(struct i2c_client *client, int gpio, unsigned ngpio, void *c)
|
||||||
gpio_request(gpio + 7, "nCF_SEL");
|
gpio_request(gpio + 7, "nCF_SEL");
|
||||||
gpio_direction_output(gpio + 7, 1);
|
gpio_direction_output(gpio + 7, 1);
|
||||||
|
|
||||||
|
/* irlml6401 sustains over 3A, switches 5V in under 8 msec */
|
||||||
|
setup_usb(500, 8);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,9 +420,6 @@ static __init void davinci_evm_init(void)
|
||||||
platform_add_devices(davinci_evm_devices,
|
platform_add_devices(davinci_evm_devices,
|
||||||
ARRAY_SIZE(davinci_evm_devices));
|
ARRAY_SIZE(davinci_evm_devices));
|
||||||
evm_init_i2c();
|
evm_init_i2c();
|
||||||
|
|
||||||
/* irlml6401 sustains over 3A, switches 5V in under 8 msec */
|
|
||||||
setup_usb(500, 8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static __init void davinci_evm_irq_init(void)
|
static __init void davinci_evm_irq_init(void)
|
||||||
|
|
|
@ -230,6 +230,11 @@ static struct clk davinci_clks[] = {
|
||||||
.rate = &commonrate,
|
.rate = &commonrate,
|
||||||
.lpsc = DAVINCI_LPSC_GPIO,
|
.lpsc = DAVINCI_LPSC_GPIO,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "usb",
|
||||||
|
.rate = &commonrate,
|
||||||
|
.lpsc = DAVINCI_LPSC_USB,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "AEMIFCLK",
|
.name = "AEMIFCLK",
|
||||||
.rate = &commonrate,
|
.rate = &commonrate,
|
||||||
|
|
|
@ -47,6 +47,7 @@ static struct musb_hdrc_platform_data usb_data = {
|
||||||
#elif defined(CONFIG_USB_MUSB_HOST)
|
#elif defined(CONFIG_USB_MUSB_HOST)
|
||||||
.mode = MUSB_HOST,
|
.mode = MUSB_HOST,
|
||||||
#endif
|
#endif
|
||||||
|
.clock = "usb",
|
||||||
.config = &musb_config,
|
.config = &musb_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
struct i2c_board_info;
|
||||||
|
|
||||||
struct ep93xx_eth_data
|
struct ep93xx_eth_data
|
||||||
{
|
{
|
||||||
unsigned char dev_addr[6];
|
unsigned char dev_addr[6];
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
|
#include <mach/irqs.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
static struct resource imx_csi_resources[] = {
|
static struct resource imx_csi_resources[] = {
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
|
|
||||||
|
#include <mach/irqs.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <mach/imx-uart.h>
|
#include <mach/imx-uart.h>
|
||||||
|
|
|
@ -178,7 +178,9 @@ static int __init omap3_beagle_i2c_init(void)
|
||||||
#ifdef CONFIG_I2C2_OMAP_BEAGLE
|
#ifdef CONFIG_I2C2_OMAP_BEAGLE
|
||||||
omap_register_i2c_bus(2, 400, NULL, 0);
|
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||||
#endif
|
#endif
|
||||||
omap_register_i2c_bus(3, 400, NULL, 0);
|
/* Bus 3 is attached to the DVI port where devices like the pico DLP
|
||||||
|
* projector don't work reliably with 400kHz */
|
||||||
|
omap_register_i2c_bus(3, 100, NULL, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -431,6 +431,10 @@ void __init orion5x_uart1_init(void)
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* XOR engine
|
* XOR engine
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
struct mv_xor_platform_shared_data orion5x_xor_shared_data = {
|
||||||
|
.dram = &orion5x_mbus_dram_info,
|
||||||
|
};
|
||||||
|
|
||||||
static struct resource orion5x_xor_shared_resources[] = {
|
static struct resource orion5x_xor_shared_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "xor low",
|
.name = "xor low",
|
||||||
|
@ -448,6 +452,9 @@ static struct resource orion5x_xor_shared_resources[] = {
|
||||||
static struct platform_device orion5x_xor_shared = {
|
static struct platform_device orion5x_xor_shared = {
|
||||||
.name = MV_XOR_SHARED_NAME,
|
.name = MV_XOR_SHARED_NAME,
|
||||||
.id = 0,
|
.id = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &orion5x_xor_shared_data,
|
||||||
|
},
|
||||||
.num_resources = ARRAY_SIZE(orion5x_xor_shared_resources),
|
.num_resources = ARRAY_SIZE(orion5x_xor_shared_resources),
|
||||||
.resource = orion5x_xor_shared_resources,
|
.resource = orion5x_xor_shared_resources,
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/i2c.h>
|
||||||
|
|
||||||
#include <asm/elf.h>
|
#include <asm/elf.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -201,8 +202,13 @@ static struct platform_device *devs[] __initdata = {
|
||||||
&pata_device,
|
&pata_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct i2c_board_info i2c_rtc = {
|
||||||
|
I2C_BOARD_INFO("pcf8583", 0x50)
|
||||||
|
};
|
||||||
|
|
||||||
static int __init rpc_init(void)
|
static int __init rpc_init(void)
|
||||||
{
|
{
|
||||||
|
i2c_register_board_info(0, &i2c_rtc, 1);
|
||||||
return platform_add_devices(devs, ARRAY_SIZE(devs));
|
return platform_add_devices(devs, ARRAY_SIZE(devs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = {
|
||||||
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
.vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct map_desc smdk6410_iodesc[] = {};
|
static struct map_desc smdk6410_iodesc[] = {};
|
||||||
|
|
||||||
static struct platform_device *smdk6410_devices[] __initdata = {
|
static struct platform_device *smdk6410_devices[] __initdata = {
|
||||||
#ifdef CONFIG_SMDK6410_SD_CH0
|
#ifdef CONFIG_SMDK6410_SD_CH0
|
||||||
|
@ -146,7 +146,7 @@ static struct platform_device *smdk6410_devices[] __initdata = {
|
||||||
|
|
||||||
static struct i2c_board_info i2c_devs0[] __initdata = {
|
static struct i2c_board_info i2c_devs0[] __initdata = {
|
||||||
{ I2C_BOARD_INFO("24c08", 0x50), },
|
{ I2C_BOARD_INFO("24c08", 0x50), },
|
||||||
{ I2C_BOARD_INFO("WM8580", 0X1b), },
|
{ I2C_BOARD_INFO("wm8580", 0x1b), },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct i2c_board_info i2c_devs1[] __initdata = {
|
static struct i2c_board_info i2c_devs1[] __initdata = {
|
||||||
|
|
|
@ -23,7 +23,8 @@ ENTRY(v6_early_abort)
|
||||||
#ifdef CONFIG_CPU_32v6K
|
#ifdef CONFIG_CPU_32v6K
|
||||||
clrex
|
clrex
|
||||||
#else
|
#else
|
||||||
strex r0, r1, [sp] @ Clear the exclusive monitor
|
sub r1, sp, #4 @ Get unused stack location
|
||||||
|
strex r0, r1, [r1] @ Clear the exclusive monitor
|
||||||
#endif
|
#endif
|
||||||
mrc p15, 0, r1, c5, c0, 0 @ get FSR
|
mrc p15, 0, r1, c5, c0, 0 @ get FSR
|
||||||
mrc p15, 0, r0, c6, c0, 0 @ get FAR
|
mrc p15, 0, r0, c6, c0, 0 @ get FAR
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
|
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
feroceon_copy_user_page(void *kto, const void *kfrom)
|
feroceon_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
*
|
*
|
||||||
* FIXME: do we need to handle cache stuff...
|
* FIXME: do we need to handle cache stuff...
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
v3_copy_user_page(void *kto, const void *kfrom)
|
v3_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\n\
|
asm("\n\
|
||||||
|
|
|
@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(minicache_lock);
|
||||||
* instruction. If your processor does not supply this, you have to write your
|
* instruction. If your processor does not supply this, you have to write your
|
||||||
* own copy_user_highpage that does the right thing.
|
* own copy_user_highpage that does the right thing.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
mc_copy_user_page(void *from, void *to)
|
mc_copy_user_page(void *from, void *to)
|
||||||
{
|
{
|
||||||
asm volatile(
|
asm volatile(
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* instruction. If your processor does not supply this, you have to write your
|
* instruction. If your processor does not supply this, you have to write your
|
||||||
* own copy_user_highpage that does the right thing.
|
* own copy_user_highpage that does the right thing.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
v4wb_copy_user_page(void *kto, const void *kfrom)
|
v4wb_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
* dirty data in the cache. However, we do have to ensure that
|
* dirty data in the cache. However, we do have to ensure that
|
||||||
* subsequent reads are up to date.
|
* subsequent reads are up to date.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
v4wt_copy_user_page(void *kto, const void *kfrom)
|
v4wt_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* if we eventually end up using our copied page.
|
* if we eventually end up using our copied page.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
xsc3_mc_copy_user_page(void *kto, const void *kfrom)
|
xsc3_mc_copy_user_page(void *kto, const void *kfrom)
|
||||||
{
|
{
|
||||||
asm("\
|
asm("\
|
||||||
|
|
|
@ -42,7 +42,7 @@ static DEFINE_SPINLOCK(minicache_lock);
|
||||||
* Dcache aliasing issue. The writes will be forwarded to the write buffer,
|
* Dcache aliasing issue. The writes will be forwarded to the write buffer,
|
||||||
* and merged as appropriate.
|
* and merged as appropriate.
|
||||||
*/
|
*/
|
||||||
static void __attribute__((naked))
|
static void __naked
|
||||||
mc_copy_user_page(void *from, void *to)
|
mc_copy_user_page(void *from, void *to)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -18,7 +18,8 @@ obj-$(CONFIG_CPU_FREQ) += cpu-omap.o
|
||||||
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
||||||
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
||||||
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
||||||
obj-$(CONFIG_I2C_OMAP) += i2c.o
|
i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
|
||||||
|
obj-y += $(i2c-omap-m) $(i2c-omap-y)
|
||||||
|
|
||||||
# OMAP mailbox framework
|
# OMAP mailbox framework
|
||||||
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
|
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
|
||||||
|
|
|
@ -199,21 +199,17 @@ static struct clocksource clocksource_32k = {
|
||||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Rounds down to nearest nsec.
|
|
||||||
*/
|
|
||||||
unsigned long long omap_32k_ticks_to_nsecs(unsigned long ticks_32k)
|
|
||||||
{
|
|
||||||
return cyc2ns(&clocksource_32k, ticks_32k);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns current time from boot in nsecs. It's OK for this to wrap
|
* Returns current time from boot in nsecs. It's OK for this to wrap
|
||||||
* around for now, as it's just a relative time stamp.
|
* around for now, as it's just a relative time stamp.
|
||||||
*/
|
*/
|
||||||
unsigned long long sched_clock(void)
|
unsigned long long sched_clock(void)
|
||||||
{
|
{
|
||||||
return omap_32k_ticks_to_nsecs(omap_32k_read());
|
unsigned long long ret;
|
||||||
|
|
||||||
|
ret = (unsigned long long)omap_32k_read();
|
||||||
|
ret = (ret * clocksource_32k.mult_orig) >> clocksource_32k.shift;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init omap_init_clocksource_32k(void)
|
static int __init omap_init_clocksource_32k(void)
|
||||||
|
|
|
@ -35,7 +35,7 @@ extern void omap_map_common_io(void);
|
||||||
extern struct sys_timer omap_timer;
|
extern struct sys_timer omap_timer;
|
||||||
extern void omap_serial_init(void);
|
extern void omap_serial_init(void);
|
||||||
extern void omap_serial_enable_clocks(int enable);
|
extern void omap_serial_enable_clocks(int enable);
|
||||||
#ifdef CONFIG_I2C_OMAP
|
#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
|
||||||
extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
|
extern int omap_register_i2c_bus(int bus_id, u32 clkrate,
|
||||||
struct i2c_board_info const *info,
|
struct i2c_board_info const *info,
|
||||||
unsigned len);
|
unsigned len);
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
!defined(CONFIG_ARCH_OMAP15XX) && \
|
!defined(CONFIG_ARCH_OMAP15XX) && \
|
||||||
!defined(CONFIG_ARCH_OMAP16XX) && \
|
!defined(CONFIG_ARCH_OMAP16XX) && \
|
||||||
!defined(CONFIG_ARCH_OMAP24XX)
|
!defined(CONFIG_ARCH_OMAP24XX)
|
||||||
#error "Power management for this processor not implemented yet"
|
#warning "Power management for this processor not implemented yet"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __ASSEMBLER__
|
#ifndef __ASSEMBLER__
|
||||||
|
|
|
@ -248,7 +248,7 @@ static struct clk *clks[] __initdata = {
|
||||||
&clk_48m,
|
&clk_48m,
|
||||||
};
|
};
|
||||||
|
|
||||||
void s3c64xx_register_clocks(void)
|
void __init s3c64xx_register_clocks(void)
|
||||||
{
|
{
|
||||||
struct clk *clkp;
|
struct clk *clkp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -417,4 +417,4 @@ static __init int s3c64xx_gpiolib_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
arch_initcall(s3c64xx_gpiolib_init);
|
core_initcall(s3c64xx_gpiolib_init);
|
||||||
|
|
|
@ -117,7 +117,7 @@
|
||||||
#define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12)
|
#define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12)
|
||||||
#define IRQ_NFC S3C64XX_IRQ_VIC1(13)
|
#define IRQ_NFC S3C64XX_IRQ_VIC1(13)
|
||||||
#define IRQ_CFCON S3C64XX_IRQ_VIC1(14)
|
#define IRQ_CFCON S3C64XX_IRQ_VIC1(14)
|
||||||
#define IRQ_UHOST S3C64XX_IRQ_VIC1(15)
|
#define IRQ_USBH S3C64XX_IRQ_VIC1(15)
|
||||||
#define IRQ_SPI0 S3C64XX_IRQ_VIC1(16)
|
#define IRQ_SPI0 S3C64XX_IRQ_VIC1(16)
|
||||||
#define IRQ_SPI1 S3C64XX_IRQ_VIC1(17)
|
#define IRQ_SPI1 S3C64XX_IRQ_VIC1(17)
|
||||||
#define IRQ_IIC S3C64XX_IRQ_VIC1(18)
|
#define IRQ_IIC S3C64XX_IRQ_VIC1(18)
|
||||||
|
|
|
@ -14,12 +14,15 @@
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/hardware/vic.h>
|
#include <asm/hardware/vic.h>
|
||||||
|
|
||||||
#include <plat/regs-irqtype.h>
|
#include <plat/regs-irqtype.h>
|
||||||
|
#include <plat/regs-gpio.h>
|
||||||
|
#include <plat/gpio-cfg.h>
|
||||||
|
|
||||||
#include <mach/map.h>
|
#include <mach/map.h>
|
||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
|
@ -55,7 +58,7 @@ static void s3c_irq_eint_unmask(unsigned int irq)
|
||||||
u32 mask;
|
u32 mask;
|
||||||
|
|
||||||
mask = __raw_readl(S3C64XX_EINT0MASK);
|
mask = __raw_readl(S3C64XX_EINT0MASK);
|
||||||
mask |= eint_irq_to_bit(irq);
|
mask &= ~eint_irq_to_bit(irq);
|
||||||
__raw_writel(mask, S3C64XX_EINT0MASK);
|
__raw_writel(mask, S3C64XX_EINT0MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +77,7 @@ static void s3c_irq_eint_maskack(unsigned int irq)
|
||||||
static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
||||||
{
|
{
|
||||||
int offs = eint_offset(irq);
|
int offs = eint_offset(irq);
|
||||||
|
int pin;
|
||||||
int shift;
|
int shift;
|
||||||
u32 ctrl, mask;
|
u32 ctrl, mask;
|
||||||
u32 newvalue = 0;
|
u32 newvalue = 0;
|
||||||
|
@ -125,6 +129,15 @@ static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
|
||||||
ctrl |= newvalue << shift;
|
ctrl |= newvalue << shift;
|
||||||
__raw_writel(ctrl, reg);
|
__raw_writel(ctrl, reg);
|
||||||
|
|
||||||
|
/* set the GPIO pin appropriately */
|
||||||
|
|
||||||
|
if (offs < 23)
|
||||||
|
pin = S3C64XX_GPN(offs);
|
||||||
|
else
|
||||||
|
pin = S3C64XX_GPM(offs - 23);
|
||||||
|
|
||||||
|
s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(2));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +194,7 @@ static void s3c_irq_demux_eint20_27(unsigned int irq, struct irq_desc *desc)
|
||||||
s3c_irq_demux_eint(20, 27);
|
s3c_irq_demux_eint(20, 27);
|
||||||
}
|
}
|
||||||
|
|
||||||
int __init s3c64xx_init_irq_eint(void)
|
static int __init s3c64xx_init_irq_eint(void)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
|
|
|
@ -207,7 +207,7 @@ static struct irq_chip s3c_irq_uart = {
|
||||||
|
|
||||||
static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
|
static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
|
||||||
{
|
{
|
||||||
void *reg_base = uirq->regs;
|
void __iomem *reg_base = uirq->regs;
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
int offs;
|
int offs;
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
* ext_xtal_mux for want of an actual name from the manual.
|
* ext_xtal_mux for want of an actual name from the manual.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct clk clk_ext_xtal_mux = {
|
static struct clk clk_ext_xtal_mux = {
|
||||||
.name = "ext_xtal",
|
.name = "ext_xtal",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
@ -63,7 +63,7 @@ struct clksrc_clk {
|
||||||
void __iomem *reg_divider;
|
void __iomem *reg_divider;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clk clk_fout_apll = {
|
static struct clk clk_fout_apll = {
|
||||||
.name = "fout_apll",
|
.name = "fout_apll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
@ -78,7 +78,7 @@ static struct clk_sources clk_src_apll = {
|
||||||
.nr_sources = ARRAY_SIZE(clk_src_apll_list),
|
.nr_sources = ARRAY_SIZE(clk_src_apll_list),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clksrc_clk clk_mout_apll = {
|
static struct clksrc_clk clk_mout_apll = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "mout_apll",
|
.name = "mout_apll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
@ -88,7 +88,7 @@ struct clksrc_clk clk_mout_apll = {
|
||||||
.sources = &clk_src_apll,
|
.sources = &clk_src_apll,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clk clk_fout_epll = {
|
static struct clk clk_fout_epll = {
|
||||||
.name = "fout_epll",
|
.name = "fout_epll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
@ -103,7 +103,7 @@ static struct clk_sources clk_src_epll = {
|
||||||
.nr_sources = ARRAY_SIZE(clk_src_epll_list),
|
.nr_sources = ARRAY_SIZE(clk_src_epll_list),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clksrc_clk clk_mout_epll = {
|
static struct clksrc_clk clk_mout_epll = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "mout_epll",
|
.name = "mout_epll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
@ -123,7 +123,7 @@ static struct clk_sources clk_src_mpll = {
|
||||||
.nr_sources = ARRAY_SIZE(clk_src_mpll_list),
|
.nr_sources = ARRAY_SIZE(clk_src_mpll_list),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clksrc_clk clk_mout_mpll = {
|
static struct clksrc_clk clk_mout_mpll = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "mout_mpll",
|
.name = "mout_mpll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
@ -145,7 +145,7 @@ static unsigned long s3c64xx_clk_doutmpll_get_rate(struct clk *clk)
|
||||||
return rate;
|
return rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct clk clk_dout_mpll = {
|
static struct clk clk_dout_mpll = {
|
||||||
.name = "dout_mpll",
|
.name = "dout_mpll",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.parent = &clk_mout_mpll.clk,
|
.parent = &clk_mout_mpll.clk,
|
||||||
|
@ -189,10 +189,10 @@ static struct clk_sources clkset_uart = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk *clkset_uhost_list[] = {
|
static struct clk *clkset_uhost_list[] = {
|
||||||
|
&clk_48m,
|
||||||
&clk_mout_epll.clk,
|
&clk_mout_epll.clk,
|
||||||
&clk_dout_mpll,
|
&clk_dout_mpll,
|
||||||
&clk_fin_epll,
|
&clk_fin_epll,
|
||||||
&clk_48m,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_sources clkset_uhost = {
|
static struct clk_sources clkset_uhost = {
|
||||||
|
@ -239,10 +239,12 @@ static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)
|
||||||
|
|
||||||
rate = clk_round_rate(clk, rate);
|
rate = clk_round_rate(clk, rate);
|
||||||
div = clk_get_rate(clk->parent) / rate;
|
div = clk_get_rate(clk->parent) / rate;
|
||||||
|
if (div > 16)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
val = __raw_readl(reg);
|
val = __raw_readl(reg);
|
||||||
val &= ~sclk->mask;
|
val &= ~(0xf << sclk->shift);
|
||||||
val |= (rate - 1) << sclk->shift;
|
val |= (div - 1) << sclk->shift;
|
||||||
__raw_writel(val, reg);
|
__raw_writel(val, reg);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -351,7 +353,7 @@ static struct clksrc_clk clk_mmc2 = {
|
||||||
|
|
||||||
static struct clksrc_clk clk_usbhost = {
|
static struct clksrc_clk clk_usbhost = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "usb-host-bus",
|
.name = "usb-bus-host",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.ctrlbit = S3C_CLKCON_SCLK_UHOST,
|
.ctrlbit = S3C_CLKCON_SCLK_UHOST,
|
||||||
.enable = s3c64xx_sclk_ctrl,
|
.enable = s3c64xx_sclk_ctrl,
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#
|
#
|
||||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||||
#
|
#
|
||||||
# Last update: Sun Nov 30 16:39:36 2008
|
# Last update: Thu Mar 12 18:01:45 2009
|
||||||
#
|
#
|
||||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||||
#
|
#
|
||||||
|
@ -1811,7 +1811,7 @@ pilz_pmi5 MACH_PILZ_PMI5 PILZ_PMI5 1820
|
||||||
jade MACH_JADE JADE 1821
|
jade MACH_JADE JADE 1821
|
||||||
ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822
|
ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822
|
||||||
gprisc3 MACH_GPRISC3 GPRISC3 1823
|
gprisc3 MACH_GPRISC3 GPRISC3 1823
|
||||||
stamp9260 MACH_STAMP9260 STAMP9260 1824
|
stamp9g20 MACH_STAMP9G20 STAMP9G20 1824
|
||||||
smdk6430 MACH_SMDK6430 SMDK6430 1825
|
smdk6430 MACH_SMDK6430 SMDK6430 1825
|
||||||
smdkc100 MACH_SMDKC100 SMDKC100 1826
|
smdkc100 MACH_SMDKC100 SMDKC100 1826
|
||||||
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
||||||
|
@ -1993,4 +1993,134 @@ spark MACH_SPARK SPARK 2002
|
||||||
benzina MACH_BENZINA BENZINA 2003
|
benzina MACH_BENZINA BENZINA 2003
|
||||||
blaze MACH_BLAZE BLAZE 2004
|
blaze MACH_BLAZE BLAZE 2004
|
||||||
linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005
|
linkstation_ls_hgl MACH_LINKSTATION_LS_HGL LINKSTATION_LS_HGL 2005
|
||||||
htcvenus MACH_HTCVENUS HTCVENUS 2006
|
htckovsky MACH_HTCVENUS HTCVENUS 2006
|
||||||
|
sony_prs505 MACH_SONY_PRS505 SONY_PRS505 2007
|
||||||
|
hanlin_v3 MACH_HANLIN_V3 HANLIN_V3 2008
|
||||||
|
sapphira MACH_SAPPHIRA SAPPHIRA 2009
|
||||||
|
dack_sda_01 MACH_DACK_SDA_01 DACK_SDA_01 2010
|
||||||
|
armbox MACH_ARMBOX ARMBOX 2011
|
||||||
|
harris_rvp MACH_HARRIS_RVP HARRIS_RVP 2012
|
||||||
|
ribaldo MACH_RIBALDO RIBALDO 2013
|
||||||
|
agora MACH_AGORA AGORA 2014
|
||||||
|
omap3_mini MACH_OMAP3_MINI OMAP3_MINI 2015
|
||||||
|
a9sam6432_b MACH_A9SAM6432_B A9SAM6432_B 2016
|
||||||
|
usg2410 MACH_USG2410 USG2410 2017
|
||||||
|
pc72052_i10_revb MACH_PC72052_I10_REVB PC72052_I10_REVB 2018
|
||||||
|
mx35_exm32 MACH_MX35_EXM32 MX35_EXM32 2019
|
||||||
|
topas910 MACH_TOPAS910 TOPAS910 2020
|
||||||
|
hyena MACH_HYENA HYENA 2021
|
||||||
|
pospax MACH_POSPAX POSPAX 2022
|
||||||
|
hdl_gx MACH_HDL_GX HDL_GX 2023
|
||||||
|
ctera_4bay MACH_CTERA_4BAY CTERA_4BAY 2024
|
||||||
|
ctera_plug_c MACH_CTERA_PLUG_C CTERA_PLUG_C 2025
|
||||||
|
crwea_plug_i MACH_CRWEA_PLUG_I CRWEA_PLUG_I 2026
|
||||||
|
egauge2 MACH_EGAUGE2 EGAUGE2 2027
|
||||||
|
didj MACH_DIDJ DIDJ 2028
|
||||||
|
m_s3c2443 MACH_MEISTER MEISTER 2029
|
||||||
|
htcblackstone MACH_HTCBLACKSTONE HTCBLACKSTONE 2030
|
||||||
|
cpuat9g20 MACH_CPUAT9G20 CPUAT9G20 2031
|
||||||
|
smdk6440 MACH_SMDK6440 SMDK6440 2032
|
||||||
|
omap_35xx_mvp MACH_OMAP_35XX_MVP OMAP_35XX_MVP 2033
|
||||||
|
ctera_plug_i MACH_CTERA_PLUG_I CTERA_PLUG_I 2034
|
||||||
|
pvg610_100 MACH_PVG610 PVG610 2035
|
||||||
|
hprw6815 MACH_HPRW6815 HPRW6815 2036
|
||||||
|
omap3_oswald MACH_OMAP3_OSWALD OMAP3_OSWALD 2037
|
||||||
|
nas4220b MACH_NAS4220B NAS4220B 2038
|
||||||
|
htcraphael_cdma MACH_HTCRAPHAEL_CDMA HTCRAPHAEL_CDMA 2039
|
||||||
|
htcdiamond_cdma MACH_HTCDIAMOND_CDMA HTCDIAMOND_CDMA 2040
|
||||||
|
scaler MACH_SCALER SCALER 2041
|
||||||
|
zylonite2 MACH_ZYLONITE2 ZYLONITE2 2042
|
||||||
|
aspenite MACH_ASPENITE ASPENITE 2043
|
||||||
|
teton MACH_TETON TETON 2044
|
||||||
|
ttc_dkb MACH_TTC_DKB TTC_DKB 2045
|
||||||
|
bishop2 MACH_BISHOP2 BISHOP2 2046
|
||||||
|
ippv5 MACH_IPPV5 IPPV5 2047
|
||||||
|
farm926 MACH_FARM926 FARM926 2048
|
||||||
|
mmccpu MACH_MMCCPU MMCCPU 2049
|
||||||
|
sgmsfl MACH_SGMSFL SGMSFL 2050
|
||||||
|
tt8000 MACH_TT8000 TT8000 2051
|
||||||
|
zrn4300lp MACH_ZRN4300LP ZRN4300LP 2052
|
||||||
|
mptc MACH_MPTC MPTC 2053
|
||||||
|
h6051 MACH_H6051 H6051 2054
|
||||||
|
pvg610_101 MACH_PVG610_101 PVG610_101 2055
|
||||||
|
stamp9261_pc_evb MACH_STAMP9261_PC_EVB STAMP9261_PC_EVB 2056
|
||||||
|
pelco_odysseus MACH_PELCO_ODYSSEUS PELCO_ODYSSEUS 2057
|
||||||
|
tny_a9260 MACH_TNY_A9260 TNY_A9260 2058
|
||||||
|
tny_a9g20 MACH_TNY_A9G20 TNY_A9G20 2059
|
||||||
|
aesop_mp2530f MACH_AESOP_MP2530F AESOP_MP2530F 2060
|
||||||
|
dx900 MACH_DX900 DX900 2061
|
||||||
|
cpodc2 MACH_CPODC2 CPODC2 2062
|
||||||
|
tilt_8925 MACH_TILT_8925 TILT_8925 2063
|
||||||
|
davinci_dm357_evm MACH_DAVINCI_DM357_EVM DAVINCI_DM357_EVM 2064
|
||||||
|
swordfish MACH_SWORDFISH SWORDFISH 2065
|
||||||
|
corvus MACH_CORVUS CORVUS 2066
|
||||||
|
taurus MACH_TAURUS TAURUS 2067
|
||||||
|
axm MACH_AXM AXM 2068
|
||||||
|
axc MACH_AXC AXC 2069
|
||||||
|
baby MACH_BABY BABY 2070
|
||||||
|
mp200 MACH_MP200 MP200 2071
|
||||||
|
pcm043 MACH_PCM043 PCM043 2072
|
||||||
|
hanlin_v3c MACH_HANLIN_V3C HANLIN_V3C 2073
|
||||||
|
kbk9g20 MACH_KBK9G20 KBK9G20 2074
|
||||||
|
adsturbog5 MACH_ADSTURBOG5 ADSTURBOG5 2075
|
||||||
|
avenger_lite1 MACH_AVENGER_LITE1 AVENGER_LITE1 2076
|
||||||
|
suc82x MACH_SUC SUC 2077
|
||||||
|
at91sam7s256 MACH_AT91SAM7S256 AT91SAM7S256 2078
|
||||||
|
mendoza MACH_MENDOZA MENDOZA 2079
|
||||||
|
kira MACH_KIRA KIRA 2080
|
||||||
|
mx1hbm MACH_MX1HBM MX1HBM 2081
|
||||||
|
quatro43xx MACH_QUATRO43XX QUATRO43XX 2082
|
||||||
|
quatro4230 MACH_QUATRO4230 QUATRO4230 2083
|
||||||
|
nsb400 MACH_NSB400 NSB400 2084
|
||||||
|
drp255 MACH_DRP255 DRP255 2085
|
||||||
|
thoth MACH_THOTH THOTH 2086
|
||||||
|
firestone MACH_FIRESTONE FIRESTONE 2087
|
||||||
|
asusp750 MACH_ASUSP750 ASUSP750 2088
|
||||||
|
ctera_dl MACH_CTERA_DL CTERA_DL 2089
|
||||||
|
socr MACH_SOCR SOCR 2090
|
||||||
|
htcoxygen MACH_HTCOXYGEN HTCOXYGEN 2091
|
||||||
|
heroc MACH_HEROC HEROC 2092
|
||||||
|
zeno6800 MACH_ZENO6800 ZENO6800 2093
|
||||||
|
sc2mcs MACH_SC2MCS SC2MCS 2094
|
||||||
|
gene100 MACH_GENE100 GENE100 2095
|
||||||
|
as353x MACH_AS353X AS353X 2096
|
||||||
|
sheevaplug MACH_SHEEVAPLUG SHEEVAPLUG 2097
|
||||||
|
at91sam9g20 MACH_AT91SAM9G20 AT91SAM9G20 2098
|
||||||
|
mv88f6192gtw_fe MACH_MV88F6192GTW_FE MV88F6192GTW_FE 2099
|
||||||
|
cc9200 MACH_CC9200 CC9200 2100
|
||||||
|
sm9200 MACH_SM9200 SM9200 2101
|
||||||
|
tp9200 MACH_TP9200 TP9200 2102
|
||||||
|
snapperdv MACH_SNAPPERDV SNAPPERDV 2103
|
||||||
|
avengers_lite MACH_AVENGERS_LITE AVENGERS_LITE 2104
|
||||||
|
avengers_lite1 MACH_AVENGERS_LITE1 AVENGERS_LITE1 2105
|
||||||
|
omap3axon MACH_OMAP3AXON OMAP3AXON 2106
|
||||||
|
ma8xx MACH_MA8XX MA8XX 2107
|
||||||
|
mp201ek MACH_MP201EK MP201EK 2108
|
||||||
|
davinci_tux MACH_DAVINCI_TUX DAVINCI_TUX 2109
|
||||||
|
mpa1600 MACH_MPA1600 MPA1600 2110
|
||||||
|
pelco_troy MACH_PELCO_TROY PELCO_TROY 2111
|
||||||
|
nsb667 MACH_NSB667 NSB667 2112
|
||||||
|
rovers5_4mpix MACH_ROVERS5_4MPIX ROVERS5_4MPIX 2113
|
||||||
|
twocom MACH_TWOCOM TWOCOM 2114
|
||||||
|
ubisys_p9_rcu3r2 MACH_UBISYS_P9_RCU3R2 UBISYS_P9_RCU3R2 2115
|
||||||
|
hero_espresso MACH_HERO_ESPRESSO HERO_ESPRESSO 2116
|
||||||
|
afeusb MACH_AFEUSB AFEUSB 2117
|
||||||
|
t830 MACH_T830 T830 2118
|
||||||
|
spd8020_cc MACH_SPD8020_CC SPD8020_CC 2119
|
||||||
|
om_3d7k MACH_OM_3D7K OM_3D7K 2120
|
||||||
|
picocom2 MACH_PICOCOM2 PICOCOM2 2121
|
||||||
|
uwg4mx27 MACH_UWG4MX27 UWG4MX27 2122
|
||||||
|
uwg4mx31 MACH_UWG4MX31 UWG4MX31 2123
|
||||||
|
cherry MACH_CHERRY CHERRY 2124
|
||||||
|
mx51_babbage MACH_MX51_BABBAGE MX51_BABBAGE 2125
|
||||||
|
s3c2440turkiye MACH_S3C2440TURKIYE S3C2440TURKIYE 2126
|
||||||
|
tx37 MACH_TX37 TX37 2127
|
||||||
|
sbc2800_9g20 MACH_SBC2800_9G20 SBC2800_9G20 2128
|
||||||
|
benzglb MACH_BENZGLB BENZGLB 2129
|
||||||
|
benztd MACH_BENZTD BENZTD 2130
|
||||||
|
cartesio_plus MACH_CARTESIO_PLUS CARTESIO_PLUS 2131
|
||||||
|
solrad_g20 MACH_SOLRAD_G20 SOLRAD_G20 2132
|
||||||
|
mx27wallace MACH_MX27WALLACE MX27WALLACE 2133
|
||||||
|
fmzwebmodul MACH_FMZWEBMODUL FMZWEBMODUL 2134
|
||||||
|
rd78x00_masa MACH_RD78X00_MASA RD78X00_MASA 2135
|
||||||
|
smallogger MACH_SMALLOGGER SMALLOGGER 2136
|
||||||
|
|
|
@ -221,7 +221,11 @@ config IA64_HP_SIM
|
||||||
|
|
||||||
config IA64_XEN_GUEST
|
config IA64_XEN_GUEST
|
||||||
bool "Xen guest"
|
bool "Xen guest"
|
||||||
|
select SWIOTLB
|
||||||
depends on XEN
|
depends on XEN
|
||||||
|
help
|
||||||
|
Build a kernel that runs on Xen guest domain. At this moment only
|
||||||
|
16KB page size in supported.
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
@ -479,8 +483,7 @@ config HOLES_IN_ZONE
|
||||||
default y if VIRTUAL_MEM_MAP
|
default y if VIRTUAL_MEM_MAP
|
||||||
|
|
||||||
config HAVE_ARCH_EARLY_PFN_TO_NID
|
config HAVE_ARCH_EARLY_PFN_TO_NID
|
||||||
def_bool y
|
def_bool NUMA && SPARSEMEM
|
||||||
depends on NEED_MULTIPLE_NODES
|
|
||||||
|
|
||||||
config HAVE_ARCH_NODEDATA_EXTENSION
|
config HAVE_ARCH_NODEDATA_EXTENSION
|
||||||
def_bool y
|
def_bool y
|
||||||
|
@ -635,6 +638,17 @@ config DMAR
|
||||||
and include PCI device scope covered by these DMA
|
and include PCI device scope covered by these DMA
|
||||||
remapping devices.
|
remapping devices.
|
||||||
|
|
||||||
|
config DMAR_DEFAULT_ON
|
||||||
|
def_bool y
|
||||||
|
prompt "Enable DMA Remapping Devices by default"
|
||||||
|
depends on DMAR
|
||||||
|
help
|
||||||
|
Selecting this option will enable a DMAR device at boot time if
|
||||||
|
one is found. If this option is not selected, DMAR support can
|
||||||
|
be enabled by passing intel_iommu=on to the kernel. It is
|
||||||
|
recommended you say N here while the DMAR code remains
|
||||||
|
experimental.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -39,7 +39,7 @@
|
||||||
/* BTE status register only supports 16 bits for length field */
|
/* BTE status register only supports 16 bits for length field */
|
||||||
#define BTE_LEN_BITS (16)
|
#define BTE_LEN_BITS (16)
|
||||||
#define BTE_LEN_MASK ((1 << BTE_LEN_BITS) - 1)
|
#define BTE_LEN_MASK ((1 << BTE_LEN_BITS) - 1)
|
||||||
#define BTE_MAX_XFER ((1 << BTE_LEN_BITS) * L1_CACHE_BYTES)
|
#define BTE_MAX_XFER (BTE_LEN_MASK << L1_CACHE_SHIFT)
|
||||||
|
|
||||||
|
|
||||||
/* Define hardware */
|
/* Define hardware */
|
||||||
|
|
|
@ -507,7 +507,7 @@ static int iosapic_find_sharable_irq(unsigned long trigger, unsigned long pol)
|
||||||
if (trigger == IOSAPIC_EDGE)
|
if (trigger == IOSAPIC_EDGE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
for (i = 0; i <= NR_IRQS; i++) {
|
for (i = 0; i < NR_IRQS; i++) {
|
||||||
info = &iosapic_intr_info[i];
|
info = &iosapic_intr_info[i];
|
||||||
if (info->trigger == trigger && info->polarity == pol &&
|
if (info->trigger == trigger && info->polarity == pol &&
|
||||||
(info->dmode == IOSAPIC_FIXED ||
|
(info->dmode == IOSAPIC_FIXED ||
|
||||||
|
|
|
@ -736,14 +736,15 @@ int __cpu_disable(void)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cpu_clear(cpu, cpu_online_map);
|
||||||
|
|
||||||
if (migrate_platform_irqs(cpu)) {
|
if (migrate_platform_irqs(cpu)) {
|
||||||
cpu_set(cpu, cpu_online_map);
|
cpu_set(cpu, cpu_online_map);
|
||||||
return (-EBUSY);
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_siblinginfo(cpu);
|
remove_siblinginfo(cpu);
|
||||||
fixup_irqs();
|
fixup_irqs();
|
||||||
cpu_clear(cpu, cpu_online_map);
|
|
||||||
local_flush_tlb_all();
|
local_flush_tlb_all();
|
||||||
cpu_clear(cpu, cpu_callin_map);
|
cpu_clear(cpu, cpu_callin_map);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -2149,7 +2149,7 @@ unw_remove_unwind_table (void *handle)
|
||||||
|
|
||||||
/* next, remove hash table entries for this table */
|
/* next, remove hash table entries for this table */
|
||||||
|
|
||||||
for (index = 0; index <= UNW_HASH_SIZE; ++index) {
|
for (index = 0; index < UNW_HASH_SIZE; ++index) {
|
||||||
tmp = unw.cache + unw.hash[index];
|
tmp = unw.cache + unw.hash[index];
|
||||||
if (unw.hash[index] >= UNW_CACHE_SIZE
|
if (unw.hash[index] >= UNW_CACHE_SIZE
|
||||||
|| tmp->ip < table->start || tmp->ip >= table->end)
|
|| tmp->ip < table->start || tmp->ip >= table->end)
|
||||||
|
|
|
@ -97,9 +97,10 @@ bte_result_t bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
|
||||||
return BTE_SUCCESS;
|
return BTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
BUG_ON((len & L1_CACHE_MASK) ||
|
BUG_ON(len & L1_CACHE_MASK);
|
||||||
(src & L1_CACHE_MASK) || (dest & L1_CACHE_MASK));
|
BUG_ON(src & L1_CACHE_MASK);
|
||||||
BUG_ON(!(len < ((BTE_LEN_MASK + 1) << L1_CACHE_SHIFT)));
|
BUG_ON(dest & L1_CACHE_MASK);
|
||||||
|
BUG_ON(len > BTE_MAX_XFER);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start with interface corresponding to cpu number
|
* Start with interface corresponding to cpu number
|
||||||
|
|
|
@ -8,8 +8,7 @@ config XEN
|
||||||
depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB && EXPERIMENTAL
|
depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB && EXPERIMENTAL
|
||||||
select XEN_XENCOMM
|
select XEN_XENCOMM
|
||||||
select NO_IDLE_HZ
|
select NO_IDLE_HZ
|
||||||
|
# followings are required to save/restore.
|
||||||
# those are required to save/restore.
|
|
||||||
select ARCH_SUSPEND_POSSIBLE
|
select ARCH_SUSPEND_POSSIBLE
|
||||||
select SUSPEND
|
select SUSPEND
|
||||||
select PM_SLEEP
|
select PM_SLEEP
|
||||||
|
|
|
@ -153,7 +153,7 @@ xen_post_smp_prepare_boot_cpu(void)
|
||||||
xen_setup_vcpu_info_placement();
|
xen_setup_vcpu_info_placement();
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct pv_init_ops xen_init_ops __initdata = {
|
static const struct pv_init_ops xen_init_ops __initconst = {
|
||||||
.banner = xen_banner,
|
.banner = xen_banner,
|
||||||
|
|
||||||
.reserve_memory = xen_reserve_memory,
|
.reserve_memory = xen_reserve_memory,
|
||||||
|
@ -337,7 +337,7 @@ xen_iosapic_write(char __iomem *iosapic, unsigned int reg, u32 val)
|
||||||
HYPERVISOR_physdev_op(PHYSDEVOP_apic_write, &apic_op);
|
HYPERVISOR_physdev_op(PHYSDEVOP_apic_write, &apic_op);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct pv_iosapic_ops xen_iosapic_ops __initdata = {
|
static const struct pv_iosapic_ops xen_iosapic_ops __initconst = {
|
||||||
.pcat_compat_init = xen_pcat_compat_init,
|
.pcat_compat_init = xen_pcat_compat_init,
|
||||||
.__get_irq_chip = xen_iosapic_get_irq_chip,
|
.__get_irq_chip = xen_iosapic_get_irq_chip,
|
||||||
|
|
||||||
|
|
|
@ -187,8 +187,8 @@ __asm__ (__ALIGN_STR "\n" \
|
||||||
" jbra ret_from_interrupt\n" \
|
" jbra ret_from_interrupt\n" \
|
||||||
: : "i" (&kstat_cpu(0).irqs[n+8]), "i" (&irq_handler[n+8]), \
|
: : "i" (&kstat_cpu(0).irqs[n+8]), "i" (&irq_handler[n+8]), \
|
||||||
"n" (PT_OFF_SR), "n" (n), \
|
"n" (PT_OFF_SR), "n" (n), \
|
||||||
"i" (n & 8 ? (n & 16 ? &tt_mfp.int_mk_a : &mfp.int_mk_a) \
|
"i" (n & 8 ? (n & 16 ? &tt_mfp.int_mk_a : &st_mfp.int_mk_a) \
|
||||||
: (n & 16 ? &tt_mfp.int_mk_b : &mfp.int_mk_b)), \
|
: (n & 16 ? &tt_mfp.int_mk_b : &st_mfp.int_mk_b)), \
|
||||||
"m" (preempt_count()), "di" (HARDIRQ_OFFSET) \
|
"m" (preempt_count()), "di" (HARDIRQ_OFFSET) \
|
||||||
); \
|
); \
|
||||||
for (;;); /* fake noreturn */ \
|
for (;;); /* fake noreturn */ \
|
||||||
|
@ -366,14 +366,14 @@ void __init atari_init_IRQ(void)
|
||||||
/* Initialize the MFP(s) */
|
/* Initialize the MFP(s) */
|
||||||
|
|
||||||
#ifdef ATARI_USE_SOFTWARE_EOI
|
#ifdef ATARI_USE_SOFTWARE_EOI
|
||||||
mfp.vec_adr = 0x48; /* Software EOI-Mode */
|
st_mfp.vec_adr = 0x48; /* Software EOI-Mode */
|
||||||
#else
|
#else
|
||||||
mfp.vec_adr = 0x40; /* Automatic EOI-Mode */
|
st_mfp.vec_adr = 0x40; /* Automatic EOI-Mode */
|
||||||
#endif
|
#endif
|
||||||
mfp.int_en_a = 0x00; /* turn off MFP-Ints */
|
st_mfp.int_en_a = 0x00; /* turn off MFP-Ints */
|
||||||
mfp.int_en_b = 0x00;
|
st_mfp.int_en_b = 0x00;
|
||||||
mfp.int_mk_a = 0xff; /* no Masking */
|
st_mfp.int_mk_a = 0xff; /* no Masking */
|
||||||
mfp.int_mk_b = 0xff;
|
st_mfp.int_mk_b = 0xff;
|
||||||
|
|
||||||
if (ATARIHW_PRESENT(TT_MFP)) {
|
if (ATARIHW_PRESENT(TT_MFP)) {
|
||||||
#ifdef ATARI_USE_SOFTWARE_EOI
|
#ifdef ATARI_USE_SOFTWARE_EOI
|
||||||
|
|
|
@ -609,10 +609,10 @@ int atari_keyb_init(void)
|
||||||
ACIA_RHTID : 0);
|
ACIA_RHTID : 0);
|
||||||
|
|
||||||
/* make sure the interrupt line is up */
|
/* make sure the interrupt line is up */
|
||||||
} while ((mfp.par_dt_reg & 0x10) == 0);
|
} while ((st_mfp.par_dt_reg & 0x10) == 0);
|
||||||
|
|
||||||
/* enable ACIA Interrupts */
|
/* enable ACIA Interrupts */
|
||||||
mfp.active_edge &= ~0x10;
|
st_mfp.active_edge &= ~0x10;
|
||||||
atari_turnon_irq(IRQ_MFP_ACIA);
|
atari_turnon_irq(IRQ_MFP_ACIA);
|
||||||
|
|
||||||
ikbd_self_test = 1;
|
ikbd_self_test = 1;
|
||||||
|
|
|
@ -258,7 +258,7 @@ void __init config_atari(void)
|
||||||
printk("STND_SHIFTER ");
|
printk("STND_SHIFTER ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hwreg_present(&mfp.par_dt_reg)) {
|
if (hwreg_present(&st_mfp.par_dt_reg)) {
|
||||||
ATARIHW_SET(ST_MFP);
|
ATARIHW_SET(ST_MFP);
|
||||||
printk("ST_MFP ");
|
printk("ST_MFP ");
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,9 +34,9 @@ static struct console atari_console_driver = {
|
||||||
|
|
||||||
static inline void ata_mfp_out(char c)
|
static inline void ata_mfp_out(char c)
|
||||||
{
|
{
|
||||||
while (!(mfp.trn_stat & 0x80)) /* wait for tx buf empty */
|
while (!(st_mfp.trn_stat & 0x80)) /* wait for tx buf empty */
|
||||||
barrier();
|
barrier();
|
||||||
mfp.usart_dta = c;
|
st_mfp.usart_dta = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void atari_mfp_console_write(struct console *co, const char *str,
|
static void atari_mfp_console_write(struct console *co, const char *str,
|
||||||
|
@ -91,7 +91,7 @@ static int ata_par_out(char c)
|
||||||
/* This a some-seconds timeout in case no printer is connected */
|
/* This a some-seconds timeout in case no printer is connected */
|
||||||
unsigned long i = loops_per_jiffy > 1 ? loops_per_jiffy : 10000000/HZ;
|
unsigned long i = loops_per_jiffy > 1 ? loops_per_jiffy : 10000000/HZ;
|
||||||
|
|
||||||
while ((mfp.par_dt_reg & 1) && --i) /* wait for BUSY == L */
|
while ((st_mfp.par_dt_reg & 1) && --i) /* wait for BUSY == L */
|
||||||
;
|
;
|
||||||
if (!i)
|
if (!i)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -131,9 +131,9 @@ static void atari_par_console_write(struct console *co, const char *str,
|
||||||
#if 0
|
#if 0
|
||||||
int atari_mfp_console_wait_key(struct console *co)
|
int atari_mfp_console_wait_key(struct console *co)
|
||||||
{
|
{
|
||||||
while (!(mfp.rcv_stat & 0x80)) /* wait for rx buf filled */
|
while (!(st_mfp.rcv_stat & 0x80)) /* wait for rx buf filled */
|
||||||
barrier();
|
barrier();
|
||||||
return mfp.usart_dta;
|
return st_mfp.usart_dta;
|
||||||
}
|
}
|
||||||
|
|
||||||
int atari_scc_console_wait_key(struct console *co)
|
int atari_scc_console_wait_key(struct console *co)
|
||||||
|
@ -175,12 +175,12 @@ static void __init atari_init_mfp_port(int cflag)
|
||||||
baud = B9600; /* use default 9600bps for non-implemented rates */
|
baud = B9600; /* use default 9600bps for non-implemented rates */
|
||||||
baud -= B1200; /* baud_table[] starts at 1200bps */
|
baud -= B1200; /* baud_table[] starts at 1200bps */
|
||||||
|
|
||||||
mfp.trn_stat &= ~0x01; /* disable TX */
|
st_mfp.trn_stat &= ~0x01; /* disable TX */
|
||||||
mfp.usart_ctr = parity | csize | 0x88; /* 1:16 clk mode, 1 stop bit */
|
st_mfp.usart_ctr = parity | csize | 0x88; /* 1:16 clk mode, 1 stop bit */
|
||||||
mfp.tim_ct_cd &= 0x70; /* stop timer D */
|
st_mfp.tim_ct_cd &= 0x70; /* stop timer D */
|
||||||
mfp.tim_dt_d = baud_table[baud];
|
st_mfp.tim_dt_d = baud_table[baud];
|
||||||
mfp.tim_ct_cd |= 0x01; /* start timer D, 1:4 */
|
st_mfp.tim_ct_cd |= 0x01; /* start timer D, 1:4 */
|
||||||
mfp.trn_stat |= 0x01; /* enable TX */
|
st_mfp.trn_stat |= 0x01; /* enable TX */
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SCC_WRITE(reg, val) \
|
#define SCC_WRITE(reg, val) \
|
||||||
|
|
|
@ -27,9 +27,9 @@ void __init
|
||||||
atari_sched_init(irq_handler_t timer_routine)
|
atari_sched_init(irq_handler_t timer_routine)
|
||||||
{
|
{
|
||||||
/* set Timer C data Register */
|
/* set Timer C data Register */
|
||||||
mfp.tim_dt_c = INT_TICKS;
|
st_mfp.tim_dt_c = INT_TICKS;
|
||||||
/* start timer C, div = 1:100 */
|
/* start timer C, div = 1:100 */
|
||||||
mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60;
|
st_mfp.tim_ct_cd = (st_mfp.tim_ct_cd & 15) | 0x60;
|
||||||
/* install interrupt service routine for MFP Timer C */
|
/* install interrupt service routine for MFP Timer C */
|
||||||
if (request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW,
|
if (request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW,
|
||||||
"timer", timer_routine))
|
"timer", timer_routine))
|
||||||
|
@ -46,11 +46,11 @@ unsigned long atari_gettimeoffset (void)
|
||||||
unsigned long ticks, offset = 0;
|
unsigned long ticks, offset = 0;
|
||||||
|
|
||||||
/* read MFP timer C current value */
|
/* read MFP timer C current value */
|
||||||
ticks = mfp.tim_dt_c;
|
ticks = st_mfp.tim_dt_c;
|
||||||
/* The probability of underflow is less than 2% */
|
/* The probability of underflow is less than 2% */
|
||||||
if (ticks > INT_TICKS - INT_TICKS / 50)
|
if (ticks > INT_TICKS - INT_TICKS / 50)
|
||||||
/* Check for pending timer interrupt */
|
/* Check for pending timer interrupt */
|
||||||
if (mfp.int_pn_b & (1 << 5))
|
if (st_mfp.int_pn_b & (1 << 5))
|
||||||
offset = TICK_SIZE;
|
offset = TICK_SIZE;
|
||||||
|
|
||||||
ticks = INT_TICKS - ticks;
|
ticks = INT_TICKS - ticks;
|
||||||
|
|
|
@ -113,7 +113,7 @@ extern struct atari_hw_present atari_hw_present;
|
||||||
* of nops on various machines. Somebody claimed that the tstb takes 600 ns.
|
* of nops on various machines. Somebody claimed that the tstb takes 600 ns.
|
||||||
*/
|
*/
|
||||||
#define MFPDELAY() \
|
#define MFPDELAY() \
|
||||||
__asm__ __volatile__ ( "tstb %0" : : "m" (mfp.par_dt_reg) : "cc" );
|
__asm__ __volatile__ ( "tstb %0" : : "m" (st_mfp.par_dt_reg) : "cc" );
|
||||||
|
|
||||||
/* Do cache push/invalidate for DMA read/write. This function obeys the
|
/* Do cache push/invalidate for DMA read/write. This function obeys the
|
||||||
* snooping on some machines (Medusa) and processors: The Medusa itself can
|
* snooping on some machines (Medusa) and processors: The Medusa itself can
|
||||||
|
@ -565,7 +565,7 @@ struct MFP
|
||||||
u_char char_dummy23;
|
u_char char_dummy23;
|
||||||
u_char usart_dta;
|
u_char usart_dta;
|
||||||
};
|
};
|
||||||
# define mfp ((*(volatile struct MFP*)MFP_BAS))
|
# define st_mfp ((*(volatile struct MFP*)MFP_BAS))
|
||||||
|
|
||||||
/* TT's second MFP */
|
/* TT's second MFP */
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ static inline int get_mfp_bit( unsigned irq, int type )
|
||||||
{ unsigned char mask, *reg;
|
{ unsigned char mask, *reg;
|
||||||
|
|
||||||
mask = 1 << (irq & 7);
|
mask = 1 << (irq & 7);
|
||||||
reg = (unsigned char *)&mfp.int_en_a + type*4 +
|
reg = (unsigned char *)&st_mfp.int_en_a + type*4 +
|
||||||
((irq & 8) >> 2) + (((irq-8) & 16) << 3);
|
((irq & 8) >> 2) + (((irq-8) & 16) << 3);
|
||||||
return( *reg & mask );
|
return( *reg & mask );
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ static inline void set_mfp_bit( unsigned irq, int type )
|
||||||
{ unsigned char mask, *reg;
|
{ unsigned char mask, *reg;
|
||||||
|
|
||||||
mask = 1 << (irq & 7);
|
mask = 1 << (irq & 7);
|
||||||
reg = (unsigned char *)&mfp.int_en_a + type*4 +
|
reg = (unsigned char *)&st_mfp.int_en_a + type*4 +
|
||||||
((irq & 8) >> 2) + (((irq-8) & 16) << 3);
|
((irq & 8) >> 2) + (((irq-8) & 16) << 3);
|
||||||
__asm__ __volatile__ ( "orb %0,%1"
|
__asm__ __volatile__ ( "orb %0,%1"
|
||||||
: : "di" (mask), "m" (*reg) : "memory" );
|
: : "di" (mask), "m" (*reg) : "memory" );
|
||||||
|
@ -134,7 +134,7 @@ static inline void clear_mfp_bit( unsigned irq, int type )
|
||||||
{ unsigned char mask, *reg;
|
{ unsigned char mask, *reg;
|
||||||
|
|
||||||
mask = ~(1 << (irq & 7));
|
mask = ~(1 << (irq & 7));
|
||||||
reg = (unsigned char *)&mfp.int_en_a + type*4 +
|
reg = (unsigned char *)&st_mfp.int_en_a + type*4 +
|
||||||
((irq & 8) >> 2) + (((irq-8) & 16) << 3);
|
((irq & 8) >> 2) + (((irq-8) & 16) << 3);
|
||||||
if (type == MFP_PENDING || type == MFP_SERVICE)
|
if (type == MFP_PENDING || type == MFP_SERVICE)
|
||||||
__asm__ __volatile__ ( "moveb %0,%1"
|
__asm__ __volatile__ ( "moveb %0,%1"
|
||||||
|
|
|
@ -603,7 +603,7 @@ config CAVIUM_OCTEON_SIMULATOR
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL
|
select SYS_SUPPORTS_64BIT_KERNEL
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
select SYS_SUPPORTS_HIGHMEM
|
select SYS_SUPPORTS_HIGHMEM
|
||||||
select CPU_CAVIUM_OCTEON
|
select SYS_HAS_CPU_CAVIUM_OCTEON
|
||||||
help
|
help
|
||||||
The Octeon simulator is software performance model of the Cavium
|
The Octeon simulator is software performance model of the Cavium
|
||||||
Octeon Processor. It supports simulating Octeon processors on x86
|
Octeon Processor. It supports simulating Octeon processors on x86
|
||||||
|
@ -618,7 +618,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
select SYS_SUPPORTS_HIGHMEM
|
select SYS_SUPPORTS_HIGHMEM
|
||||||
select SYS_HAS_EARLY_PRINTK
|
select SYS_HAS_EARLY_PRINTK
|
||||||
select CPU_CAVIUM_OCTEON
|
select SYS_HAS_CPU_CAVIUM_OCTEON
|
||||||
select SWAP_IO_SPACE
|
select SWAP_IO_SPACE
|
||||||
help
|
help
|
||||||
This option supports all of the Octeon reference boards from Cavium
|
This option supports all of the Octeon reference boards from Cavium
|
||||||
|
@ -1234,6 +1234,7 @@ config CPU_SB1
|
||||||
|
|
||||||
config CPU_CAVIUM_OCTEON
|
config CPU_CAVIUM_OCTEON
|
||||||
bool "Cavium Octeon processor"
|
bool "Cavium Octeon processor"
|
||||||
|
depends on SYS_HAS_CPU_CAVIUM_OCTEON
|
||||||
select IRQ_CPU
|
select IRQ_CPU
|
||||||
select IRQ_CPU_OCTEON
|
select IRQ_CPU_OCTEON
|
||||||
select CPU_HAS_PREFETCH
|
select CPU_HAS_PREFETCH
|
||||||
|
@ -1314,6 +1315,9 @@ config SYS_HAS_CPU_RM9000
|
||||||
config SYS_HAS_CPU_SB1
|
config SYS_HAS_CPU_SB1
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SYS_HAS_CPU_CAVIUM_OCTEON
|
||||||
|
bool
|
||||||
|
|
||||||
#
|
#
|
||||||
# CPU may reorder R->R, R->W, W->R, W->W
|
# CPU may reorder R->R, R->W, W->R, W->W
|
||||||
# Reordering beyond LL and SC is handled in WEAK_REORDERING_BEYOND_LLSC
|
# Reordering beyond LL and SC is handled in WEAK_REORDERING_BEYOND_LLSC
|
||||||
|
@ -1387,6 +1391,7 @@ config 32BIT
|
||||||
config 64BIT
|
config 64BIT
|
||||||
bool "64-bit kernel"
|
bool "64-bit kernel"
|
||||||
depends on CPU_SUPPORTS_64BIT_KERNEL && SYS_SUPPORTS_64BIT_KERNEL
|
depends on CPU_SUPPORTS_64BIT_KERNEL && SYS_SUPPORTS_64BIT_KERNEL
|
||||||
|
select HAVE_SYSCALL_WRAPPERS
|
||||||
help
|
help
|
||||||
Select this option if you want to build a 64-bit kernel.
|
Select this option if you want to build a 64-bit kernel.
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ void __init plat_time_init(void)
|
||||||
* setup counter 1 (RTC) to tick at full speed
|
* setup counter 1 (RTC) to tick at full speed
|
||||||
*/
|
*/
|
||||||
t = 0xffffff;
|
t = 0xffffff;
|
||||||
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T1S) && t--)
|
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_T1S) && --t)
|
||||||
asm volatile ("nop");
|
asm volatile ("nop");
|
||||||
if (!t)
|
if (!t)
|
||||||
goto cntr_err;
|
goto cntr_err;
|
||||||
|
@ -127,7 +127,7 @@ void __init plat_time_init(void)
|
||||||
au_sync();
|
au_sync();
|
||||||
|
|
||||||
t = 0xffffff;
|
t = 0xffffff;
|
||||||
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && t--)
|
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && --t)
|
||||||
asm volatile ("nop");
|
asm volatile ("nop");
|
||||||
if (!t)
|
if (!t)
|
||||||
goto cntr_err;
|
goto cntr_err;
|
||||||
|
@ -135,7 +135,7 @@ void __init plat_time_init(void)
|
||||||
au_sync();
|
au_sync();
|
||||||
|
|
||||||
t = 0xffffff;
|
t = 0xffffff;
|
||||||
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && t--)
|
while ((au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C1S) && --t)
|
||||||
asm volatile ("nop");
|
asm volatile ("nop");
|
||||||
if (!t)
|
if (!t)
|
||||||
goto cntr_err;
|
goto cntr_err;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#ifndef __ASM_SECCOMP_H
|
#ifndef __ASM_SECCOMP_H
|
||||||
|
|
||||||
#include <linux/thread_info.h>
|
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
|
|
||||||
#define __NR_seccomp_read __NR_read
|
#define __NR_seccomp_read __NR_read
|
||||||
|
|
|
@ -111,7 +111,6 @@ int show_interrupts(struct seq_file *p, void *v)
|
||||||
seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
|
seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]);
|
||||||
#endif
|
#endif
|
||||||
seq_printf(p, " %14s", irq_desc[i].chip->name);
|
seq_printf(p, " %14s", irq_desc[i].chip->name);
|
||||||
seq_printf(p, "-%-8s", irq_desc[i].name);
|
|
||||||
seq_printf(p, " %s", action->name);
|
seq_printf(p, " %s", action->name);
|
||||||
|
|
||||||
for (action=action->next; action; action = action->next)
|
for (action=action->next; action; action = action->next)
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/binfmts.h>
|
#include <linux/binfmts.h>
|
||||||
#include <linux/security.h>
|
#include <linux/security.h>
|
||||||
|
#include <linux/syscalls.h>
|
||||||
#include <linux/compat.h>
|
#include <linux/compat.h>
|
||||||
#include <linux/vfs.h>
|
#include <linux/vfs.h>
|
||||||
#include <linux/ipc.h>
|
#include <linux/ipc.h>
|
||||||
|
@ -63,9 +64,9 @@
|
||||||
#define merge_64(r1, r2) ((((r2) & 0xffffffffUL) << 32) + ((r1) & 0xffffffffUL))
|
#define merge_64(r1, r2) ((((r2) & 0xffffffffUL) << 32) + ((r1) & 0xffffffffUL))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
asmlinkage unsigned long
|
SYSCALL_DEFINE6(32_mmap2, unsigned long, addr, unsigned long, len,
|
||||||
sys32_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
|
unsigned long, prot, unsigned long, flags, unsigned long, fd,
|
||||||
unsigned long flags, unsigned long fd, unsigned long pgoff)
|
unsigned long, pgoff)
|
||||||
{
|
{
|
||||||
struct file * file = NULL;
|
struct file * file = NULL;
|
||||||
unsigned long error;
|
unsigned long error;
|
||||||
|
@ -121,21 +122,21 @@ struct rlimit32 {
|
||||||
int rlim_max;
|
int rlim_max;
|
||||||
};
|
};
|
||||||
|
|
||||||
asmlinkage long sys32_truncate64(const char __user * path,
|
SYSCALL_DEFINE4(32_truncate64, const char __user *, path,
|
||||||
unsigned long __dummy, int a2, int a3)
|
unsigned long, __dummy, unsigned long, a2, unsigned long, a3)
|
||||||
{
|
{
|
||||||
return sys_truncate(path, merge_64(a2, a3));
|
return sys_truncate(path, merge_64(a2, a3));
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy,
|
SYSCALL_DEFINE4(32_ftruncate64, unsigned long, fd, unsigned long, __dummy,
|
||||||
int a2, int a3)
|
unsigned long, a2, unsigned long, a3)
|
||||||
{
|
{
|
||||||
return sys_ftruncate(fd, merge_64(a2, a3));
|
return sys_ftruncate(fd, merge_64(a2, a3));
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high,
|
SYSCALL_DEFINE5(32_llseek, unsigned long, fd, unsigned long, offset_high,
|
||||||
unsigned int offset_low, loff_t __user * result,
|
unsigned long, offset_low, loff_t __user *, result,
|
||||||
unsigned int origin)
|
unsigned long, origin)
|
||||||
{
|
{
|
||||||
return sys_llseek(fd, offset_high, offset_low, result, origin);
|
return sys_llseek(fd, offset_high, offset_low, result, origin);
|
||||||
}
|
}
|
||||||
|
@ -144,20 +145,20 @@ asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high,
|
||||||
lseek back to original location. They fail just like lseek does on
|
lseek back to original location. They fail just like lseek does on
|
||||||
non-seekable files. */
|
non-seekable files. */
|
||||||
|
|
||||||
asmlinkage ssize_t sys32_pread(unsigned int fd, char __user * buf,
|
SYSCALL_DEFINE6(32_pread, unsigned long, fd, char __user *, buf, size_t, count,
|
||||||
size_t count, u32 unused, u64 a4, u64 a5)
|
unsigned long, unused, unsigned long, a4, unsigned long, a5)
|
||||||
{
|
{
|
||||||
return sys_pread64(fd, buf, count, merge_64(a4, a5));
|
return sys_pread64(fd, buf, count, merge_64(a4, a5));
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage ssize_t sys32_pwrite(unsigned int fd, const char __user * buf,
|
SYSCALL_DEFINE6(32_pwrite, unsigned int, fd, const char __user *, buf,
|
||||||
size_t count, u32 unused, u64 a4, u64 a5)
|
size_t, count, u32, unused, u64, a4, u64, a5)
|
||||||
{
|
{
|
||||||
return sys_pwrite64(fd, buf, count, merge_64(a4, a5));
|
return sys_pwrite64(fd, buf, count, merge_64(a4, a5));
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid,
|
SYSCALL_DEFINE2(32_sched_rr_get_interval, compat_pid_t, pid,
|
||||||
struct compat_timespec __user *interval)
|
struct compat_timespec __user *, interval)
|
||||||
{
|
{
|
||||||
struct timespec t;
|
struct timespec t;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -174,8 +175,8 @@ asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid,
|
||||||
|
|
||||||
#ifdef CONFIG_SYSVIPC
|
#ifdef CONFIG_SYSVIPC
|
||||||
|
|
||||||
asmlinkage long
|
SYSCALL_DEFINE6(32_ipc, u32, call, long, first, long, second, long, third,
|
||||||
sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth)
|
unsigned long, ptr, unsigned long, fifth)
|
||||||
{
|
{
|
||||||
int version, err;
|
int version, err;
|
||||||
|
|
||||||
|
@ -233,8 +234,8 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
asmlinkage long
|
SYSCALL_DEFINE6(32_ipc, u32, call, int, first, int, second, int, third,
|
||||||
sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth)
|
u32, ptr, u32 fifth)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
@ -242,7 +243,7 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth)
|
||||||
#endif /* CONFIG_SYSVIPC */
|
#endif /* CONFIG_SYSVIPC */
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS32_N32
|
#ifdef CONFIG_MIPS32_N32
|
||||||
asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg)
|
SYSCALL_DEFINE4(n32_semctl, int, semid, int, semnum, int, cmd, u32, arg)
|
||||||
{
|
{
|
||||||
/* compat_sys_semctl expects a pointer to union semun */
|
/* compat_sys_semctl expects a pointer to union semun */
|
||||||
u32 __user *uptr = compat_alloc_user_space(sizeof(u32));
|
u32 __user *uptr = compat_alloc_user_space(sizeof(u32));
|
||||||
|
@ -251,13 +252,14 @@ asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg)
|
||||||
return compat_sys_semctl(semid, semnum, cmd, uptr);
|
return compat_sys_semctl(semid, semnum, cmd, uptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long sysn32_msgsnd(int msqid, u32 msgp, unsigned msgsz, int msgflg)
|
SYSCALL_DEFINE4(n32_msgsnd, int, msqid, u32, msgp, unsigned int, msgsz,
|
||||||
|
int, msgflg)
|
||||||
{
|
{
|
||||||
return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp));
|
return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp));
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long sysn32_msgrcv(int msqid, u32 msgp, size_t msgsz, int msgtyp,
|
SYSCALL_DEFINE5(n32_msgrcv, int, msqid, u32, msgp, size_t, msgsz,
|
||||||
int msgflg)
|
int, msgtyp, int, msgflg)
|
||||||
{
|
{
|
||||||
return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64,
|
return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64,
|
||||||
compat_ptr(msgp));
|
compat_ptr(msgp));
|
||||||
|
@ -277,7 +279,7 @@ struct sysctl_args32
|
||||||
|
|
||||||
#ifdef CONFIG_SYSCTL_SYSCALL
|
#ifdef CONFIG_SYSCTL_SYSCALL
|
||||||
|
|
||||||
asmlinkage long sys32_sysctl(struct sysctl_args32 __user *args)
|
SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args)
|
||||||
{
|
{
|
||||||
struct sysctl_args32 tmp;
|
struct sysctl_args32 tmp;
|
||||||
int error;
|
int error;
|
||||||
|
@ -316,9 +318,16 @@ asmlinkage long sys32_sysctl(struct sysctl_args32 __user *args)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_SYSCTL_SYSCALL */
|
#endif /* CONFIG_SYSCTL_SYSCALL */
|
||||||
|
|
||||||
asmlinkage long sys32_newuname(struct new_utsname __user * name)
|
SYSCALL_DEFINE1(32_newuname, struct new_utsname __user *, name)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
@ -334,7 +343,7 @@ asmlinkage long sys32_newuname(struct new_utsname __user * name)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_personality(unsigned long personality)
|
SYSCALL_DEFINE1(32_personality, unsigned long, personality)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
personality &= 0xffffffff;
|
personality &= 0xffffffff;
|
||||||
|
@ -357,7 +366,7 @@ struct ustat32 {
|
||||||
|
|
||||||
extern asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf);
|
extern asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf);
|
||||||
|
|
||||||
asmlinkage int sys32_ustat(dev_t dev, struct ustat32 __user * ubuf32)
|
SYSCALL_DEFINE2(32_ustat, dev_t, dev, struct ustat32 __user *, ubuf32)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct ustat tmp;
|
struct ustat tmp;
|
||||||
|
@ -381,8 +390,8 @@ out:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset,
|
SYSCALL_DEFINE4(32_sendfile, long, out_fd, long, in_fd,
|
||||||
s32 count)
|
compat_off_t __user *, offset, s32, count)
|
||||||
{
|
{
|
||||||
mm_segment_t old_fs = get_fs();
|
mm_segment_t old_fs = get_fs();
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -399,7 +399,7 @@ einval: li v0, -ENOSYS
|
||||||
sys sys_swapon 2
|
sys sys_swapon 2
|
||||||
sys sys_reboot 3
|
sys sys_reboot 3
|
||||||
sys sys_old_readdir 3
|
sys sys_old_readdir 3
|
||||||
sys old_mmap 6 /* 4090 */
|
sys sys_mips_mmap 6 /* 4090 */
|
||||||
sys sys_munmap 2
|
sys sys_munmap 2
|
||||||
sys sys_truncate 2
|
sys sys_truncate 2
|
||||||
sys sys_ftruncate 2
|
sys sys_ftruncate 2
|
||||||
|
@ -519,7 +519,7 @@ einval: li v0, -ENOSYS
|
||||||
sys sys_sendfile 4
|
sys sys_sendfile 4
|
||||||
sys sys_ni_syscall 0
|
sys sys_ni_syscall 0
|
||||||
sys sys_ni_syscall 0
|
sys sys_ni_syscall 0
|
||||||
sys sys_mmap2 6 /* 4210 */
|
sys sys_mips_mmap2 6 /* 4210 */
|
||||||
sys sys_truncate64 4
|
sys sys_truncate64 4
|
||||||
sys sys_ftruncate64 4
|
sys sys_ftruncate64 4
|
||||||
sys sys_stat64 2
|
sys sys_stat64 2
|
||||||
|
|
|
@ -207,7 +207,7 @@ sys_call_table:
|
||||||
PTR sys_newlstat
|
PTR sys_newlstat
|
||||||
PTR sys_poll
|
PTR sys_poll
|
||||||
PTR sys_lseek
|
PTR sys_lseek
|
||||||
PTR old_mmap
|
PTR sys_mips_mmap
|
||||||
PTR sys_mprotect /* 5010 */
|
PTR sys_mprotect /* 5010 */
|
||||||
PTR sys_munmap
|
PTR sys_munmap
|
||||||
PTR sys_brk
|
PTR sys_brk
|
||||||
|
|
|
@ -129,12 +129,12 @@ EXPORT(sysn32_call_table)
|
||||||
PTR sys_newlstat
|
PTR sys_newlstat
|
||||||
PTR sys_poll
|
PTR sys_poll
|
||||||
PTR sys_lseek
|
PTR sys_lseek
|
||||||
PTR old_mmap
|
PTR sys_mips_mmap
|
||||||
PTR sys_mprotect /* 6010 */
|
PTR sys_mprotect /* 6010 */
|
||||||
PTR sys_munmap
|
PTR sys_munmap
|
||||||
PTR sys_brk
|
PTR sys_brk
|
||||||
PTR sys32_rt_sigaction
|
PTR sys_32_rt_sigaction
|
||||||
PTR sys32_rt_sigprocmask
|
PTR sys_32_rt_sigprocmask
|
||||||
PTR compat_sys_ioctl /* 6015 */
|
PTR compat_sys_ioctl /* 6015 */
|
||||||
PTR sys_pread64
|
PTR sys_pread64
|
||||||
PTR sys_pwrite64
|
PTR sys_pwrite64
|
||||||
|
@ -159,7 +159,7 @@ EXPORT(sysn32_call_table)
|
||||||
PTR compat_sys_setitimer
|
PTR compat_sys_setitimer
|
||||||
PTR sys_alarm
|
PTR sys_alarm
|
||||||
PTR sys_getpid
|
PTR sys_getpid
|
||||||
PTR sys32_sendfile
|
PTR sys_32_sendfile
|
||||||
PTR sys_socket /* 6040 */
|
PTR sys_socket /* 6040 */
|
||||||
PTR sys_connect
|
PTR sys_connect
|
||||||
PTR sys_accept
|
PTR sys_accept
|
||||||
|
@ -181,14 +181,14 @@ EXPORT(sysn32_call_table)
|
||||||
PTR sys_exit
|
PTR sys_exit
|
||||||
PTR compat_sys_wait4
|
PTR compat_sys_wait4
|
||||||
PTR sys_kill /* 6060 */
|
PTR sys_kill /* 6060 */
|
||||||
PTR sys32_newuname
|
PTR sys_32_newuname
|
||||||
PTR sys_semget
|
PTR sys_semget
|
||||||
PTR sys_semop
|
PTR sys_semop
|
||||||
PTR sysn32_semctl
|
PTR sys_n32_semctl
|
||||||
PTR sys_shmdt /* 6065 */
|
PTR sys_shmdt /* 6065 */
|
||||||
PTR sys_msgget
|
PTR sys_msgget
|
||||||
PTR sysn32_msgsnd
|
PTR sys_n32_msgsnd
|
||||||
PTR sysn32_msgrcv
|
PTR sys_n32_msgrcv
|
||||||
PTR compat_sys_msgctl
|
PTR compat_sys_msgctl
|
||||||
PTR compat_sys_fcntl /* 6070 */
|
PTR compat_sys_fcntl /* 6070 */
|
||||||
PTR sys_flock
|
PTR sys_flock
|
||||||
|
@ -245,15 +245,15 @@ EXPORT(sysn32_call_table)
|
||||||
PTR sys_getsid
|
PTR sys_getsid
|
||||||
PTR sys_capget
|
PTR sys_capget
|
||||||
PTR sys_capset
|
PTR sys_capset
|
||||||
PTR sys32_rt_sigpending /* 6125 */
|
PTR sys_32_rt_sigpending /* 6125 */
|
||||||
PTR compat_sys_rt_sigtimedwait
|
PTR compat_sys_rt_sigtimedwait
|
||||||
PTR sys32_rt_sigqueueinfo
|
PTR sys_32_rt_sigqueueinfo
|
||||||
PTR sysn32_rt_sigsuspend
|
PTR sysn32_rt_sigsuspend
|
||||||
PTR sys32_sigaltstack
|
PTR sys32_sigaltstack
|
||||||
PTR compat_sys_utime /* 6130 */
|
PTR compat_sys_utime /* 6130 */
|
||||||
PTR sys_mknod
|
PTR sys_mknod
|
||||||
PTR sys32_personality
|
PTR sys_32_personality
|
||||||
PTR sys32_ustat
|
PTR sys_32_ustat
|
||||||
PTR compat_sys_statfs
|
PTR compat_sys_statfs
|
||||||
PTR compat_sys_fstatfs /* 6135 */
|
PTR compat_sys_fstatfs /* 6135 */
|
||||||
PTR sys_sysfs
|
PTR sys_sysfs
|
||||||
|
@ -265,14 +265,14 @@ EXPORT(sysn32_call_table)
|
||||||
PTR sys_sched_getscheduler
|
PTR sys_sched_getscheduler
|
||||||
PTR sys_sched_get_priority_max
|
PTR sys_sched_get_priority_max
|
||||||
PTR sys_sched_get_priority_min
|
PTR sys_sched_get_priority_min
|
||||||
PTR sys32_sched_rr_get_interval /* 6145 */
|
PTR sys_32_sched_rr_get_interval /* 6145 */
|
||||||
PTR sys_mlock
|
PTR sys_mlock
|
||||||
PTR sys_munlock
|
PTR sys_munlock
|
||||||
PTR sys_mlockall
|
PTR sys_mlockall
|
||||||
PTR sys_munlockall
|
PTR sys_munlockall
|
||||||
PTR sys_vhangup /* 6150 */
|
PTR sys_vhangup /* 6150 */
|
||||||
PTR sys_pivot_root
|
PTR sys_pivot_root
|
||||||
PTR sys32_sysctl
|
PTR sys_32_sysctl
|
||||||
PTR sys_prctl
|
PTR sys_prctl
|
||||||
PTR compat_sys_adjtimex
|
PTR compat_sys_adjtimex
|
||||||
PTR compat_sys_setrlimit /* 6155 */
|
PTR compat_sys_setrlimit /* 6155 */
|
||||||
|
|
|
@ -265,12 +265,12 @@ sys_call_table:
|
||||||
PTR sys_olduname
|
PTR sys_olduname
|
||||||
PTR sys_umask /* 4060 */
|
PTR sys_umask /* 4060 */
|
||||||
PTR sys_chroot
|
PTR sys_chroot
|
||||||
PTR sys32_ustat
|
PTR sys_32_ustat
|
||||||
PTR sys_dup2
|
PTR sys_dup2
|
||||||
PTR sys_getppid
|
PTR sys_getppid
|
||||||
PTR sys_getpgrp /* 4065 */
|
PTR sys_getpgrp /* 4065 */
|
||||||
PTR sys_setsid
|
PTR sys_setsid
|
||||||
PTR sys32_sigaction
|
PTR sys_32_sigaction
|
||||||
PTR sys_sgetmask
|
PTR sys_sgetmask
|
||||||
PTR sys_ssetmask
|
PTR sys_ssetmask
|
||||||
PTR sys_setreuid /* 4070 */
|
PTR sys_setreuid /* 4070 */
|
||||||
|
@ -293,7 +293,7 @@ sys_call_table:
|
||||||
PTR sys_swapon
|
PTR sys_swapon
|
||||||
PTR sys_reboot
|
PTR sys_reboot
|
||||||
PTR compat_sys_old_readdir
|
PTR compat_sys_old_readdir
|
||||||
PTR old_mmap /* 4090 */
|
PTR sys_mips_mmap /* 4090 */
|
||||||
PTR sys_munmap
|
PTR sys_munmap
|
||||||
PTR sys_truncate
|
PTR sys_truncate
|
||||||
PTR sys_ftruncate
|
PTR sys_ftruncate
|
||||||
|
@ -320,12 +320,12 @@ sys_call_table:
|
||||||
PTR compat_sys_wait4
|
PTR compat_sys_wait4
|
||||||
PTR sys_swapoff /* 4115 */
|
PTR sys_swapoff /* 4115 */
|
||||||
PTR compat_sys_sysinfo
|
PTR compat_sys_sysinfo
|
||||||
PTR sys32_ipc
|
PTR sys_32_ipc
|
||||||
PTR sys_fsync
|
PTR sys_fsync
|
||||||
PTR sys32_sigreturn
|
PTR sys32_sigreturn
|
||||||
PTR sys32_clone /* 4120 */
|
PTR sys32_clone /* 4120 */
|
||||||
PTR sys_setdomainname
|
PTR sys_setdomainname
|
||||||
PTR sys32_newuname
|
PTR sys_32_newuname
|
||||||
PTR sys_ni_syscall /* sys_modify_ldt */
|
PTR sys_ni_syscall /* sys_modify_ldt */
|
||||||
PTR compat_sys_adjtimex
|
PTR compat_sys_adjtimex
|
||||||
PTR sys_mprotect /* 4125 */
|
PTR sys_mprotect /* 4125 */
|
||||||
|
@ -339,11 +339,11 @@ sys_call_table:
|
||||||
PTR sys_fchdir
|
PTR sys_fchdir
|
||||||
PTR sys_bdflush
|
PTR sys_bdflush
|
||||||
PTR sys_sysfs /* 4135 */
|
PTR sys_sysfs /* 4135 */
|
||||||
PTR sys32_personality
|
PTR sys_32_personality
|
||||||
PTR sys_ni_syscall /* for afs_syscall */
|
PTR sys_ni_syscall /* for afs_syscall */
|
||||||
PTR sys_setfsuid
|
PTR sys_setfsuid
|
||||||
PTR sys_setfsgid
|
PTR sys_setfsgid
|
||||||
PTR sys32_llseek /* 4140 */
|
PTR sys_32_llseek /* 4140 */
|
||||||
PTR compat_sys_getdents
|
PTR compat_sys_getdents
|
||||||
PTR compat_sys_select
|
PTR compat_sys_select
|
||||||
PTR sys_flock
|
PTR sys_flock
|
||||||
|
@ -356,7 +356,7 @@ sys_call_table:
|
||||||
PTR sys_ni_syscall /* 4150 */
|
PTR sys_ni_syscall /* 4150 */
|
||||||
PTR sys_getsid
|
PTR sys_getsid
|
||||||
PTR sys_fdatasync
|
PTR sys_fdatasync
|
||||||
PTR sys32_sysctl
|
PTR sys_32_sysctl
|
||||||
PTR sys_mlock
|
PTR sys_mlock
|
||||||
PTR sys_munlock /* 4155 */
|
PTR sys_munlock /* 4155 */
|
||||||
PTR sys_mlockall
|
PTR sys_mlockall
|
||||||
|
@ -368,7 +368,7 @@ sys_call_table:
|
||||||
PTR sys_sched_yield
|
PTR sys_sched_yield
|
||||||
PTR sys_sched_get_priority_max
|
PTR sys_sched_get_priority_max
|
||||||
PTR sys_sched_get_priority_min
|
PTR sys_sched_get_priority_min
|
||||||
PTR sys32_sched_rr_get_interval /* 4165 */
|
PTR sys_32_sched_rr_get_interval /* 4165 */
|
||||||
PTR compat_sys_nanosleep
|
PTR compat_sys_nanosleep
|
||||||
PTR sys_mremap
|
PTR sys_mremap
|
||||||
PTR sys_accept
|
PTR sys_accept
|
||||||
|
@ -397,25 +397,25 @@ sys_call_table:
|
||||||
PTR sys_getresgid
|
PTR sys_getresgid
|
||||||
PTR sys_prctl
|
PTR sys_prctl
|
||||||
PTR sys32_rt_sigreturn
|
PTR sys32_rt_sigreturn
|
||||||
PTR sys32_rt_sigaction
|
PTR sys_32_rt_sigaction
|
||||||
PTR sys32_rt_sigprocmask /* 4195 */
|
PTR sys_32_rt_sigprocmask /* 4195 */
|
||||||
PTR sys32_rt_sigpending
|
PTR sys_32_rt_sigpending
|
||||||
PTR compat_sys_rt_sigtimedwait
|
PTR compat_sys_rt_sigtimedwait
|
||||||
PTR sys32_rt_sigqueueinfo
|
PTR sys_32_rt_sigqueueinfo
|
||||||
PTR sys32_rt_sigsuspend
|
PTR sys32_rt_sigsuspend
|
||||||
PTR sys32_pread /* 4200 */
|
PTR sys_32_pread /* 4200 */
|
||||||
PTR sys32_pwrite
|
PTR sys_32_pwrite
|
||||||
PTR sys_chown
|
PTR sys_chown
|
||||||
PTR sys_getcwd
|
PTR sys_getcwd
|
||||||
PTR sys_capget
|
PTR sys_capget
|
||||||
PTR sys_capset /* 4205 */
|
PTR sys_capset /* 4205 */
|
||||||
PTR sys32_sigaltstack
|
PTR sys32_sigaltstack
|
||||||
PTR sys32_sendfile
|
PTR sys_32_sendfile
|
||||||
PTR sys_ni_syscall
|
PTR sys_ni_syscall
|
||||||
PTR sys_ni_syscall
|
PTR sys_ni_syscall
|
||||||
PTR sys32_mmap2 /* 4210 */
|
PTR sys_mips_mmap2 /* 4210 */
|
||||||
PTR sys32_truncate64
|
PTR sys_32_truncate64
|
||||||
PTR sys32_ftruncate64
|
PTR sys_32_ftruncate64
|
||||||
PTR sys_newstat
|
PTR sys_newstat
|
||||||
PTR sys_newlstat
|
PTR sys_newlstat
|
||||||
PTR sys_newfstat /* 4215 */
|
PTR sys_newfstat /* 4215 */
|
||||||
|
@ -481,7 +481,7 @@ sys_call_table:
|
||||||
PTR compat_sys_mq_notify /* 4275 */
|
PTR compat_sys_mq_notify /* 4275 */
|
||||||
PTR compat_sys_mq_getsetattr
|
PTR compat_sys_mq_getsetattr
|
||||||
PTR sys_ni_syscall /* sys_vserver */
|
PTR sys_ni_syscall /* sys_vserver */
|
||||||
PTR sys32_waitid
|
PTR sys_32_waitid
|
||||||
PTR sys_ni_syscall /* available, was setaltroot */
|
PTR sys_ni_syscall /* available, was setaltroot */
|
||||||
PTR sys_add_key /* 4280 */
|
PTR sys_add_key /* 4280 */
|
||||||
PTR sys_request_key
|
PTR sys_request_key
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/syscalls.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
#include <asm/abi.h>
|
#include <asm/abi.h>
|
||||||
|
@ -338,8 +339,8 @@ asmlinkage int sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TRAD_SIGNALS
|
#ifdef CONFIG_TRAD_SIGNALS
|
||||||
asmlinkage int sys_sigaction(int sig, const struct sigaction __user *act,
|
SYSCALL_DEFINE3(sigaction, int, sig, const struct sigaction __user *, act,
|
||||||
struct sigaction __user *oact)
|
struct sigaction __user *, oact)
|
||||||
{
|
{
|
||||||
struct k_sigaction new_ka, old_ka;
|
struct k_sigaction new_ka, old_ka;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -349,8 +349,8 @@ asmlinkage int sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
|
||||||
return -ERESTARTNOHAND;
|
return -ERESTARTNOHAND;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_sigaction(int sig, const struct sigaction32 __user *act,
|
SYSCALL_DEFINE3(32_sigaction, long, sig, const struct sigaction32 __user *, act,
|
||||||
struct sigaction32 __user *oact)
|
struct sigaction32 __user *, oact)
|
||||||
{
|
{
|
||||||
struct k_sigaction new_ka, old_ka;
|
struct k_sigaction new_ka, old_ka;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -704,9 +704,9 @@ struct mips_abi mips_abi_32 = {
|
||||||
.restart = __NR_O32_restart_syscall
|
.restart = __NR_O32_restart_syscall
|
||||||
};
|
};
|
||||||
|
|
||||||
asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
|
SYSCALL_DEFINE4(32_rt_sigaction, int, sig,
|
||||||
struct sigaction32 __user *oact,
|
const struct sigaction32 __user *, act,
|
||||||
unsigned int sigsetsize)
|
struct sigaction32 __user *, oact, unsigned int, sigsetsize)
|
||||||
{
|
{
|
||||||
struct k_sigaction new_sa, old_sa;
|
struct k_sigaction new_sa, old_sa;
|
||||||
int ret = -EINVAL;
|
int ret = -EINVAL;
|
||||||
|
@ -748,8 +748,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
|
SYSCALL_DEFINE4(32_rt_sigprocmask, int, how, compat_sigset_t __user *, set,
|
||||||
compat_sigset_t __user *oset, unsigned int sigsetsize)
|
compat_sigset_t __user *, oset, unsigned int, sigsetsize)
|
||||||
{
|
{
|
||||||
sigset_t old_set, new_set;
|
sigset_t old_set, new_set;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -770,8 +770,8 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset,
|
SYSCALL_DEFINE2(32_rt_sigpending, compat_sigset_t __user *, uset,
|
||||||
unsigned int sigsetsize)
|
unsigned int, sigsetsize)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
|
@ -787,7 +787,8 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo)
|
SYSCALL_DEFINE3(32_rt_sigqueueinfo, int, pid, int, sig,
|
||||||
|
compat_siginfo_t __user *, uinfo)
|
||||||
{
|
{
|
||||||
siginfo_t info;
|
siginfo_t info;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -802,10 +803,9 @@ asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage long
|
SYSCALL_DEFINE5(32_waitid, int, which, compat_pid_t, pid,
|
||||||
sys32_waitid(int which, compat_pid_t pid,
|
compat_siginfo_t __user *, uinfo, int, options,
|
||||||
compat_siginfo_t __user *uinfo, int options,
|
struct compat_rusage __user *, uru)
|
||||||
struct compat_rusage __user *uru)
|
|
||||||
{
|
{
|
||||||
siginfo_t info;
|
siginfo_t info;
|
||||||
struct rusage ru;
|
struct rusage ru;
|
||||||
|
|
|
@ -152,9 +152,9 @@ out:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage unsigned long
|
SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len,
|
||||||
old_mmap(unsigned long addr, unsigned long len, int prot,
|
unsigned long, prot, unsigned long, flags, unsigned long,
|
||||||
int flags, int fd, off_t offset)
|
fd, off_t, offset)
|
||||||
{
|
{
|
||||||
unsigned long result;
|
unsigned long result;
|
||||||
|
|
||||||
|
@ -168,9 +168,9 @@ out:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage unsigned long
|
SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len,
|
||||||
sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
|
unsigned long, prot, unsigned long, flags, unsigned long, fd,
|
||||||
unsigned long flags, unsigned long fd, unsigned long pgoff)
|
unsigned long, pgoff)
|
||||||
{
|
{
|
||||||
if (pgoff & (~PAGE_MASK >> 12))
|
if (pgoff & (~PAGE_MASK >> 12))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -240,7 +240,7 @@ out:
|
||||||
/*
|
/*
|
||||||
* Compacrapability ...
|
* Compacrapability ...
|
||||||
*/
|
*/
|
||||||
asmlinkage int sys_uname(struct old_utsname __user * name)
|
SYSCALL_DEFINE1(uname, struct old_utsname __user *, name)
|
||||||
{
|
{
|
||||||
if (name && !copy_to_user(name, utsname(), sizeof (*name)))
|
if (name && !copy_to_user(name, utsname(), sizeof (*name)))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -250,7 +250,7 @@ asmlinkage int sys_uname(struct old_utsname __user * name)
|
||||||
/*
|
/*
|
||||||
* Compacrapability ...
|
* Compacrapability ...
|
||||||
*/
|
*/
|
||||||
asmlinkage int sys_olduname(struct oldold_utsname __user * name)
|
SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ asmlinkage int sys_olduname(struct oldold_utsname __user * name)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys_set_thread_area(unsigned long addr)
|
SYSCALL_DEFINE1(set_thread_area, unsigned long, addr)
|
||||||
{
|
{
|
||||||
struct thread_info *ti = task_thread_info(current);
|
struct thread_info *ti = task_thread_info(current);
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@ asmlinkage int sys_set_thread_area(unsigned long addr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
|
asmlinkage int _sys_sysmips(long cmd, long arg1, long arg2, long arg3)
|
||||||
{
|
{
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case MIPS_ATOMIC_SET:
|
case MIPS_ATOMIC_SET:
|
||||||
|
@ -325,8 +325,8 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
|
||||||
*
|
*
|
||||||
* This is really horribly ugly.
|
* This is really horribly ugly.
|
||||||
*/
|
*/
|
||||||
asmlinkage int sys_ipc(unsigned int call, int first, int second,
|
SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, int, second,
|
||||||
unsigned long third, void __user *ptr, long fifth)
|
unsigned long, third, void __user *, ptr, long, fifth)
|
||||||
{
|
{
|
||||||
int version, ret;
|
int version, ret;
|
||||||
|
|
||||||
|
@ -411,7 +411,7 @@ asmlinkage int sys_ipc(unsigned int call, int first, int second,
|
||||||
/*
|
/*
|
||||||
* No implemented yet ...
|
* No implemented yet ...
|
||||||
*/
|
*/
|
||||||
asmlinkage int sys_cachectl(char *addr, int nbytes, int op)
|
SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/syscalls.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
@ -58,8 +59,8 @@ EXPORT_SYMBOL(_dma_cache_wback_inv);
|
||||||
* We could optimize the case where the cache argument is not BCACHE but
|
* We could optimize the case where the cache argument is not BCACHE but
|
||||||
* that seems very atypical use ...
|
* that seems very atypical use ...
|
||||||
*/
|
*/
|
||||||
asmlinkage int sys_cacheflush(unsigned long addr,
|
SYSCALL_DEFINE3(cacheflush, unsigned long, addr, unsigned long, bytes,
|
||||||
unsigned long bytes, unsigned int cache)
|
unsigned int, cache)
|
||||||
{
|
{
|
||||||
if (bytes == 0)
|
if (bytes == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -7,6 +7,7 @@ mainmenu "Linux Kernel Configuration"
|
||||||
|
|
||||||
config MN10300
|
config MN10300
|
||||||
def_bool y
|
def_bool y
|
||||||
|
select HAVE_OPROFILE
|
||||||
|
|
||||||
config AM33
|
config AM33
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
|
@ -173,7 +173,7 @@ static int pci_ampci_write_config_byte(struct pci_bus *bus, unsigned int devfn,
|
||||||
BRIDGEREGB(where) = value;
|
BRIDGEREGB(where) = value;
|
||||||
} else {
|
} else {
|
||||||
if (bus->number == 0 &&
|
if (bus->number == 0 &&
|
||||||
(devfn == PCI_DEVFN(2, 0) && devfn == PCI_DEVFN(3, 0))
|
(devfn == PCI_DEVFN(2, 0) || devfn == PCI_DEVFN(3, 0))
|
||||||
)
|
)
|
||||||
__pcidebug("<= %02x", bus, devfn, where, value);
|
__pcidebug("<= %02x", bus, devfn, where, value);
|
||||||
CONFIG_ADDRESS = CONFIG_CMD(bus, devfn, where);
|
CONFIG_ADDRESS = CONFIG_CMD(bus, devfn, where);
|
||||||
|
|
|
@ -210,5 +210,10 @@ struct compat_shmid64_ds {
|
||||||
compat_ulong_t __unused6;
|
compat_ulong_t __unused6;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline int is_compat_task(void)
|
||||||
|
{
|
||||||
|
return test_thread_flag(TIF_32BIT);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* _ASM_POWERPC_COMPAT_H */
|
#endif /* _ASM_POWERPC_COMPAT_H */
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
#ifndef _ASM_POWERPC_SECCOMP_H
|
#ifndef _ASM_POWERPC_SECCOMP_H
|
||||||
#define _ASM_POWERPC_SECCOMP_H
|
#define _ASM_POWERPC_SECCOMP_H
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
|
||||||
#include <linux/thread_info.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
|
|
||||||
#define __NR_seccomp_read __NR_read
|
#define __NR_seccomp_read __NR_read
|
||||||
|
|
|
@ -367,27 +367,24 @@ static int emulate_multiple(struct pt_regs *regs, unsigned char __user *addr,
|
||||||
static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg,
|
static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
char *ptr = (char *) ¤t->thread.TS_FPR(reg);
|
char *ptr0 = (char *) ¤t->thread.TS_FPR(reg);
|
||||||
int i, ret;
|
char *ptr1 = (char *) ¤t->thread.TS_FPR(reg+1);
|
||||||
|
int i, ret, sw = 0;
|
||||||
|
|
||||||
if (!(flags & F))
|
if (!(flags & F))
|
||||||
return 0;
|
return 0;
|
||||||
if (reg & 1)
|
if (reg & 1)
|
||||||
return 0; /* invalid form: FRS/FRT must be even */
|
return 0; /* invalid form: FRS/FRT must be even */
|
||||||
if (!(flags & SW)) {
|
if (flags & SW)
|
||||||
/* not byte-swapped - easy */
|
sw = 7;
|
||||||
if (!(flags & ST))
|
ret = 0;
|
||||||
ret = __copy_from_user(ptr, addr, 16);
|
for (i = 0; i < 8; ++i) {
|
||||||
else
|
if (!(flags & ST)) {
|
||||||
ret = __copy_to_user(addr, ptr, 16);
|
ret |= __get_user(ptr0[i^sw], addr + i);
|
||||||
} else {
|
ret |= __get_user(ptr1[i^sw], addr + i + 8);
|
||||||
/* each FPR value is byte-swapped separately */
|
} else {
|
||||||
ret = 0;
|
ret |= __put_user(ptr0[i^sw], addr + i);
|
||||||
for (i = 0; i < 16; ++i) {
|
ret |= __put_user(ptr1[i^sw], addr + i + 8);
|
||||||
if (!(flags & ST))
|
|
||||||
ret |= __get_user(ptr[i^7], addr + i);
|
|
||||||
else
|
|
||||||
ret |= __put_user(ptr[i^7], addr + i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
@ -62,18 +62,19 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
72: std r8,8(r3)
|
72: std r8,8(r3)
|
||||||
beq+ 3f
|
beq+ 3f
|
||||||
addi r3,r3,16
|
addi r3,r3,16
|
||||||
23: ld r9,8(r4)
|
|
||||||
.Ldo_tail:
|
.Ldo_tail:
|
||||||
bf cr7*4+1,1f
|
bf cr7*4+1,1f
|
||||||
rotldi r9,r9,32
|
23: lwz r9,8(r4)
|
||||||
|
addi r4,r4,4
|
||||||
73: stw r9,0(r3)
|
73: stw r9,0(r3)
|
||||||
addi r3,r3,4
|
addi r3,r3,4
|
||||||
1: bf cr7*4+2,2f
|
1: bf cr7*4+2,2f
|
||||||
rotldi r9,r9,16
|
44: lhz r9,8(r4)
|
||||||
|
addi r4,r4,2
|
||||||
74: sth r9,0(r3)
|
74: sth r9,0(r3)
|
||||||
addi r3,r3,2
|
addi r3,r3,2
|
||||||
2: bf cr7*4+3,3f
|
2: bf cr7*4+3,3f
|
||||||
rotldi r9,r9,8
|
45: lbz r9,8(r4)
|
||||||
75: stb r9,0(r3)
|
75: stb r9,0(r3)
|
||||||
3: li r3,0
|
3: li r3,0
|
||||||
blr
|
blr
|
||||||
|
@ -141,11 +142,24 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
6: cmpwi cr1,r5,8
|
6: cmpwi cr1,r5,8
|
||||||
addi r3,r3,32
|
addi r3,r3,32
|
||||||
sld r9,r9,r10
|
sld r9,r9,r10
|
||||||
ble cr1,.Ldo_tail
|
ble cr1,7f
|
||||||
34: ld r0,8(r4)
|
34: ld r0,8(r4)
|
||||||
srd r7,r0,r11
|
srd r7,r0,r11
|
||||||
or r9,r7,r9
|
or r9,r7,r9
|
||||||
b .Ldo_tail
|
7:
|
||||||
|
bf cr7*4+1,1f
|
||||||
|
rotldi r9,r9,32
|
||||||
|
94: stw r9,0(r3)
|
||||||
|
addi r3,r3,4
|
||||||
|
1: bf cr7*4+2,2f
|
||||||
|
rotldi r9,r9,16
|
||||||
|
95: sth r9,0(r3)
|
||||||
|
addi r3,r3,2
|
||||||
|
2: bf cr7*4+3,3f
|
||||||
|
rotldi r9,r9,8
|
||||||
|
96: stb r9,0(r3)
|
||||||
|
3: li r3,0
|
||||||
|
blr
|
||||||
|
|
||||||
.Ldst_unaligned:
|
.Ldst_unaligned:
|
||||||
PPC_MTOCRF 0x01,r6 /* put #bytes to 8B bdry into cr7 */
|
PPC_MTOCRF 0x01,r6 /* put #bytes to 8B bdry into cr7 */
|
||||||
|
@ -218,7 +232,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
121:
|
121:
|
||||||
132:
|
132:
|
||||||
addi r3,r3,8
|
addi r3,r3,8
|
||||||
123:
|
|
||||||
134:
|
134:
|
||||||
135:
|
135:
|
||||||
138:
|
138:
|
||||||
|
@ -226,6 +239,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
140:
|
140:
|
||||||
141:
|
141:
|
||||||
142:
|
142:
|
||||||
|
123:
|
||||||
|
144:
|
||||||
|
145:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* here we have had a fault on a load and r3 points to the first
|
* here we have had a fault on a load and r3 points to the first
|
||||||
|
@ -309,6 +325,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
187:
|
187:
|
||||||
188:
|
188:
|
||||||
189:
|
189:
|
||||||
|
194:
|
||||||
|
195:
|
||||||
|
196:
|
||||||
1:
|
1:
|
||||||
ld r6,-24(r1)
|
ld r6,-24(r1)
|
||||||
ld r5,-8(r1)
|
ld r5,-8(r1)
|
||||||
|
@ -329,7 +348,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
.llong 72b,172b
|
.llong 72b,172b
|
||||||
.llong 23b,123b
|
.llong 23b,123b
|
||||||
.llong 73b,173b
|
.llong 73b,173b
|
||||||
|
.llong 44b,144b
|
||||||
.llong 74b,174b
|
.llong 74b,174b
|
||||||
|
.llong 45b,145b
|
||||||
.llong 75b,175b
|
.llong 75b,175b
|
||||||
.llong 24b,124b
|
.llong 24b,124b
|
||||||
.llong 25b,125b
|
.llong 25b,125b
|
||||||
|
@ -347,6 +368,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
.llong 79b,179b
|
.llong 79b,179b
|
||||||
.llong 80b,180b
|
.llong 80b,180b
|
||||||
.llong 34b,134b
|
.llong 34b,134b
|
||||||
|
.llong 94b,194b
|
||||||
|
.llong 95b,195b
|
||||||
|
.llong 96b,196b
|
||||||
.llong 35b,135b
|
.llong 35b,135b
|
||||||
.llong 81b,181b
|
.llong 81b,181b
|
||||||
.llong 36b,136b
|
.llong 36b,136b
|
||||||
|
|
|
@ -53,18 +53,19 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
3: std r8,8(r3)
|
3: std r8,8(r3)
|
||||||
beq 3f
|
beq 3f
|
||||||
addi r3,r3,16
|
addi r3,r3,16
|
||||||
ld r9,8(r4)
|
|
||||||
.Ldo_tail:
|
.Ldo_tail:
|
||||||
bf cr7*4+1,1f
|
bf cr7*4+1,1f
|
||||||
rotldi r9,r9,32
|
lwz r9,8(r4)
|
||||||
|
addi r4,r4,4
|
||||||
stw r9,0(r3)
|
stw r9,0(r3)
|
||||||
addi r3,r3,4
|
addi r3,r3,4
|
||||||
1: bf cr7*4+2,2f
|
1: bf cr7*4+2,2f
|
||||||
rotldi r9,r9,16
|
lhz r9,8(r4)
|
||||||
|
addi r4,r4,2
|
||||||
sth r9,0(r3)
|
sth r9,0(r3)
|
||||||
addi r3,r3,2
|
addi r3,r3,2
|
||||||
2: bf cr7*4+3,3f
|
2: bf cr7*4+3,3f
|
||||||
rotldi r9,r9,8
|
lbz r9,8(r4)
|
||||||
stb r9,0(r3)
|
stb r9,0(r3)
|
||||||
3: ld r3,48(r1) /* return dest pointer */
|
3: ld r3,48(r1) /* return dest pointer */
|
||||||
blr
|
blr
|
||||||
|
@ -133,11 +134,24 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
||||||
cmpwi cr1,r5,8
|
cmpwi cr1,r5,8
|
||||||
addi r3,r3,32
|
addi r3,r3,32
|
||||||
sld r9,r9,r10
|
sld r9,r9,r10
|
||||||
ble cr1,.Ldo_tail
|
ble cr1,6f
|
||||||
ld r0,8(r4)
|
ld r0,8(r4)
|
||||||
srd r7,r0,r11
|
srd r7,r0,r11
|
||||||
or r9,r7,r9
|
or r9,r7,r9
|
||||||
b .Ldo_tail
|
6:
|
||||||
|
bf cr7*4+1,1f
|
||||||
|
rotldi r9,r9,32
|
||||||
|
stw r9,0(r3)
|
||||||
|
addi r3,r3,4
|
||||||
|
1: bf cr7*4+2,2f
|
||||||
|
rotldi r9,r9,16
|
||||||
|
sth r9,0(r3)
|
||||||
|
addi r3,r3,2
|
||||||
|
2: bf cr7*4+3,3f
|
||||||
|
rotldi r9,r9,8
|
||||||
|
stb r9,0(r3)
|
||||||
|
3: ld r3,48(r1) /* return dest pointer */
|
||||||
|
blr
|
||||||
|
|
||||||
.Ldst_unaligned:
|
.Ldst_unaligned:
|
||||||
PPC_MTOCRF 0x01,r6 # put #bytes to 8B bdry into cr7
|
PPC_MTOCRF 0x01,r6 # put #bytes to 8B bdry into cr7
|
||||||
|
|
|
@ -142,6 +142,10 @@ static void __init gef_sbc610_nec_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
|
/* Do not do the fixup on other platforms! */
|
||||||
|
if (!machine_is(gef_sbc610))
|
||||||
|
return;
|
||||||
|
|
||||||
printk(KERN_INFO "Running NEC uPD720101 Fixup\n");
|
printk(KERN_INFO "Running NEC uPD720101 Fixup\n");
|
||||||
|
|
||||||
/* Ensure ports 1, 2, 3, 4 & 5 are enabled */
|
/* Ensure ports 1, 2, 3, 4 & 5 are enabled */
|
||||||
|
|
|
@ -204,6 +204,23 @@ static int __init ppc4xx_setup_one_pci_PMM(struct pci_controller *hose,
|
||||||
{
|
{
|
||||||
u32 ma, pcila, pciha;
|
u32 ma, pcila, pciha;
|
||||||
|
|
||||||
|
/* Hack warning ! The "old" PCI 2.x cell only let us configure the low
|
||||||
|
* 32-bit of incoming PLB addresses. The top 4 bits of the 36-bit
|
||||||
|
* address are actually hard wired to a value that appears to depend
|
||||||
|
* on the specific SoC. For example, it's 0 on 440EP and 1 on 440EPx.
|
||||||
|
*
|
||||||
|
* The trick here is we just crop those top bits and ignore them when
|
||||||
|
* programming the chip. That means the device-tree has to be right
|
||||||
|
* for the specific part used (we don't print a warning if it's wrong
|
||||||
|
* but on the other hand, you'll crash quickly enough), but at least
|
||||||
|
* this code should work whatever the hard coded value is
|
||||||
|
*/
|
||||||
|
plb_addr &= 0xffffffffull;
|
||||||
|
|
||||||
|
/* Note: Due to the above hack, the test below doesn't actually test
|
||||||
|
* if you address is above 4G, but it tests that address and
|
||||||
|
* (address + size) are both contained in the same 4G
|
||||||
|
*/
|
||||||
if ((plb_addr + size) > 0xffffffffull || !is_power_of_2(size) ||
|
if ((plb_addr + size) > 0xffffffffull || !is_power_of_2(size) ||
|
||||||
size < 0x1000 || (plb_addr & (size - 1)) != 0) {
|
size < 0x1000 || (plb_addr & (size - 1)) != 0) {
|
||||||
printk(KERN_WARNING "%s: Resource out of range\n",
|
printk(KERN_WARNING "%s: Resource out of range\n",
|
||||||
|
|
|
@ -556,7 +556,7 @@ static void __exit aes_s390_fini(void)
|
||||||
module_init(aes_s390_init);
|
module_init(aes_s390_init);
|
||||||
module_exit(aes_s390_fini);
|
module_exit(aes_s390_fini);
|
||||||
|
|
||||||
MODULE_ALIAS("aes");
|
MODULE_ALIAS("aes-all");
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
|
MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/spi_gpio.h>
|
#include <linux/spi/spi_gpio.h>
|
||||||
#include <media/ov772x.h>
|
|
||||||
#include <media/soc_camera_platform.h>
|
#include <media/soc_camera_platform.h>
|
||||||
#include <media/sh_mobile_ceu.h>
|
#include <media/sh_mobile_ceu.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
|
@ -224,7 +223,6 @@ static void camera_power(int val)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_I2C
|
#ifdef CONFIG_I2C
|
||||||
/* support for the old ncm03j camera */
|
|
||||||
static unsigned char camera_ncm03j_magic[] =
|
static unsigned char camera_ncm03j_magic[] =
|
||||||
{
|
{
|
||||||
0x87, 0x00, 0x88, 0x08, 0x89, 0x01, 0x8A, 0xE8,
|
0x87, 0x00, 0x88, 0x08, 0x89, 0x01, 0x8A, 0xE8,
|
||||||
|
@ -245,23 +243,6 @@ static unsigned char camera_ncm03j_magic[] =
|
||||||
0x63, 0xD4, 0x64, 0xEA, 0xD6, 0x0F,
|
0x63, 0xD4, 0x64, 0xEA, 0xD6, 0x0F,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int camera_probe(void)
|
|
||||||
{
|
|
||||||
struct i2c_adapter *a = i2c_get_adapter(0);
|
|
||||||
struct i2c_msg msg;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
camera_power(1);
|
|
||||||
msg.addr = 0x6e;
|
|
||||||
msg.buf = camera_ncm03j_magic;
|
|
||||||
msg.len = 2;
|
|
||||||
msg.flags = 0;
|
|
||||||
ret = i2c_transfer(a, &msg, 1);
|
|
||||||
camera_power(0);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int camera_set_capture(struct soc_camera_platform_info *info,
|
static int camera_set_capture(struct soc_camera_platform_info *info,
|
||||||
int enable)
|
int enable)
|
||||||
{
|
{
|
||||||
|
@ -313,35 +294,8 @@ static struct platform_device camera_device = {
|
||||||
.platform_data = &camera_info,
|
.platform_data = &camera_info,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init camera_setup(void)
|
|
||||||
{
|
|
||||||
if (camera_probe() > 0)
|
|
||||||
platform_device_register(&camera_device);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
late_initcall(camera_setup);
|
|
||||||
|
|
||||||
#endif /* CONFIG_I2C */
|
#endif /* CONFIG_I2C */
|
||||||
|
|
||||||
static int ov7725_power(struct device *dev, int mode)
|
|
||||||
{
|
|
||||||
camera_power(0);
|
|
||||||
if (mode)
|
|
||||||
camera_power(1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct ov772x_camera_info ov7725_info = {
|
|
||||||
.buswidth = SOCAM_DATAWIDTH_8,
|
|
||||||
.flags = OV772X_FLAG_VFLIP | OV772X_FLAG_HFLIP,
|
|
||||||
.link = {
|
|
||||||
.power = ov7725_power,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct sh_mobile_ceu_info sh_mobile_ceu_info = {
|
static struct sh_mobile_ceu_info sh_mobile_ceu_info = {
|
||||||
.flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH |
|
.flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_HSYNC_ACTIVE_HIGH |
|
||||||
SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8,
|
SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_MASTER | SOCAM_DATAWIDTH_8,
|
||||||
|
@ -392,6 +346,9 @@ static struct platform_device *ap325rxa_devices[] __initdata = {
|
||||||
&ap325rxa_nor_flash_device,
|
&ap325rxa_nor_flash_device,
|
||||||
&lcdc_device,
|
&lcdc_device,
|
||||||
&ceu_device,
|
&ceu_device,
|
||||||
|
#ifdef CONFIG_I2C
|
||||||
|
&camera_device,
|
||||||
|
#endif
|
||||||
&nand_flash_device,
|
&nand_flash_device,
|
||||||
&sdcard_cn3_device,
|
&sdcard_cn3_device,
|
||||||
};
|
};
|
||||||
|
@ -400,10 +357,6 @@ static struct i2c_board_info __initdata ap325rxa_i2c_devices[] = {
|
||||||
{
|
{
|
||||||
I2C_BOARD_INFO("pcf8563", 0x51),
|
I2C_BOARD_INFO("pcf8563", 0x51),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
I2C_BOARD_INFO("ov772x", 0x21),
|
|
||||||
.platform_data = &ov7725_info,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct spi_board_info ap325rxa_spi_devices[] = {
|
static struct spi_board_info ap325rxa_spi_devices[] = {
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
#include <asm/freq.h>
|
#include <asm/freq.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
const static int pll1rate[]={1,2,3,4,6,8};
|
static const int pll1rate[]={1,2,3,4,6,8};
|
||||||
const static int pfc_divisors[]={1,2,3,4,6,8,12};
|
static const int pfc_divisors[]={1,2,3,4,6,8,12};
|
||||||
#define ifc_divisors pfc_divisors
|
#define ifc_divisors pfc_divisors
|
||||||
|
|
||||||
#if (CONFIG_SH_CLK_MD == 0)
|
#if (CONFIG_SH_CLK_MD == 0)
|
||||||
|
|
|
@ -240,4 +240,9 @@ struct compat_shmid64_ds {
|
||||||
unsigned int __unused2;
|
unsigned int __unused2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline int is_compat_task(void)
|
||||||
|
{
|
||||||
|
return test_thread_flag(TIF_32BIT);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_SPARC64_COMPAT_H */
|
#endif /* _ASM_SPARC64_COMPAT_H */
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
#ifndef _ASM_SECCOMP_H
|
#ifndef _ASM_SECCOMP_H
|
||||||
|
|
||||||
#include <linux/thread_info.h> /* already defines TIF_32BIT */
|
|
||||||
|
|
||||||
#ifndef TIF_32BIT
|
|
||||||
#error "unexpected TIF_32BIT on sparc64"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
|
|
||||||
#define __NR_seccomp_read __NR_read
|
#define __NR_seccomp_read __NR_read
|
||||||
|
|
|
@ -306,6 +306,7 @@ static int jbusmc_print_dimm(int syndrome_code,
|
||||||
buf[1] = '?';
|
buf[1] = '?';
|
||||||
buf[2] = '?';
|
buf[2] = '?';
|
||||||
buf[3] = '\0';
|
buf[3] = '\0';
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
p = dp->controller;
|
p = dp->controller;
|
||||||
prop = &p->layout;
|
prop = &p->layout;
|
||||||
|
|
|
@ -78,7 +78,7 @@ void vde_init_libstuff(struct vde_data *vpri, struct vde_init *init)
|
||||||
{
|
{
|
||||||
struct vde_open_args *args;
|
struct vde_open_args *args;
|
||||||
|
|
||||||
vpri->args = kmalloc(sizeof(struct vde_open_args), UM_GFP_KERNEL);
|
vpri->args = uml_kmalloc(sizeof(struct vde_open_args), UM_GFP_KERNEL);
|
||||||
if (vpri->args == NULL) {
|
if (vpri->args == NULL) {
|
||||||
printk(UM_KERN_ERR "vde_init_libstuff - vde_open_args "
|
printk(UM_KERN_ERR "vde_init_libstuff - vde_open_args "
|
||||||
"allocation failed");
|
"allocation failed");
|
||||||
|
@ -91,8 +91,8 @@ void vde_init_libstuff(struct vde_data *vpri, struct vde_init *init)
|
||||||
args->group = init->group;
|
args->group = init->group;
|
||||||
args->mode = init->mode ? init->mode : 0700;
|
args->mode = init->mode ? init->mode : 0700;
|
||||||
|
|
||||||
args->port ? printk(UM_KERN_INFO "port %d", args->port) :
|
args->port ? printk("port %d", args->port) :
|
||||||
printk(UM_KERN_INFO "undefined port");
|
printk("undefined port");
|
||||||
}
|
}
|
||||||
|
|
||||||
int vde_user_read(void *conn, void *buf, int len)
|
int vde_user_read(void *conn, void *buf, int len)
|
||||||
|
|
|
@ -1803,7 +1803,7 @@ config DMAR
|
||||||
remapping devices.
|
remapping devices.
|
||||||
|
|
||||||
config DMAR_DEFAULT_ON
|
config DMAR_DEFAULT_ON
|
||||||
def_bool n
|
def_bool y
|
||||||
prompt "Enable DMA Remapping Devices by default"
|
prompt "Enable DMA Remapping Devices by default"
|
||||||
depends on DMAR
|
depends on DMAR
|
||||||
help
|
help
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
is_io_mapping_possible(resource_size_t base, unsigned long size);
|
||||||
|
|
||||||
void *
|
void *
|
||||||
iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot);
|
iomap_atomic_prot_pfn(unsigned long pfn, enum km_type type, pgprot_t prot);
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
#ifndef _ASM_X86_SECCOMP_32_H
|
#ifndef _ASM_X86_SECCOMP_32_H
|
||||||
#define _ASM_X86_SECCOMP_32_H
|
#define _ASM_X86_SECCOMP_32_H
|
||||||
|
|
||||||
#include <linux/thread_info.h>
|
|
||||||
|
|
||||||
#ifdef TIF_32BIT
|
|
||||||
#error "unexpected TIF_32BIT on i386"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
|
|
||||||
#define __NR_seccomp_read __NR_read
|
#define __NR_seccomp_read __NR_read
|
||||||
|
|
|
@ -1,14 +1,6 @@
|
||||||
#ifndef _ASM_X86_SECCOMP_64_H
|
#ifndef _ASM_X86_SECCOMP_64_H
|
||||||
#define _ASM_X86_SECCOMP_64_H
|
#define _ASM_X86_SECCOMP_64_H
|
||||||
|
|
||||||
#include <linux/thread_info.h>
|
|
||||||
|
|
||||||
#ifdef TIF_32BIT
|
|
||||||
#error "unexpected TIF_32BIT on x86_64"
|
|
||||||
#else
|
|
||||||
#define TIF_32BIT TIF_IA32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <asm/ia32_unistd.h>
|
#include <asm/ia32_unistd.h>
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
* Hooray, we are in Long 64-bit mode (but still running in low memory)
|
* Hooray, we are in Long 64-bit mode (but still running in low memory)
|
||||||
*/
|
*/
|
||||||
ENTRY(wakeup_long64)
|
ENTRY(wakeup_long64)
|
||||||
wakeup_long64:
|
|
||||||
movq saved_magic, %rax
|
movq saved_magic, %rax
|
||||||
movq $0x123456789abcdef0, %rdx
|
movq $0x123456789abcdef0, %rdx
|
||||||
cmpq %rdx, %rax
|
cmpq %rdx, %rax
|
||||||
|
@ -34,16 +33,12 @@ wakeup_long64:
|
||||||
|
|
||||||
movq saved_rip, %rax
|
movq saved_rip, %rax
|
||||||
jmp *%rax
|
jmp *%rax
|
||||||
|
ENDPROC(wakeup_long64)
|
||||||
|
|
||||||
bogus_64_magic:
|
bogus_64_magic:
|
||||||
jmp bogus_64_magic
|
jmp bogus_64_magic
|
||||||
|
|
||||||
.align 2
|
ENTRY(do_suspend_lowlevel)
|
||||||
.p2align 4,,15
|
|
||||||
.globl do_suspend_lowlevel
|
|
||||||
.type do_suspend_lowlevel,@function
|
|
||||||
do_suspend_lowlevel:
|
|
||||||
.LFB5:
|
|
||||||
subq $8, %rsp
|
subq $8, %rsp
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
call save_processor_state
|
call save_processor_state
|
||||||
|
@ -67,7 +62,7 @@ do_suspend_lowlevel:
|
||||||
pushfq
|
pushfq
|
||||||
popq pt_regs_flags(%rax)
|
popq pt_regs_flags(%rax)
|
||||||
|
|
||||||
movq $.L97, saved_rip(%rip)
|
movq $resume_point, saved_rip(%rip)
|
||||||
|
|
||||||
movq %rsp, saved_rsp
|
movq %rsp, saved_rsp
|
||||||
movq %rbp, saved_rbp
|
movq %rbp, saved_rbp
|
||||||
|
@ -78,14 +73,12 @@ do_suspend_lowlevel:
|
||||||
addq $8, %rsp
|
addq $8, %rsp
|
||||||
movl $3, %edi
|
movl $3, %edi
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
jmp acpi_enter_sleep_state
|
call acpi_enter_sleep_state
|
||||||
.L97:
|
/* in case something went wrong, restore the machine status and go on */
|
||||||
.p2align 4,,7
|
jmp resume_point
|
||||||
.L99:
|
|
||||||
.align 4
|
|
||||||
movl $24, %eax
|
|
||||||
movw %ax, %ds
|
|
||||||
|
|
||||||
|
.align 4
|
||||||
|
resume_point:
|
||||||
/* We don't restore %rax, it must be 0 anyway */
|
/* We don't restore %rax, it must be 0 anyway */
|
||||||
movq $saved_context, %rax
|
movq $saved_context, %rax
|
||||||
movq saved_context_cr4(%rax), %rbx
|
movq saved_context_cr4(%rax), %rbx
|
||||||
|
@ -117,12 +110,9 @@ do_suspend_lowlevel:
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
addq $8, %rsp
|
addq $8, %rsp
|
||||||
jmp restore_processor_state
|
jmp restore_processor_state
|
||||||
.LFE5:
|
ENDPROC(do_suspend_lowlevel)
|
||||||
.Lfe5:
|
|
||||||
.size do_suspend_lowlevel, .Lfe5-do_suspend_lowlevel
|
|
||||||
|
|
||||||
.data
|
.data
|
||||||
ALIGN
|
|
||||||
ENTRY(saved_rbp) .quad 0
|
ENTRY(saved_rbp) .quad 0
|
||||||
ENTRY(saved_rsi) .quad 0
|
ENTRY(saved_rsi) .quad 0
|
||||||
ENTRY(saved_rdi) .quad 0
|
ENTRY(saved_rdi) .quad 0
|
||||||
|
|
|
@ -1192,6 +1192,7 @@ static int suspend(int vetoable)
|
||||||
device_suspend(PMSG_SUSPEND);
|
device_suspend(PMSG_SUSPEND);
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
device_power_down(PMSG_SUSPEND);
|
device_power_down(PMSG_SUSPEND);
|
||||||
|
sysdev_suspend(PMSG_SUSPEND);
|
||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
|
@ -1208,6 +1209,7 @@ static int suspend(int vetoable)
|
||||||
if (err != APM_SUCCESS)
|
if (err != APM_SUCCESS)
|
||||||
apm_error("suspend", err);
|
apm_error("suspend", err);
|
||||||
err = (err == APM_SUCCESS) ? 0 : -EIO;
|
err = (err == APM_SUCCESS) ? 0 : -EIO;
|
||||||
|
sysdev_resume();
|
||||||
device_power_up(PMSG_RESUME);
|
device_power_up(PMSG_RESUME);
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
device_resume(PMSG_RESUME);
|
device_resume(PMSG_RESUME);
|
||||||
|
@ -1228,6 +1230,7 @@ static void standby(void)
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
device_power_down(PMSG_SUSPEND);
|
device_power_down(PMSG_SUSPEND);
|
||||||
|
sysdev_suspend(PMSG_SUSPEND);
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
err = set_system_power_state(APM_STATE_STANDBY);
|
err = set_system_power_state(APM_STATE_STANDBY);
|
||||||
|
@ -1235,6 +1238,7 @@ static void standby(void)
|
||||||
apm_error("standby", err);
|
apm_error("standby", err);
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
|
sysdev_resume();
|
||||||
device_power_up(PMSG_RESUME);
|
device_power_up(PMSG_RESUME);
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
|
|
|
@ -490,7 +490,7 @@ static void __cpuinit mce_cpu_quirks(struct cpuinfo_x86 *c)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __cpuinit mce_cpu_features(struct cpuinfo_x86 *c)
|
static void mce_cpu_features(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
switch (c->x86_vendor) {
|
switch (c->x86_vendor) {
|
||||||
case X86_VENDOR_INTEL:
|
case X86_VENDOR_INTEL:
|
||||||
|
|
|
@ -121,7 +121,7 @@ static long threshold_restart_bank(void *_tr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cpu init entry point, called from mce.c with preempt off */
|
/* cpu init entry point, called from mce.c with preempt off */
|
||||||
void __cpuinit mce_amd_feature_init(struct cpuinfo_x86 *c)
|
void mce_amd_feature_init(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
unsigned int bank, block;
|
unsigned int bank, block;
|
||||||
unsigned int cpu = smp_processor_id();
|
unsigned int cpu = smp_processor_id();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue