Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-linus
This commit is contained in:
Коммит
399f486286
|
@ -225,8 +225,6 @@ kprobes.txt
|
|||
- documents the kernel probes debugging feature.
|
||||
kref.txt
|
||||
- docs on adding reference counters (krefs) to kernel objects.
|
||||
laptop-mode.txt
|
||||
- how to conserve battery power using laptop-mode.
|
||||
laptops/
|
||||
- directory with laptop related info and laptop driver documentation.
|
||||
ldm.txt
|
||||
|
@ -301,12 +299,8 @@ pcmcia/
|
|||
- info on the Linux PCMCIA driver.
|
||||
pi-futex.txt
|
||||
- documentation on lightweight PI-futexes.
|
||||
pm.txt
|
||||
- info on Linux power management support.
|
||||
pnp.txt
|
||||
- Linux Plug and Play documentation.
|
||||
power_supply_class.txt
|
||||
- Tells userspace about battery, UPS, AC or DC power supply properties
|
||||
power/
|
||||
- directory with info on Linux PCI power management.
|
||||
powerpc/
|
||||
|
|
|
@ -1,15 +1,7 @@
|
|||
Linux supports two methods of overriding the BIOS DSDT:
|
||||
Linux supports a method of overriding the BIOS DSDT:
|
||||
|
||||
CONFIG_ACPI_CUSTOM_DSDT builds the image into the kernel.
|
||||
|
||||
CONFIG_ACPI_CUSTOM_DSDT_INITRD adds the image to the initrd.
|
||||
|
||||
When to use these methods is described in detail on the
|
||||
When to use this method is described in detail on the
|
||||
Linux/ACPI home page:
|
||||
http://www.lesswatts.org/projects/acpi/overridingDSDT.php
|
||||
|
||||
Note that if both options are used, the DSDT supplied
|
||||
by the INITRD method takes precedence.
|
||||
|
||||
Documentation/initramfs-add-dsdt.sh is provided for convenience
|
||||
for use with the CONFIG_ACPI_CUSTOM_DSDT_INITRD method.
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
#!/bin/bash
|
||||
# Adds a DSDT file to the initrd (if it's an initramfs)
|
||||
# first argument is the name of archive
|
||||
# second argument is the name of the file to add
|
||||
# The file will be copied as /DSDT.aml
|
||||
|
||||
# 20060126: fix "Premature end of file" with some old cpio (Roland Robic)
|
||||
# 20060205: this time it should really work
|
||||
|
||||
# check the arguments
|
||||
if [ $# -ne 2 ]; then
|
||||
program_name=$(basename $0)
|
||||
echo "\
|
||||
$program_name: too few arguments
|
||||
Usage: $program_name initrd-name.img DSDT-to-add.aml
|
||||
Adds a DSDT file to an initrd (in initramfs format)
|
||||
|
||||
initrd-name.img: filename of the initrd in initramfs format
|
||||
DSDT-to-add.aml: filename of the DSDT file to add
|
||||
" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# we should check it's an initramfs
|
||||
|
||||
tempcpio=$(mktemp -d)
|
||||
# cleanup on exit, hangup, interrupt, quit, termination
|
||||
trap 'rm -rf $tempcpio' 0 1 2 3 15
|
||||
|
||||
# extract the archive
|
||||
gunzip -c "$1" > "$tempcpio"/initramfs.cpio || exit 1
|
||||
|
||||
# copy the DSDT file at the root of the directory so that we can call it "/DSDT.aml"
|
||||
cp -f "$2" "$tempcpio"/DSDT.aml
|
||||
|
||||
# add the file
|
||||
cd "$tempcpio"
|
||||
(echo DSDT.aml | cpio --quiet -H newc -o -A -O "$tempcpio"/initramfs.cpio) || exit 1
|
||||
cd "$OLDPWD"
|
||||
|
||||
# re-compress the archive
|
||||
gzip -c "$tempcpio"/initramfs.cpio > "$1"
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
Understanding fbdev's cmap
|
||||
--------------------------
|
||||
|
||||
These notes explain how X's dix layer uses fbdev's cmap structures.
|
||||
|
||||
*. example of relevant structures in fbdev as used for a 3-bit grayscale cmap
|
||||
struct fb_var_screeninfo {
|
||||
.bits_per_pixel = 8,
|
||||
.grayscale = 1,
|
||||
.red = { 4, 3, 0 },
|
||||
.green = { 0, 0, 0 },
|
||||
.blue = { 0, 0, 0 },
|
||||
}
|
||||
struct fb_fix_screeninfo {
|
||||
.visual = FB_VISUAL_STATIC_PSEUDOCOLOR,
|
||||
}
|
||||
for (i = 0; i < 8; i++)
|
||||
info->cmap.red[i] = (((2*i)+1)*(0xFFFF))/16;
|
||||
memcpy(info->cmap.green, info->cmap.red, sizeof(u16)*8);
|
||||
memcpy(info->cmap.blue, info->cmap.red, sizeof(u16)*8);
|
||||
|
||||
*. X11 apps do something like the following when trying to use grayscale.
|
||||
for (i=0; i < 8; i++) {
|
||||
char colorspec[64];
|
||||
memset(colorspec,0,64);
|
||||
sprintf(colorspec, "rgb:%x/%x/%x", i*36,i*36,i*36);
|
||||
if (!XParseColor(outputDisplay, testColormap, colorspec, &wantedColor))
|
||||
printf("Can't get color %s\n",colorspec);
|
||||
XAllocColor(outputDisplay, testColormap, &wantedColor);
|
||||
grays[i] = wantedColor;
|
||||
}
|
||||
There's also named equivalents like gray1..x provided you have an rgb.txt.
|
||||
|
||||
Somewhere in X's callchain, this results in a call to X code that handles the
|
||||
colormap. For example, Xfbdev hits the following:
|
||||
|
||||
xc-011010/programs/Xserver/dix/colormap.c:
|
||||
|
||||
FindBestPixel(pentFirst, size, prgb, channel)
|
||||
|
||||
dr = (long) pent->co.local.red - prgb->red;
|
||||
dg = (long) pent->co.local.green - prgb->green;
|
||||
db = (long) pent->co.local.blue - prgb->blue;
|
||||
sq = dr * dr;
|
||||
UnsignedToBigNum (sq, &sum);
|
||||
BigNumAdd (&sum, &temp, &sum);
|
||||
|
||||
co.local.red are entries that were brought in through FBIOGETCMAP which come
|
||||
directly from the info->cmap.red that was listed above. The prgb is the rgb
|
||||
that the app wants to match to. The above code is doing what looks like a least
|
||||
squares matching function. That's why the cmap entries can't be set to the left
|
||||
hand side boundaries of a color range.
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
Metronomefb
|
||||
-----------
|
||||
Maintained by Jaya Kumar <jayakumar.lkml.gmail.com>
|
||||
Last revised: Nov 20, 2007
|
||||
|
||||
Metronomefb is a driver for the Metronome display controller. The controller
|
||||
is from E-Ink Corporation. It is intended to be used to drive the E-Ink
|
||||
Vizplex display media. E-Ink hosts some details of this controller and the
|
||||
display media here http://www.e-ink.com/products/matrix/metronome.html .
|
||||
|
||||
Metronome is interfaced to the host CPU through the AMLCD interface. The
|
||||
host CPU generates the control information and the image in a framebuffer
|
||||
which is then delivered to the AMLCD interface by a host specific method.
|
||||
Currently, that's implemented for the PXA's LCDC controller. The display and
|
||||
error status are each pulled through individual GPIOs.
|
||||
|
||||
Metronomefb was written for the PXA255/gumstix/lyre combination and
|
||||
therefore currently has board set specific code in it. If other boards based on
|
||||
other architectures are available, then the host specific code can be separated
|
||||
and abstracted out.
|
||||
|
||||
Metronomefb requires waveform information which is delivered via the AMLCD
|
||||
interface to the metronome controller. The waveform information is expected to
|
||||
be delivered from userspace via the firmware class interface. The waveform file
|
||||
can be compressed as long as your udev or hotplug script is aware of the need
|
||||
to uncompress it before delivering it. metronomefb will ask for waveform.wbf
|
||||
which would typically go into /lib/firmware/waveform.wbf depending on your
|
||||
udev/hotplug setup. I have only tested with a single waveform file which was
|
||||
originally labeled 23P01201_60_WT0107_MTC. I do not know what it stands for.
|
||||
Caution should be exercised when manipulating the waveform as there may be
|
||||
a possibility that it could have some permanent effects on the display media.
|
||||
I neither have access to nor know exactly what the waveform does in terms of
|
||||
the physical media.
|
||||
|
||||
Metronomefb uses the deferred IO interface so that it can provide a memory
|
||||
mappable frame buffer. It has been tested with tinyx (Xfbdev). It is known
|
||||
to work at this time with xeyes, xclock, xloadimage, xpdf.
|
||||
|
|
@ -172,16 +172,6 @@ Who: Len Brown <len.brown@intel.com>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: ide-tape driver
|
||||
When: July 2008
|
||||
Files: drivers/ide/ide-tape.c
|
||||
Why: This driver might not have any users anymore and maintaining it for no
|
||||
reason is an effort no one wants to make.
|
||||
Who: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>, Borislav Petkov
|
||||
<petkovbb@googlemail.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: libata spindown skipping and warning
|
||||
When: Dec 2008
|
||||
Why: Some halt(8) implementations synchronize caches for and spin
|
||||
|
|
|
@ -1506,13 +1506,13 @@ laptop_mode
|
|||
-----------
|
||||
|
||||
laptop_mode is a knob that controls "laptop mode". All the things that are
|
||||
controlled by this knob are discussed in Documentation/laptop-mode.txt.
|
||||
controlled by this knob are discussed in Documentation/laptops/laptop-mode.txt.
|
||||
|
||||
block_dump
|
||||
----------
|
||||
|
||||
block_dump enables block I/O debugging when set to a nonzero value. More
|
||||
information on block I/O debugging is in Documentation/laptop-mode.txt.
|
||||
information on block I/O debugging is in Documentation/laptops/laptop-mode.txt.
|
||||
|
||||
swap_token_timeout
|
||||
------------------
|
||||
|
|
|
@ -1,20 +1,54 @@
|
|||
Hardware driver for Intel/AMD/VIA Random Number Generators (RNG)
|
||||
Copyright 2000,2001 Jeff Garzik <jgarzik@pobox.com>
|
||||
Copyright 2000,2001 Philipp Rumpf <prumpf@mandrakesoft.com>
|
||||
|
||||
Introduction:
|
||||
|
||||
The hw_random device driver is software that makes use of a
|
||||
The hw_random framework is software that makes use of a
|
||||
special hardware feature on your CPU or motherboard,
|
||||
a Random Number Generator (RNG).
|
||||
a Random Number Generator (RNG). The software has two parts:
|
||||
a core providing the /dev/hw_random character device and its
|
||||
sysfs support, plus a hardware-specific driver that plugs
|
||||
into that core.
|
||||
|
||||
In order to make effective use of this device driver, you
|
||||
To make the most effective use of these mechanisms, you
|
||||
should download the support software as well. Download the
|
||||
latest version of the "rng-tools" package from the
|
||||
hw_random driver's official Web site:
|
||||
|
||||
http://sourceforge.net/projects/gkernel/
|
||||
|
||||
Those tools use /dev/hw_random to fill the kernel entropy pool,
|
||||
which is used internally and exported by the /dev/urandom and
|
||||
/dev/random special files.
|
||||
|
||||
Theory of operation:
|
||||
|
||||
CHARACTER DEVICE. Using the standard open()
|
||||
and read() system calls, you can read random data from
|
||||
the hardware RNG device. This data is NOT CHECKED by any
|
||||
fitness tests, and could potentially be bogus (if the
|
||||
hardware is faulty or has been tampered with). Data is only
|
||||
output if the hardware "has-data" flag is set, but nevertheless
|
||||
a security-conscious person would run fitness tests on the
|
||||
data before assuming it is truly random.
|
||||
|
||||
The rng-tools package uses such tests in "rngd", and lets you
|
||||
run them by hand with a "rngtest" utility.
|
||||
|
||||
/dev/hw_random is char device major 10, minor 183.
|
||||
|
||||
CLASS DEVICE. There is a /sys/class/misc/hw_random node with
|
||||
two unique attributes, "rng_available" and "rng_current". The
|
||||
"rng_available" attribute lists the hardware-specific drivers
|
||||
available, while "rng_current" lists the one which is currently
|
||||
connected to /dev/hw_random. If your system has more than one
|
||||
RNG available, you may change the one used by writing a name from
|
||||
the list in "rng_available" into "rng_current".
|
||||
|
||||
==========================================================================
|
||||
|
||||
Hardware driver for Intel/AMD/VIA Random Number Generators (RNG)
|
||||
Copyright 2000,2001 Jeff Garzik <jgarzik@pobox.com>
|
||||
Copyright 2000,2001 Philipp Rumpf <prumpf@mandrakesoft.com>
|
||||
|
||||
|
||||
About the Intel RNG hardware, from the firmware hub datasheet:
|
||||
|
||||
The Firmware Hub integrates a Random Number Generator (RNG)
|
||||
|
@ -25,20 +59,7 @@ About the Intel RNG hardware, from the firmware hub datasheet:
|
|||
access to our RNG for use as a security feature. At this time,
|
||||
the RNG is only to be used with a system in an OS-present state.
|
||||
|
||||
Theory of operation:
|
||||
|
||||
Character driver. Using the standard open()
|
||||
and read() system calls, you can read random data from
|
||||
the hardware RNG device. This data is NOT CHECKED by any
|
||||
fitness tests, and could potentially be bogus (if the
|
||||
hardware is faulty or has been tampered with). Data is only
|
||||
output if the hardware "has-data" flag is set, but nevertheless
|
||||
a security-conscious person would run fitness tests on the
|
||||
data before assuming it is truly random.
|
||||
|
||||
/dev/hwrandom is char device major 10, minor 183.
|
||||
|
||||
Driver notes:
|
||||
Intel RNG Driver notes:
|
||||
|
||||
* FIXME: support poll(2)
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ Every PCI card emits a PCI IRQ, which can be INTA, INTB, INTC or INTD:
|
|||
|
||||
These INTA-D PCI IRQs are always 'local to the card', their real meaning
|
||||
depends on which slot they are in. If you look at the daisy chaining diagram,
|
||||
a card in slot4, issuing INTA IRQ, it will end up as a signal on PIRQ2 of
|
||||
a card in slot4, issuing INTA IRQ, it will end up as a signal on PIRQ4 of
|
||||
the PCI chipset. Most cards issue INTA, this creates optimal distribution
|
||||
between the PIRQ lines. (distributing IRQ sources properly is not a
|
||||
necessity, PCI IRQs can be shared at will, but it's a good for performance
|
||||
|
|
|
@ -105,7 +105,7 @@ Drives are normally found by auto-probing and/or examining the CMOS/BIOS data.
|
|||
For really weird situations, the apparent (fdisk) geometry can also be specified
|
||||
on the kernel "command line" using LILO. The format of such lines is:
|
||||
|
||||
hdx=cyls,heads,sects,wpcom,irq
|
||||
hdx=cyls,heads,sects
|
||||
or hdx=cdrom
|
||||
|
||||
where hdx can be any of hda through hdh, Three values are required
|
||||
|
@ -214,9 +214,9 @@ driver using the "options=" keyword to insmod, while replacing any ',' with
|
|||
Summary of ide driver parameters for kernel command line
|
||||
--------------------------------------------------------
|
||||
|
||||
"hdx=" is recognized for all "x" from "a" to "h", such as "hdc".
|
||||
"hdx=" is recognized for all "x" from "a" to "u", such as "hdc".
|
||||
|
||||
"idex=" is recognized for all "x" from "0" to "3", such as "ide1".
|
||||
"idex=" is recognized for all "x" from "0" to "9", such as "ide1".
|
||||
|
||||
"hdx=noprobe" : drive may be present, but do not probe for it
|
||||
|
||||
|
@ -228,13 +228,6 @@ Summary of ide driver parameters for kernel command line
|
|||
|
||||
"hdx=cyl,head,sect" : disk drive is present, with specified geometry
|
||||
|
||||
"hdx=remap" : remap access of sector 0 to sector 1 (for EZDrive)
|
||||
|
||||
"hdx=remap63" : remap the drive: add 63 to all sector numbers
|
||||
(for DM OnTrack)
|
||||
|
||||
"idex=noautotune" : driver will NOT attempt to tune interface speed
|
||||
|
||||
"hdx=autotune" : driver will attempt to tune interface speed
|
||||
to the fastest PIO mode supported,
|
||||
if possible for this drive only.
|
||||
|
@ -244,10 +237,6 @@ Summary of ide driver parameters for kernel command line
|
|||
|
||||
"hdx=nodma" : disallow DMA
|
||||
|
||||
"hdx=scsi" : the return of the ide-scsi flag, this is useful for
|
||||
allowing ide-floppy, ide-tape, and ide-cdrom|writers
|
||||
to use ide-scsi emulation on a device specific option.
|
||||
|
||||
"idebus=xx" : inform IDE driver of VESA/PCI bus speed in MHz,
|
||||
where "xx" is between 20 and 66 inclusive,
|
||||
used when tuning chipset PIO modes.
|
||||
|
@ -282,10 +271,6 @@ Summary of ide driver parameters for kernel command line
|
|||
|
||||
"ide=reverse" : formerly called to pci sub-system, but now local.
|
||||
|
||||
The following are valid ONLY on ide0, which usually corresponds
|
||||
to the first ATA interface found on the particular host, and the defaults for
|
||||
the base,ctl ports must not be altered.
|
||||
|
||||
"ide=doubler" : probe/support IDE doublers on Amiga
|
||||
|
||||
There may be more options than shown -- use the source, Luke!
|
||||
|
|
|
@ -138,7 +138,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
strict -- Be less tolerant of platforms that are not
|
||||
strictly ACPI specification compliant.
|
||||
|
||||
See also Documentation/pm.txt, pci=noacpi
|
||||
See also Documentation/power/pm.txt, pci=noacpi
|
||||
|
||||
acpi_apic_instance= [ACPI, IOAPIC]
|
||||
Format: <int>
|
||||
|
@ -177,9 +177,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
|
||||
acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT
|
||||
|
||||
acpi_no_initrd_override [KNL,ACPI]
|
||||
Disable loading custom ACPI tables from the initramfs
|
||||
|
||||
acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS
|
||||
Format: To spoof as Windows 98: ="Microsoft Windows"
|
||||
|
||||
|
@ -1133,6 +1130,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
memmap=nn[KMG]$ss[KMG]
|
||||
[KNL,ACPI] Mark specific memory as reserved.
|
||||
Region of memory to be used, from ss to ss+nn.
|
||||
Example: Exclude memory from 0x18690000-0x1869ffff
|
||||
memmap=64K$0x18690000
|
||||
or
|
||||
memmap=0x10000$0x18690000
|
||||
|
||||
meye.*= [HW] Set MotionEye Camera parameters
|
||||
See Documentation/video4linux/meye.txt.
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
- This file
|
||||
acer-wmi.txt
|
||||
- information on the Acer Laptop WMI Extras driver.
|
||||
laptop-mode.txt
|
||||
- how to conserve battery power using laptop-mode.
|
||||
sony-laptop.txt
|
||||
- Sony Notebook Control Driver (SNC) Readme.
|
||||
sonypi.txt
|
||||
|
|
|
@ -48,7 +48,7 @@ DSDT.
|
|||
|
||||
To send me the DSDT, as root/sudo:
|
||||
|
||||
cat /sys/firmware/acpi/DSDT > dsdt
|
||||
cat /sys/firmware/acpi/tables/DSDT > dsdt
|
||||
|
||||
And send me the resulting 'dsdt' file.
|
||||
|
||||
|
@ -169,7 +169,7 @@ can be added to acer-wmi.
|
|||
|
||||
The LED is exposed through the LED subsystem, and can be found in:
|
||||
|
||||
/sys/devices/platform/acer-wmi/leds/acer-mail:green/
|
||||
/sys/devices/platform/acer-wmi/leds/acer-wmi::mail/
|
||||
|
||||
The mail LED is autodetected, so if you don't have one, the LED device won't
|
||||
be registered.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*P:100 This is the Launcher code, a simple program which lays out the
|
||||
* "physical" memory for the new Guest by mapping the kernel image and the
|
||||
* virtual devices, then reads repeatedly from /dev/lguest to run the Guest.
|
||||
:*/
|
||||
* "physical" memory for the new Guest by mapping the kernel image and
|
||||
* the virtual devices, then opens /dev/lguest to tell the kernel
|
||||
* about the Guest and control it. :*/
|
||||
#define _LARGEFILE64_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
|
@ -43,7 +43,7 @@
|
|||
#include "linux/virtio_console.h"
|
||||
#include "linux/virtio_ring.h"
|
||||
#include "asm-x86/bootparam.h"
|
||||
/*L:110 We can ignore the 38 include files we need for this program, but I do
|
||||
/*L:110 We can ignore the 39 include files we need for this program, but I do
|
||||
* want to draw attention to the use of kernel-style types.
|
||||
*
|
||||
* As Linus said, "C is a Spartan language, and so should your naming be." I
|
||||
|
@ -320,7 +320,7 @@ static unsigned long map_elf(int elf_fd, const Elf32_Ehdr *ehdr)
|
|||
err(1, "Reading program headers");
|
||||
|
||||
/* Try all the headers: there are usually only three. A read-only one,
|
||||
* a read-write one, and a "note" section which isn't loadable. */
|
||||
* a read-write one, and a "note" section which we don't load. */
|
||||
for (i = 0; i < ehdr->e_phnum; i++) {
|
||||
/* If this isn't a loadable segment, we ignore it */
|
||||
if (phdr[i].p_type != PT_LOAD)
|
||||
|
@ -387,7 +387,7 @@ static unsigned long load_kernel(int fd)
|
|||
if (memcmp(hdr.e_ident, ELFMAG, SELFMAG) == 0)
|
||||
return map_elf(fd, &hdr);
|
||||
|
||||
/* Otherwise we assume it's a bzImage, and try to unpack it */
|
||||
/* Otherwise we assume it's a bzImage, and try to load it. */
|
||||
return load_bzimage(fd);
|
||||
}
|
||||
|
||||
|
@ -433,12 +433,12 @@ static unsigned long load_initrd(const char *name, unsigned long mem)
|
|||
return len;
|
||||
}
|
||||
|
||||
/* Once we know how much memory we have, we can construct simple linear page
|
||||
/* Once we know how much memory we have we can construct simple linear page
|
||||
* tables which set virtual == physical which will get the Guest far enough
|
||||
* into the boot to create its own.
|
||||
*
|
||||
* We lay them out of the way, just below the initrd (which is why we need to
|
||||
* know its size). */
|
||||
* know its size here). */
|
||||
static unsigned long setup_pagetables(unsigned long mem,
|
||||
unsigned long initrd_size)
|
||||
{
|
||||
|
@ -850,7 +850,8 @@ static void handle_console_output(int fd, struct virtqueue *vq)
|
|||
*
|
||||
* Handling output for network is also simple: we get all the output buffers
|
||||
* and write them (ignoring the first element) to this device's file descriptor
|
||||
* (stdout). */
|
||||
* (/dev/net/tun).
|
||||
*/
|
||||
static void handle_net_output(int fd, struct virtqueue *vq)
|
||||
{
|
||||
unsigned int head, out, in;
|
||||
|
@ -924,7 +925,7 @@ static void enable_fd(int fd, struct virtqueue *vq)
|
|||
write(waker_fd, &vq->dev->fd, sizeof(vq->dev->fd));
|
||||
}
|
||||
|
||||
/* Resetting a device is fairly easy. */
|
||||
/* When the Guest asks us to reset a device, it's is fairly easy. */
|
||||
static void reset_device(struct device *dev)
|
||||
{
|
||||
struct virtqueue *vq;
|
||||
|
@ -1003,8 +1004,8 @@ static void handle_input(int fd)
|
|||
if (select(devices.max_infd+1, &fds, NULL, NULL, &poll) == 0)
|
||||
break;
|
||||
|
||||
/* Otherwise, call the device(s) which have readable
|
||||
* file descriptors and a method of handling them. */
|
||||
/* Otherwise, call the device(s) which have readable file
|
||||
* descriptors and a method of handling them. */
|
||||
for (i = devices.dev; i; i = i->next) {
|
||||
if (i->handle_input && FD_ISSET(i->fd, &fds)) {
|
||||
int dev_fd;
|
||||
|
@ -1015,8 +1016,7 @@ static void handle_input(int fd)
|
|||
* should no longer service it. Networking and
|
||||
* console do this when there's no input
|
||||
* buffers to deliver into. Console also uses
|
||||
* it when it discovers that stdin is
|
||||
* closed. */
|
||||
* it when it discovers that stdin is closed. */
|
||||
FD_CLR(i->fd, &devices.infds);
|
||||
/* Tell waker to ignore it too, by sending a
|
||||
* negative fd number (-1, since 0 is a valid
|
||||
|
@ -1033,7 +1033,8 @@ static void handle_input(int fd)
|
|||
*
|
||||
* All devices need a descriptor so the Guest knows it exists, and a "struct
|
||||
* device" so the Launcher can keep track of it. We have common helper
|
||||
* routines to allocate and manage them. */
|
||||
* routines to allocate and manage them.
|
||||
*/
|
||||
|
||||
/* The layout of the device page is a "struct lguest_device_desc" followed by a
|
||||
* number of virtqueue descriptors, then two sets of feature bits, then an
|
||||
|
@ -1078,7 +1079,7 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
|
|||
struct virtqueue **i, *vq = malloc(sizeof(*vq));
|
||||
void *p;
|
||||
|
||||
/* First we need some pages for this virtqueue. */
|
||||
/* First we need some memory for this virtqueue. */
|
||||
pages = (vring_size(num_descs, getpagesize()) + getpagesize() - 1)
|
||||
/ getpagesize();
|
||||
p = get_pages(pages);
|
||||
|
@ -1122,7 +1123,7 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
|
|||
}
|
||||
|
||||
/* The first half of the feature bitmask is for us to advertise features. The
|
||||
* second half if for the Guest to accept features. */
|
||||
* second half is for the Guest to accept features. */
|
||||
static void add_feature(struct device *dev, unsigned bit)
|
||||
{
|
||||
u8 *features = get_feature_bits(dev);
|
||||
|
@ -1151,7 +1152,9 @@ static void set_config(struct device *dev, unsigned len, const void *conf)
|
|||
}
|
||||
|
||||
/* This routine does all the creation and setup of a new device, including
|
||||
* calling new_dev_desc() to allocate the descriptor and device memory. */
|
||||
* calling new_dev_desc() to allocate the descriptor and device memory.
|
||||
*
|
||||
* See what I mean about userspace being boring? */
|
||||
static struct device *new_device(const char *name, u16 type, int fd,
|
||||
bool (*handle_input)(int, struct device *))
|
||||
{
|
||||
|
@ -1383,7 +1386,6 @@ struct vblk_info
|
|||
* Launcher triggers interrupt to Guest. */
|
||||
int done_fd;
|
||||
};
|
||||
/*:*/
|
||||
|
||||
/*L:210
|
||||
* The Disk
|
||||
|
@ -1493,7 +1495,10 @@ static int io_thread(void *_dev)
|
|||
while (read(vblk->workpipe[0], &c, 1) == 1) {
|
||||
/* We acknowledge each request immediately to reduce latency,
|
||||
* rather than waiting until we've done them all. I haven't
|
||||
* measured to see if it makes any difference. */
|
||||
* measured to see if it makes any difference.
|
||||
*
|
||||
* That would be an interesting test, wouldn't it? You could
|
||||
* also try having more than one I/O thread. */
|
||||
while (service_io(dev))
|
||||
write(vblk->done_fd, &c, 1);
|
||||
}
|
||||
|
@ -1501,7 +1506,7 @@ static int io_thread(void *_dev)
|
|||
}
|
||||
|
||||
/* Now we've seen the I/O thread, we return to the Launcher to see what happens
|
||||
* when the thread tells us it's completed some I/O. */
|
||||
* when that thread tells us it's completed some I/O. */
|
||||
static bool handle_io_finish(int fd, struct device *dev)
|
||||
{
|
||||
char c;
|
||||
|
@ -1573,11 +1578,12 @@ static void setup_block_file(const char *filename)
|
|||
* more work. */
|
||||
pipe(vblk->workpipe);
|
||||
|
||||
/* Create stack for thread and run it */
|
||||
/* Create stack for thread and run it. Since stack grows upwards, we
|
||||
* point the stack pointer to the end of this region. */
|
||||
stack = malloc(32768);
|
||||
/* SIGCHLD - We dont "wait" for our cloned thread, so prevent it from
|
||||
* becoming a zombie. */
|
||||
if (clone(io_thread, stack + 32768, CLONE_VM | SIGCHLD, dev) == -1)
|
||||
if (clone(io_thread, stack + 32768, CLONE_VM | SIGCHLD, dev) == -1)
|
||||
err(1, "Creating clone");
|
||||
|
||||
/* We don't need to keep the I/O thread's end of the pipes open. */
|
||||
|
@ -1587,14 +1593,14 @@ static void setup_block_file(const char *filename)
|
|||
verbose("device %u: virtblock %llu sectors\n",
|
||||
devices.device_num, le64_to_cpu(conf.capacity));
|
||||
}
|
||||
/* That's the end of device setup. :*/
|
||||
/* That's the end of device setup. */
|
||||
|
||||
/* Reboot */
|
||||
/*L:230 Reboot is pretty easy: clean up and exec() the Launcher afresh. */
|
||||
static void __attribute__((noreturn)) restart_guest(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* Closing pipes causes the waker thread and io_threads to die, and
|
||||
/* Closing pipes causes the Waker thread and io_threads to die, and
|
||||
* closing /dev/lguest cleans up the Guest. Since we don't track all
|
||||
* open fds, we simply close everything beyond stderr. */
|
||||
for (i = 3; i < FD_SETSIZE; i++)
|
||||
|
@ -1603,7 +1609,7 @@ static void __attribute__((noreturn)) restart_guest(void)
|
|||
err(1, "Could not exec %s", main_args[0]);
|
||||
}
|
||||
|
||||
/*L:220 Finally we reach the core of the Launcher, which runs the Guest, serves
|
||||
/*L:220 Finally we reach the core of the Launcher which runs the Guest, serves
|
||||
* its input and output, and finally, lays it to rest. */
|
||||
static void __attribute__((noreturn)) run_guest(int lguest_fd)
|
||||
{
|
||||
|
@ -1644,7 +1650,7 @@ static void __attribute__((noreturn)) run_guest(int lguest_fd)
|
|||
err(1, "Resetting break");
|
||||
}
|
||||
}
|
||||
/*
|
||||
/*L:240
|
||||
* This is the end of the Launcher. The good news: we are over halfway
|
||||
* through! The bad news: the most fiendish part of the code still lies ahead
|
||||
* of us.
|
||||
|
@ -1691,8 +1697,8 @@ int main(int argc, char *argv[])
|
|||
* device receive input from a file descriptor, we keep an fdset
|
||||
* (infds) and the maximum fd number (max_infd) with the head of the
|
||||
* list. We also keep a pointer to the last device. Finally, we keep
|
||||
* the next interrupt number to hand out (1: remember that 0 is used by
|
||||
* the timer). */
|
||||
* the next interrupt number to use for devices (1: remember that 0 is
|
||||
* used by the timer). */
|
||||
FD_ZERO(&devices.infds);
|
||||
devices.max_infd = -1;
|
||||
devices.lastdev = NULL;
|
||||
|
@ -1793,8 +1799,8 @@ int main(int argc, char *argv[])
|
|||
lguest_fd = tell_kernel(pgdir, start);
|
||||
|
||||
/* We fork off a child process, which wakes the Launcher whenever one
|
||||
* of the input file descriptors needs attention. Otherwise we would
|
||||
* run the Guest until it tries to output something. */
|
||||
* of the input file descriptors needs attention. We call this the
|
||||
* Waker, and we'll cover it in a moment. */
|
||||
waker_fd = setup_waker(lguest_fd);
|
||||
|
||||
/* Finally, run the Guest. This doesn't return. */
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
Rusty's Remarkably Unreliable Guide to Lguest
|
||||
- or, A Young Coder's Illustrated Hypervisor
|
||||
http://lguest.ozlabs.org
|
||||
__
|
||||
(___()'`; Rusty's Remarkably Unreliable Guide to Lguest
|
||||
/, /` - or, A Young Coder's Illustrated Hypervisor
|
||||
\\"--\\ http://lguest.ozlabs.org
|
||||
|
||||
Lguest is designed to be a minimal hypervisor for the Linux kernel, for
|
||||
Linux developers and users to experiment with virtualization with the
|
||||
|
@ -41,12 +42,16 @@ Running Lguest:
|
|||
CONFIG_PHYSICAL_ALIGN=0x100000)
|
||||
|
||||
"Device Drivers":
|
||||
"Block devices"
|
||||
"Virtio block driver (EXPERIMENTAL)" = M/Y
|
||||
"Network device support"
|
||||
"Universal TUN/TAP device driver support" = M/Y
|
||||
(CONFIG_TUN=m)
|
||||
"Virtualization"
|
||||
"Linux hypervisor example code" = M/Y
|
||||
(CONFIG_LGUEST=m)
|
||||
"Virtio network driver (EXPERIMENTAL)" = M/Y
|
||||
(CONFIG_VIRTIO_BLK=m, CONFIG_VIRTIO_NET=m and CONFIG_TUN=m)
|
||||
|
||||
"Virtualization"
|
||||
"Linux hypervisor example code" = M/Y
|
||||
(CONFIG_LGUEST=m)
|
||||
|
||||
- A tool called "lguest" is available in this directory: type "make"
|
||||
to build it. If you didn't build your kernel in-tree, use "make
|
||||
|
|
|
@ -143,14 +143,7 @@ MCA Device Drivers
|
|||
|
||||
Currently, there are a number of MCA-specific device drivers.
|
||||
|
||||
1) PS/2 ESDI
|
||||
drivers/block/ps2esdi.c
|
||||
include/linux/ps2esdi.h
|
||||
Uses major number 36, and should use /dev files /dev/eda, /dev/edb.
|
||||
Supports two drives, but only one controller. May use the
|
||||
command-line args "ed=cyl,head,sec" and "tp720".
|
||||
|
||||
2) PS/2 SCSI
|
||||
1) PS/2 SCSI
|
||||
drivers/scsi/ibmmca.c
|
||||
drivers/scsi/ibmmca.h
|
||||
The driver for the IBM SCSI subsystem. Includes both integrated
|
||||
|
@ -159,25 +152,25 @@ Currently, there are a number of MCA-specific device drivers.
|
|||
machine with a front-panel display (i.e. model 95), you can use
|
||||
"ibmmcascsi=display" to enable a drive activity indicator.
|
||||
|
||||
3) 3c523
|
||||
2) 3c523
|
||||
drivers/net/3c523.c
|
||||
drivers/net/3c523.h
|
||||
3Com 3c523 Etherlink/MC ethernet driver.
|
||||
|
||||
4) SMC Ultra/MCA and IBM Adapter/A
|
||||
3) SMC Ultra/MCA and IBM Adapter/A
|
||||
drivers/net/smc-mca.c
|
||||
drivers/net/smc-mca.h
|
||||
Driver for the MCA version of the SMC Ultra and various other
|
||||
OEM'ed and work-alike cards (Elite, Adapter/A, etc).
|
||||
|
||||
5) NE/2
|
||||
4) NE/2
|
||||
driver/net/ne2.c
|
||||
driver/net/ne2.h
|
||||
The NE/2 is the MCA version of the NE2000. This may not work
|
||||
with clones that have a different adapter id than the original
|
||||
NE/2.
|
||||
|
||||
6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Adapter/A and
|
||||
5) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Adapter/A and
|
||||
Reply Sound Blaster/SCSI (SCSI part)
|
||||
Better support for these cards than the driver for ISA.
|
||||
Supports multiple cards with IRQ sharing.
|
||||
|
|
|
@ -23,8 +23,7 @@ kernel debugging options, such as Kernel Stack Meter or Kernel Tracer,
|
|||
may implicitly disable the NMI watchdog.]
|
||||
|
||||
For x86-64, the needed APIC is always compiled in, and the NMI watchdog is
|
||||
always enabled with I/O-APIC mode (nmi_watchdog=1). Currently, local APIC
|
||||
mode (nmi_watchdog=2) does not work on x86-64.
|
||||
always enabled with I/O-APIC mode (nmi_watchdog=1).
|
||||
|
||||
Using local APIC (nmi_watchdog=2) needs the first performance register, so
|
||||
you can't use it for other purposes (such as high precision performance
|
||||
|
|
|
@ -14,6 +14,12 @@ notifiers.txt
|
|||
- Registering suspend notifiers in device drivers
|
||||
pci.txt
|
||||
- How the PCI Subsystem Does Power Management
|
||||
pm.txt
|
||||
- info on Linux power management support.
|
||||
pm_qos_interface.txt
|
||||
- info on Linux PM Quality of Service interface
|
||||
power_supply_class.txt
|
||||
- Tells userspace about battery, UPS, AC or DC power supply properties
|
||||
s2ram.txt
|
||||
- How to get suspend to ram working (and debug it when it isn't)
|
||||
states.txt
|
||||
|
|
|
@ -108,7 +108,7 @@ void pm_unregister_all(pm_callback cback);
|
|||
* EINVAL if the request is not supported
|
||||
* EBUSY if the device is now busy and cannot handle the request
|
||||
* ENOMEM if the device was unable to handle the request due to memory
|
||||
*
|
||||
*
|
||||
* Details: The device request callback will be called before the
|
||||
* device/system enters a suspend state (ACPI D1-D3) or
|
||||
* or after the device/system resumes from suspend (ACPI D0).
|
|
@ -143,10 +143,10 @@ type Strings which represent the thermal zone type.
|
|||
This is given by thermal zone driver as part of registration.
|
||||
Eg: "ACPI thermal zone" indicates it's a ACPI thermal device
|
||||
RO
|
||||
Optional
|
||||
Required
|
||||
|
||||
temp Current temperature as reported by thermal zone (sensor)
|
||||
Unit: degree Celsius
|
||||
Unit: millidegree Celsius
|
||||
RO
|
||||
Required
|
||||
|
||||
|
@ -163,7 +163,7 @@ mode One of the predefined values in [kernel, user]
|
|||
charge of the thermal management.
|
||||
|
||||
trip_point_[0-*]_temp The temperature above which trip point will be fired
|
||||
Unit: degree Celsius
|
||||
Unit: millidegree Celsius
|
||||
RO
|
||||
Optional
|
||||
|
||||
|
@ -193,7 +193,7 @@ type String which represents the type of device
|
|||
eg. For memory controller device on intel_menlow platform:
|
||||
this should be "Memory controller"
|
||||
RO
|
||||
Optional
|
||||
Required
|
||||
|
||||
max_state The maximum permissible cooling state of this cooling device.
|
||||
RO
|
||||
|
@ -219,16 +219,16 @@ the sys I/F structure will be built like this:
|
|||
|
||||
|thermal_zone1:
|
||||
|-----type: ACPI thermal zone
|
||||
|-----temp: 37
|
||||
|-----temp: 37000
|
||||
|-----mode: kernel
|
||||
|-----trip_point_0_temp: 100
|
||||
|-----trip_point_0_temp: 100000
|
||||
|-----trip_point_0_type: critical
|
||||
|-----trip_point_1_temp: 80
|
||||
|-----trip_point_1_temp: 80000
|
||||
|-----trip_point_1_type: passive
|
||||
|-----trip_point_2_temp: 70
|
||||
|-----trip_point_2_type: active[0]
|
||||
|-----trip_point_3_temp: 60
|
||||
|-----trip_point_3_type: active[1]
|
||||
|-----trip_point_2_temp: 70000
|
||||
|-----trip_point_2_type: active0
|
||||
|-----trip_point_3_temp: 60000
|
||||
|-----trip_point_3_type: active1
|
||||
|-----cdev0: --->/sys/class/thermal/cooling_device0
|
||||
|-----cdev0_trip_point: 1 /* cdev0 can be used for passive */
|
||||
|-----cdev1: --->/sys/class/thermal/cooling_device3
|
||||
|
|
63
MAINTAINERS
63
MAINTAINERS
|
@ -163,6 +163,12 @@ M: A2232@gmx.net
|
|||
L: linux-m68k@lists.linux-m68k.org
|
||||
S: Maintained
|
||||
|
||||
AFS FILESYSTEM & AF_RXRPC SOCKET DOMAIN
|
||||
P: David Howells
|
||||
M: dhowells@redhat.com
|
||||
L: linux-afs@lists.infradead.org
|
||||
S: Supported
|
||||
|
||||
AIO
|
||||
P: Benjamin LaHaise
|
||||
M: bcrl@kvack.org
|
||||
|
@ -266,6 +272,15 @@ L: linux-acpi@vger.kernel.org
|
|||
W: http://www.lesswatts.org/projects/acpi/
|
||||
S: Maintained
|
||||
|
||||
AD1889 ALSA SOUND DRIVER
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
P: Thibaut Varene
|
||||
M: T-Bone@parisc-linux.org
|
||||
W: http://wiki.parisc-linux.org/AD1889
|
||||
L: linux-parisc@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
ADM1025 HARDWARE MONITOR DRIVER
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
|
@ -443,7 +458,7 @@ S: Maintained
|
|||
|
||||
ARM/ATMEL AT91RM9200 ARM ARCHITECTURE
|
||||
P: Andrew Victor
|
||||
M: andrew@sanpeople.com
|
||||
M: linux@maxim.org.za
|
||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||
W: http://maxim.org.za/at91_26.html
|
||||
S: Maintained
|
||||
|
@ -871,7 +886,7 @@ P: Marcel Holtmann
|
|||
M: marcel@holtmann.org
|
||||
P: Maxim Krasnyansky
|
||||
M: maxk@qualcomm.com
|
||||
L: bluez-devel@lists.sf.net
|
||||
L: linux-bluetooth@vger.kernel.org
|
||||
W: http://bluez.sf.net
|
||||
W: http://www.bluez.org
|
||||
W: http://www.holtmann.org/linux/bluetooth/
|
||||
|
@ -2052,43 +2067,19 @@ M: kernel@wantstofly.org
|
|||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
INTEL PRO/100 ETHERNET SUPPORT
|
||||
INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/ixgb/ixgbe)
|
||||
P: Auke Kok
|
||||
M: auke-jan.h.kok@intel.com
|
||||
P: Jesse Brandeburg
|
||||
M: jesse.brandeburg@intel.com
|
||||
P: Jeff Kirsher
|
||||
M: jeffrey.t.kirsher@intel.com
|
||||
P: Bruce Allan
|
||||
M: bruce.w.allan@intel.com
|
||||
P: John Ronciak
|
||||
M: john.ronciak@intel.com
|
||||
L: e1000-devel@lists.sourceforge.net
|
||||
W: http://sourceforge.net/projects/e1000/
|
||||
S: Supported
|
||||
|
||||
INTEL PRO/1000 GIGABIT ETHERNET SUPPORT
|
||||
P: Auke Kok
|
||||
M: auke-jan.h.kok@intel.com
|
||||
P: Jesse Brandeburg
|
||||
M: jesse.brandeburg@intel.com
|
||||
P: Jeff Kirsher
|
||||
M: jeffrey.t.kirsher@intel.com
|
||||
P: John Ronciak
|
||||
M: john.ronciak@intel.com
|
||||
L: e1000-devel@lists.sourceforge.net
|
||||
W: http://sourceforge.net/projects/e1000/
|
||||
S: Supported
|
||||
|
||||
INTEL PRO/10GbE SUPPORT
|
||||
P: Ayyappan Veeraiyan
|
||||
M: ayyappan.veeraiyan@intel.com
|
||||
P: Auke Kok
|
||||
M: auke-jan.h.kok@intel.com
|
||||
P: Jesse Brandeburg
|
||||
M: jesse.brandeburg@intel.com
|
||||
P: John Ronciak
|
||||
M: john.ronciak@intel.com
|
||||
L: e1000-devel@lists.sourceforge.net
|
||||
W: http://sourceforge.net/projects/e1000/
|
||||
W: http://e1000.sourceforge.net/
|
||||
S: Supported
|
||||
|
||||
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
|
||||
|
@ -2125,7 +2116,7 @@ M: reinette.chatre@intel.com
|
|||
L: linux-wireless@vger.kernel.org
|
||||
L: ipw3945-devel@lists.sourceforge.net
|
||||
W: http://intellinuxwireless.org
|
||||
T: git git://intellinuxwireless.org/repos/iwlwifi
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rchatre/iwlwifi-2.6.git
|
||||
S: Supported
|
||||
|
||||
IOC3 ETHERNET DRIVER
|
||||
|
@ -2329,14 +2320,14 @@ L: kexec@lists.infradead.org
|
|||
S: Maintained
|
||||
|
||||
KPROBES
|
||||
P: Prasanna S Panchamukhi
|
||||
M: prasanna@in.ibm.com
|
||||
P: Ananth N Mavinakayanahalli
|
||||
M: ananth@in.ibm.com
|
||||
P: Anil S Keshavamurthy
|
||||
M: anil.s.keshavamurthy@intel.com
|
||||
P: David S. Miller
|
||||
M: davem@davemloft.net
|
||||
P: Masami Hiramatsu
|
||||
M: mhiramat@redhat.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
|
@ -2950,9 +2941,9 @@ S: Maintained
|
|||
|
||||
ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
|
||||
P: Mark Fasheh
|
||||
M: mark.fasheh@oracle.com
|
||||
P: Kurt Hackel
|
||||
M: kurt.hackel@oracle.com
|
||||
M: mfasheh@suse.com
|
||||
P: Joel Becker
|
||||
M: joel.becker@oracle.com
|
||||
L: ocfs2-devel@oss.oracle.com
|
||||
W: http://oss.oracle.com/projects/ocfs2/
|
||||
S: Supported
|
||||
|
|
4
Makefile
4
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 25
|
||||
EXTRAVERSION = -rc5
|
||||
EXTRAVERSION = -rc7
|
||||
NAME = Funky Weasel is Jiggy wit it
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -189,7 +189,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
|
|||
# Alternatively CROSS_COMPILE can be set in the environment.
|
||||
# Default value for CROSS_COMPILE is not to prefix executables
|
||||
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
|
||||
|
||||
export KBUILD_BUILDHOST := $(SUBARCH)
|
||||
ARCH ?= $(SUBARCH)
|
||||
CROSS_COMPILE ?=
|
||||
|
||||
|
|
|
@ -330,6 +330,9 @@ config PCI_DOMAINS
|
|||
config PCI_SYSCALL
|
||||
def_bool PCI
|
||||
|
||||
config IOMMU_HELPER
|
||||
def_bool PCI
|
||||
|
||||
config ALPHA_CORE_AGP
|
||||
bool
|
||||
depends on ALPHA_GENERIC || ALPHA_TITAN || ALPHA_MARVEL
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <linux/scatterlist.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/iommu-helper.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/hwrpb.h>
|
||||
|
@ -125,14 +126,6 @@ iommu_arena_new(struct pci_controller *hose, dma_addr_t base,
|
|||
return iommu_arena_new_node(0, hose, base, window_size, align);
|
||||
}
|
||||
|
||||
static inline int is_span_boundary(unsigned int index, unsigned int nr,
|
||||
unsigned long shift,
|
||||
unsigned long boundary_size)
|
||||
{
|
||||
shift = (shift + index) & (boundary_size - 1);
|
||||
return shift + nr > boundary_size;
|
||||
}
|
||||
|
||||
/* Must be called with the arena lock held */
|
||||
static long
|
||||
iommu_arena_find_pages(struct device *dev, struct pci_iommu_arena *arena,
|
||||
|
@ -147,7 +140,6 @@ iommu_arena_find_pages(struct device *dev, struct pci_iommu_arena *arena,
|
|||
base = arena->dma_base >> PAGE_SHIFT;
|
||||
if (dev) {
|
||||
boundary_size = dma_get_seg_boundary(dev) + 1;
|
||||
BUG_ON(!is_power_of_2(boundary_size));
|
||||
boundary_size >>= PAGE_SHIFT;
|
||||
} else {
|
||||
boundary_size = 1UL << (32 - PAGE_SHIFT);
|
||||
|
@ -161,7 +153,7 @@ iommu_arena_find_pages(struct device *dev, struct pci_iommu_arena *arena,
|
|||
|
||||
again:
|
||||
while (i < n && p+i < nent) {
|
||||
if (!i && is_span_boundary(p, n, base, boundary_size)) {
|
||||
if (!i && iommu_is_span_boundary(p, n, base, boundary_size)) {
|
||||
p = ALIGN(p + 1, mask + 1);
|
||||
goto again;
|
||||
}
|
||||
|
|
|
@ -469,6 +469,7 @@ config ARCH_OMAP
|
|||
bool "TI OMAP"
|
||||
select GENERIC_GPIO
|
||||
select GENERIC_TIME
|
||||
select GENERIC_CLOCKEVENTS
|
||||
help
|
||||
Support for TI's OMAP platform (OMAP1 and OMAP2).
|
||||
|
||||
|
|
|
@ -251,6 +251,7 @@ define archhelp
|
|||
echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
|
||||
echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
|
||||
echo '* xipImage - XIP kernel image, if configured (arch/$(ARCH)/boot/xipImage)'
|
||||
echo ' uImage - U-Boot wrapped zImage'
|
||||
echo ' bootpImage - Combined zImage and initial RAM disk'
|
||||
echo ' (supply initrd image via make variable INITRD=<path>)'
|
||||
echo ' install - Install uncompressed kernel'
|
||||
|
|
|
@ -274,7 +274,7 @@ static int it8152_pci_platform_notify_remove(struct device *dev)
|
|||
int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
|
||||
{
|
||||
dev_dbg(dev, "%s: dma_addr %08x, size %08x\n",
|
||||
__FUNCTION__, dma_addr, size);
|
||||
__func__, dma_addr, size);
|
||||
return (dev->bus == &pci_bus_type) &&
|
||||
((dma_addr + size - PHYS_OFFSET) >= SZ_64M);
|
||||
}
|
||||
|
@ -289,7 +289,7 @@ int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
|
|||
*/
|
||||
int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
dev_dbg(&dev->dev, "%s: %llx\n", __FUNCTION__, mask);
|
||||
dev_dbg(&dev->dev, "%s: %llx\n", __func__, mask);
|
||||
if (mask >= PHYS_OFFSET + SZ_64M - 1)
|
||||
return 0;
|
||||
|
||||
|
@ -299,7 +299,7 @@ int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
|
|||
int
|
||||
pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
dev_dbg(&dev->dev, "%s: %llx\n", __FUNCTION__, mask);
|
||||
dev_dbg(&dev->dev, "%s: %llx\n", __func__, mask);
|
||||
if (mask >= PHYS_OFFSET + SZ_64M - 1)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.24-rc5
|
||||
# Mon Dec 17 20:04:38 2007
|
||||
# Linux kernel version: 2.6.25-rc3
|
||||
# Mon Mar 3 03:39:48 2008
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
|
@ -21,6 +21,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_SUPPORTS_AOUT=y
|
||||
CONFIG_ZONE_DMA=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
@ -40,17 +41,22 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_GROUP_SCHED=y
|
||||
CONFIG_FAIR_GROUP_SCHED=y
|
||||
CONFIG_FAIR_USER_SCHED=y
|
||||
# CONFIG_FAIR_CGROUP_SCHED is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_USER_SCHED=y
|
||||
# CONFIG_CGROUP_SCHED is not set
|
||||
# CONFIG_SYSFS_DEPRECATED is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
@ -64,17 +70,26 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_MARKERS is not set
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -102,6 +117,8 @@ CONFIG_DEFAULT_AS=y
|
|||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
|
||||
#
|
||||
# System Type
|
||||
|
@ -130,6 +147,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_ORION is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
|
@ -139,6 +157,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
# CONFIG_ARCH_MSM7X00A is not set
|
||||
|
||||
#
|
||||
# TI OMAP Implementations
|
||||
|
@ -155,6 +174,7 @@ CONFIG_OMAP_MUX=y
|
|||
# CONFIG_OMAP_MUX_DEBUG is not set
|
||||
CONFIG_OMAP_MUX_WARNINGS=y
|
||||
CONFIG_OMAP_MCBSP=y
|
||||
# CONFIG_OMAP_MMU_FWK is not set
|
||||
# CONFIG_OMAP_MPU_TIMER is not set
|
||||
CONFIG_OMAP_32K_TIMER=y
|
||||
CONFIG_OMAP_32K_TIMER_HZ=128
|
||||
|
@ -266,6 +286,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
|
|||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200n8 root=0801 ro init=/bin/sh"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
# CONFIG_ATAGS_PROC is not set
|
||||
|
||||
#
|
||||
# CPU Frequency scaling
|
||||
|
@ -311,9 +332,10 @@ CONFIG_PM=y
|
|||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_SUSPEND_UP_POSSIBLE=y
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
# CONFIG_APM_EMULATION is not set
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Networking
|
||||
|
@ -330,6 +352,7 @@ CONFIG_XFRM=y
|
|||
# CONFIG_XFRM_USER is not set
|
||||
# CONFIG_XFRM_SUB_POLICY is not set
|
||||
# CONFIG_XFRM_MIGRATE is not set
|
||||
# CONFIG_XFRM_STATISTICS is not set
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_IP_MULTICAST is not set
|
||||
|
@ -384,6 +407,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_CAN is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
|
@ -421,11 +445,13 @@ CONFIG_BLK_DEV_LOOP=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
# CONFIG_BLK_DEV_XIP is not set
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_HAVE_IDE is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
|
@ -489,6 +515,7 @@ CONFIG_SMC91X=y
|
|||
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
|
||||
# CONFIG_B44 is not set
|
||||
CONFIG_NETDEV_1000=y
|
||||
# CONFIG_E1000E_ENABLED is not set
|
||||
CONFIG_NETDEV_10000=y
|
||||
|
||||
#
|
||||
|
@ -512,7 +539,6 @@ CONFIG_SLIP_COMPRESSED=y
|
|||
CONFIG_SLHC=y
|
||||
# CONFIG_SLIP_SMART is not set
|
||||
# CONFIG_SLIP_MODE_SLIP6 is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
@ -616,12 +642,10 @@ CONFIG_I2C_OMAP=y
|
|||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_DS1374 is not set
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_PCF8575 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_ISP1301_OMAP is not set
|
||||
CONFIG_TPS65010=y
|
||||
|
@ -649,6 +673,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_ADM1031 is not set
|
||||
# CONFIG_SENSORS_ADM9240 is not set
|
||||
# CONFIG_SENSORS_ADT7470 is not set
|
||||
# CONFIG_SENSORS_ADT7473 is not set
|
||||
# CONFIG_SENSORS_ATXP1 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
|
@ -676,6 +701,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_ADS7828 is not set
|
||||
# CONFIG_SENSORS_THMC50 is not set
|
||||
# CONFIG_SENSORS_VT1211 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
|
@ -683,6 +709,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83793 is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83L786NG is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
@ -705,6 +732,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
|
@ -802,10 +830,6 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
@ -826,12 +850,10 @@ CONFIG_EXT2_FS=y
|
|||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
@ -874,8 +896,10 @@ CONFIG_SYSFS=y
|
|||
# CONFIG_EFS_FS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
|
@ -946,9 +970,6 @@ CONFIG_NLS_ISO8859_1=y
|
|||
# CONFIG_NLS_KOI8_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
# CONFIG_DLM is not set
|
||||
CONFIG_INSTRUMENTATION=y
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_MARKERS is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
|
@ -975,6 +996,7 @@ CONFIG_FRAME_POINTER=y
|
|||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
# CONFIG_CRYPTO_SEQIV is not set
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
|
@ -992,6 +1014,9 @@ CONFIG_CRYPTO_CBC=y
|
|||
CONFIG_CRYPTO_PCBC=m
|
||||
# CONFIG_CRYPTO_LRW is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
# CONFIG_CRYPTO_CTR is not set
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_CCM is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
|
@ -1006,12 +1031,14 @@ CONFIG_CRYPTO_DES=y
|
|||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_SEED is not set
|
||||
# CONFIG_CRYPTO_SALSA20 is not set
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
|
||||
#
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.24-rc5
|
||||
# Mon Dec 17 21:12:45 2007
|
||||
# Linux kernel version: 2.6.25-rc3
|
||||
# Mon Mar 3 03:35:17 2008
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
|
@ -21,6 +21,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_SUPPORTS_AOUT=y
|
||||
CONFIG_ZONE_DMA=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
@ -39,17 +40,22 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_GROUP_SCHED=y
|
||||
CONFIG_FAIR_GROUP_SCHED=y
|
||||
CONFIG_FAIR_USER_SCHED=y
|
||||
# CONFIG_FAIR_CGROUP_SCHED is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_USER_SCHED=y
|
||||
# CONFIG_CGROUP_SCHED is not set
|
||||
# CONFIG_SYSFS_DEPRECATED is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_NAMESPACES=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
@ -63,17 +69,26 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_MARKERS is not set
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
@ -101,6 +116,8 @@ CONFIG_IOSCHED_CFQ=y
|
|||
CONFIG_DEFAULT_CFQ=y
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
|
||||
#
|
||||
# System Type
|
||||
|
@ -129,6 +146,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
|
|||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_ORION is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
|
@ -138,6 +156,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
|
|||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
CONFIG_ARCH_OMAP=y
|
||||
# CONFIG_ARCH_MSM7X00A is not set
|
||||
|
||||
#
|
||||
# TI OMAP Implementations
|
||||
|
@ -154,6 +173,7 @@ CONFIG_OMAP_MUX=y
|
|||
# CONFIG_OMAP_MUX_DEBUG is not set
|
||||
CONFIG_OMAP_MUX_WARNINGS=y
|
||||
CONFIG_OMAP_MCBSP=y
|
||||
# CONFIG_OMAP_MMU_FWK is not set
|
||||
# CONFIG_OMAP_MPU_TIMER is not set
|
||||
CONFIG_OMAP_32K_TIMER=y
|
||||
CONFIG_OMAP_32K_TIMER_HZ=128
|
||||
|
@ -173,13 +193,13 @@ CONFIG_ARCH_OMAP16XX=y
|
|||
#
|
||||
# OMAP Board Type
|
||||
#
|
||||
# CONFIG_MACH_OMAP_INNOVATOR is not set
|
||||
# CONFIG_MACH_OMAP_H2 is not set
|
||||
# CONFIG_MACH_OMAP_H3 is not set
|
||||
CONFIG_MACH_OMAP_INNOVATOR=y
|
||||
CONFIG_MACH_OMAP_H2=y
|
||||
CONFIG_MACH_OMAP_H3=y
|
||||
CONFIG_MACH_OMAP_OSK=y
|
||||
# CONFIG_OMAP_OSK_MISTRAL is not set
|
||||
# CONFIG_MACH_NOKIA770 is not set
|
||||
# CONFIG_MACH_OMAP_GENERIC is not set
|
||||
CONFIG_MACH_NOKIA770=y
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
|
||||
#
|
||||
# OMAP CPU Speed
|
||||
|
@ -275,6 +295,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
|
|||
CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x10400000,8M root=/dev/ram0 rw"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
# CONFIG_ATAGS_PROC is not set
|
||||
|
||||
#
|
||||
# CPU Frequency scaling
|
||||
|
@ -307,9 +328,10 @@ CONFIG_PM=y
|
|||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_SUSPEND_UP_POSSIBLE=y
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
# CONFIG_APM_EMULATION is not set
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Networking
|
||||
|
@ -326,6 +348,7 @@ CONFIG_XFRM=y
|
|||
# CONFIG_XFRM_USER is not set
|
||||
# CONFIG_XFRM_SUB_POLICY is not set
|
||||
# CONFIG_XFRM_MIGRATE is not set
|
||||
# CONFIG_XFRM_STATISTICS is not set
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
|
@ -381,6 +404,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_CAN is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
|
@ -493,11 +517,13 @@ CONFIG_BLK_DEV_LOOP=y
|
|||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
# CONFIG_BLK_DEV_XIP is not set
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
CONFIG_IDE=m
|
||||
CONFIG_BLK_DEV_IDE=m
|
||||
|
||||
|
@ -519,7 +545,6 @@ CONFIG_IDE_PROC_FS=y
|
|||
#
|
||||
# CONFIG_IDE_GENERIC is not set
|
||||
# CONFIG_BLK_DEV_PLATFORM is not set
|
||||
# CONFIG_IDE_ARM is not set
|
||||
# CONFIG_BLK_DEV_IDEDMA is not set
|
||||
CONFIG_IDE_ARCH_OBSOLETE_INIT=y
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
|
@ -553,6 +578,7 @@ CONFIG_SMC91X=y
|
|||
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
|
||||
# CONFIG_B44 is not set
|
||||
CONFIG_NETDEV_1000=y
|
||||
# CONFIG_E1000E_ENABLED is not set
|
||||
CONFIG_NETDEV_10000=y
|
||||
|
||||
#
|
||||
|
@ -574,7 +600,6 @@ CONFIG_PPP_MULTILINK=y
|
|||
# CONFIG_PPPOL2TP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
CONFIG_SLHC=y
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
@ -671,6 +696,7 @@ CONFIG_HW_RANDOM_OMAP=m
|
|||
# CONFIG_SYNCLINK_CS is not set
|
||||
# CONFIG_CARDMAN_4000 is not set
|
||||
# CONFIG_CARDMAN_4040 is not set
|
||||
# CONFIG_IPWIRELESS is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
CONFIG_I2C=y
|
||||
|
@ -698,12 +724,10 @@ CONFIG_I2C_OMAP=y
|
|||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_DS1374 is not set
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_PCF8575 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_ISP1301_OMAP is not set
|
||||
CONFIG_TPS65010=y
|
||||
|
@ -731,6 +755,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_ADM1031 is not set
|
||||
# CONFIG_SENSORS_ADM9240 is not set
|
||||
# CONFIG_SENSORS_ADT7470 is not set
|
||||
# CONFIG_SENSORS_ADT7473 is not set
|
||||
# CONFIG_SENSORS_ATXP1 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
|
@ -758,6 +783,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_ADS7828 is not set
|
||||
# CONFIG_SENSORS_THMC50 is not set
|
||||
# CONFIG_SENSORS_VT1211 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
|
@ -765,6 +791,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83793 is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83L786NG is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
@ -780,6 +807,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
|
@ -865,10 +893,6 @@ CONFIG_USB_ARCH_HAS_OHCI=y
|
|||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
@ -889,12 +913,10 @@ CONFIG_EXT2_FS=y
|
|||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
@ -948,8 +970,10 @@ CONFIG_JFFS2_RTIME=y
|
|||
# CONFIG_JFFS2_RUBIN is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
|
@ -1019,9 +1043,6 @@ CONFIG_NLS_ISO8859_1=m
|
|||
# CONFIG_NLS_KOI8_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
# CONFIG_DLM is not set
|
||||
CONFIG_INSTRUMENTATION=y
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_MARKERS is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
|
@ -1045,7 +1066,51 @@ CONFIG_FRAME_POINTER=y
|
|||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
# CONFIG_CRYPTO is not set
|
||||
CONFIG_CRYPTO=y
|
||||
# CONFIG_CRYPTO_SEQIV is not set
|
||||
# CONFIG_CRYPTO_MANAGER is not set
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
# CONFIG_CRYPTO_MD5 is not set
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
# CONFIG_CRYPTO_ECB is not set
|
||||
# CONFIG_CRYPTO_CBC is not set
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_LRW is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
# CONFIG_CRYPTO_CTR is not set
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_CCM is not set
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
# CONFIG_CRYPTO_DES is not set
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_AES is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
# CONFIG_CRYPTO_CAST6 is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_SEED is not set
|
||||
# CONFIG_CRYPTO_SALSA20 is not set
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
|
||||
#
|
||||
# Library routines
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define ATAG_CORE 0x54410001
|
||||
#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2)
|
||||
|
||||
.type __switch_data, %object
|
||||
__switch_data:
|
||||
.long __mmap_switched
|
||||
|
|
|
@ -29,9 +29,6 @@
|
|||
#define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET)
|
||||
#define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)
|
||||
|
||||
#define ATAG_CORE 0x54410001
|
||||
#define ATAG_CORE_SIZE ((2*4 + 3*4) >> 2)
|
||||
|
||||
|
||||
/*
|
||||
* swapper_pg_dir is the virtual address of the initial page table.
|
||||
|
|
|
@ -431,6 +431,11 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int __kprobes arch_trampoline_kprobe(struct kprobe *p)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct undef_hook kprobes_break_hook = {
|
||||
.instr_mask = 0xffffffff,
|
||||
.instr_val = KPROBE_BREAKPOINT_INSTRUCTION,
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
/*
|
||||
* For ARM syscalls, we encode the syscall number into the instruction.
|
||||
*/
|
||||
#define SWI_SYS_SIGRETURN (0xef000000|(__NR_sigreturn))
|
||||
#define SWI_SYS_RT_SIGRETURN (0xef000000|(__NR_rt_sigreturn))
|
||||
#define SWI_SYS_SIGRETURN (0xef000000|(__NR_sigreturn)|(__NR_OABI_SYSCALL_BASE))
|
||||
#define SWI_SYS_RT_SIGRETURN (0xef000000|(__NR_rt_sigreturn)|(__NR_OABI_SYSCALL_BASE))
|
||||
|
||||
/*
|
||||
* With EABI, the syscall number has to be loaded into r7.
|
||||
|
|
|
@ -245,10 +245,7 @@ static struct fb_monspecs at91fb_default_monspecs = {
|
|||
|
||||
static void at91_lcdc_power_control(int on)
|
||||
{
|
||||
if (on)
|
||||
at91_set_gpio_value(AT91_PIN_PD12, 0); /* power up */
|
||||
else
|
||||
at91_set_gpio_value(AT91_PIN_PD12, 1); /* power down */
|
||||
at91_set_gpio_value(AT91_PIN_PA30, on);
|
||||
}
|
||||
|
||||
/* Driver datas */
|
||||
|
|
|
@ -490,6 +490,11 @@ postcore_initcall(at91_gpio_debugfs_init);
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/* This lock class tells lockdep that GPIO irqs are in a different
|
||||
* category than their parents, so it won't report false recursion.
|
||||
*/
|
||||
static struct lock_class_key gpio_lock_class;
|
||||
|
||||
/*
|
||||
* Called from the processor-specific init to enable GPIO interrupt support.
|
||||
*/
|
||||
|
@ -510,6 +515,8 @@ void __init at91_gpio_irq_setup(void)
|
|||
__raw_writel(~0, this->regbase + PIO_IDR);
|
||||
|
||||
for (i = 0, pin = this->chipbase; i < 32; i++, pin++) {
|
||||
lockdep_set_class(&irq_desc[pin].lock, &gpio_lock_class);
|
||||
|
||||
/*
|
||||
* Can use the "simple" and not "edge" handler since it's
|
||||
* shorter, and the AIC handles interrupts sanely.
|
||||
|
|
|
@ -103,7 +103,7 @@ static void
|
|||
h720x_gpio_handler(unsigned int mask, unsigned int irq,
|
||||
struct irq_desc *desc)
|
||||
{
|
||||
IRQDBG("%s irq: %d\n",__FUNCTION__,irq);
|
||||
IRQDBG("%s irq: %d\n", __func__, irq);
|
||||
desc = irq_desc + irq;
|
||||
while (mask) {
|
||||
if (mask & 1) {
|
||||
|
@ -123,7 +123,7 @@ h720x_gpioa_demux_handler(unsigned int irq_unused, struct irq_desc *desc)
|
|||
|
||||
mask = CPU_REG(GPIO_A_VIRT,GPIO_STAT);
|
||||
irq = IRQ_CHAINED_GPIOA(0);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq);
|
||||
h720x_gpio_handler(mask, irq, desc);
|
||||
}
|
||||
|
||||
|
@ -133,7 +133,7 @@ h720x_gpiob_demux_handler(unsigned int irq_unused, struct irq_desc *desc)
|
|||
unsigned int mask, irq;
|
||||
mask = CPU_REG(GPIO_B_VIRT,GPIO_STAT);
|
||||
irq = IRQ_CHAINED_GPIOB(0);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq);
|
||||
h720x_gpio_handler(mask, irq, desc);
|
||||
}
|
||||
|
||||
|
@ -144,7 +144,7 @@ h720x_gpioc_demux_handler(unsigned int irq_unused, struct irq_desc *desc)
|
|||
|
||||
mask = CPU_REG(GPIO_C_VIRT,GPIO_STAT);
|
||||
irq = IRQ_CHAINED_GPIOC(0);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq);
|
||||
h720x_gpio_handler(mask, irq, desc);
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,7 @@ h720x_gpiod_demux_handler(unsigned int irq_unused, struct irq_desc *desc)
|
|||
|
||||
mask = CPU_REG(GPIO_D_VIRT,GPIO_STAT);
|
||||
irq = IRQ_CHAINED_GPIOD(0);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq);
|
||||
h720x_gpio_handler(mask, irq, desc);
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,7 @@ h720x_gpioe_demux_handler(unsigned int irq_unused, struct irq_desc *desc)
|
|||
|
||||
mask = CPU_REG(GPIO_E_VIRT,GPIO_STAT);
|
||||
irq = IRQ_CHAINED_GPIOE(0);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n",__FUNCTION__,mask,irq);
|
||||
IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq);
|
||||
h720x_gpio_handler(mask, irq, desc);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -54,7 +54,7 @@ static inline int imx_dma_sg_next(imx_dmach_t dma_ch, unsigned int lastcount)
|
|||
|
||||
if (!imxdma->name) {
|
||||
printk(KERN_CRIT "%s: called for not allocated channel %d\n",
|
||||
__FUNCTION__, dma_ch);
|
||||
__func__, dma_ch);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -288,7 +288,7 @@ imx_dma_setup_handlers(imx_dmach_t dma_ch,
|
|||
|
||||
if (!imxdma->name) {
|
||||
printk(KERN_CRIT "%s: called for not allocated channel %d\n",
|
||||
__FUNCTION__, dma_ch);
|
||||
__func__, dma_ch);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -321,7 +321,7 @@ void imx_dma_enable(imx_dmach_t dma_ch)
|
|||
|
||||
if (!imxdma->name) {
|
||||
printk(KERN_CRIT "%s: called for not allocated channel %d\n",
|
||||
__FUNCTION__, dma_ch);
|
||||
__func__, dma_ch);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -365,7 +365,7 @@ int imx_dma_request(imx_dmach_t dma_ch, const char *name)
|
|||
|
||||
if (dma_ch >= IMX_DMA_CHANNELS) {
|
||||
printk(KERN_CRIT "%s: called for non-existed channel %d\n",
|
||||
__FUNCTION__, dma_ch);
|
||||
__func__, dma_ch);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -396,7 +396,7 @@ void imx_dma_free(imx_dmach_t dma_ch)
|
|||
if (!imxdma->name) {
|
||||
printk(KERN_CRIT
|
||||
"%s: trying to free channel %d which is already freed\n",
|
||||
__FUNCTION__, dma_ch);
|
||||
__func__, dma_ch);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -456,7 +456,7 @@ imx_dma_request_by_prio(imx_dmach_t * pdma_ch, const char *name,
|
|||
}
|
||||
}
|
||||
|
||||
printk(KERN_ERR "%s: no free DMA channel found\n", __FUNCTION__);
|
||||
printk(KERN_ERR "%s: no free DMA channel found\n", __func__);
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
|
@ -160,21 +160,21 @@ imx_gpio_irq_type(unsigned int _irq, unsigned int type)
|
|||
static void
|
||||
imx_gpio_ack_irq(unsigned int irq)
|
||||
{
|
||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, irq);
|
||||
DEBUG_IRQ("%s: irq %d\n", __func__, irq);
|
||||
ISR(IRQ_TO_REG(irq)) = 1 << ((irq - IRQ_GPIOA(0)) % 32);
|
||||
}
|
||||
|
||||
static void
|
||||
imx_gpio_mask_irq(unsigned int irq)
|
||||
{
|
||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, irq);
|
||||
DEBUG_IRQ("%s: irq %d\n", __func__, irq);
|
||||
IMR(IRQ_TO_REG(irq)) &= ~( 1 << ((irq - IRQ_GPIOA(0)) % 32));
|
||||
}
|
||||
|
||||
static void
|
||||
imx_gpio_unmask_irq(unsigned int irq)
|
||||
{
|
||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, irq);
|
||||
DEBUG_IRQ("%s: irq %d\n", __func__, irq);
|
||||
IMR(IRQ_TO_REG(irq)) |= 1 << ((irq - IRQ_GPIOA(0)) % 32);
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ static void __init iq81340mc_init(void)
|
|||
static void __init iq81340mc_timer_init(void)
|
||||
{
|
||||
unsigned long bus_freq = iop13xx_core_freq() / iop13xx_xsi_bus_ratio();
|
||||
printk(KERN_DEBUG "%s: bus frequency: %lu\n", __FUNCTION__, bus_freq);
|
||||
printk(KERN_DEBUG "%s: bus frequency: %lu\n", __func__, bus_freq);
|
||||
iop_init_time(bus_freq);
|
||||
}
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ static void __init iq81340sc_init(void)
|
|||
static void __init iq81340sc_timer_init(void)
|
||||
{
|
||||
unsigned long bus_freq = iop13xx_core_freq() / iop13xx_xsi_bus_ratio();
|
||||
printk(KERN_DEBUG "%s: bus frequency: %lu\n", __FUNCTION__, bus_freq);
|
||||
printk(KERN_DEBUG "%s: bus frequency: %lu\n", __func__, bus_freq);
|
||||
iop_init_time(bus_freq);
|
||||
}
|
||||
|
||||
|
|
|
@ -94,13 +94,13 @@ void iop13xx_map_pci_memory(void)
|
|||
, 0, iop13xx_atux_mem_size, MT_DEVICE);
|
||||
if (!iop13xx_atux_mem_base) {
|
||||
printk("%s: atux allocation "
|
||||
"failed\n", __FUNCTION__);
|
||||
"failed\n", __func__);
|
||||
BUG();
|
||||
}
|
||||
} else
|
||||
iop13xx_atux_mem_size = 0;
|
||||
PRINTK("%s: atu: %d bus_size: %d mem_base: %x\n",
|
||||
__FUNCTION__, atu, iop13xx_atux_mem_size,
|
||||
__func__, atu, iop13xx_atux_mem_size,
|
||||
iop13xx_atux_mem_base);
|
||||
break;
|
||||
case 1:
|
||||
|
@ -120,13 +120,13 @@ void iop13xx_map_pci_memory(void)
|
|||
, 0, iop13xx_atue_mem_size, MT_DEVICE);
|
||||
if (!iop13xx_atue_mem_base) {
|
||||
printk("%s: atue allocation "
|
||||
"failed\n", __FUNCTION__);
|
||||
"failed\n", __func__);
|
||||
BUG();
|
||||
}
|
||||
} else
|
||||
iop13xx_atue_mem_size = 0;
|
||||
PRINTK("%s: atu: %d bus_size: %d mem_base: %x\n",
|
||||
__FUNCTION__, atu, iop13xx_atue_mem_size,
|
||||
__func__, atu, iop13xx_atue_mem_size,
|
||||
iop13xx_atue_mem_base);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -519,7 +519,7 @@ void __init iop13xx_platform_init(void)
|
|||
if (iq8134x_flash_resource.end > iq8134x_flash_resource.start)
|
||||
iop13xx_devices[plat_idx++] = &iq8134x_flash;
|
||||
else
|
||||
printk(KERN_ERR "%s: Failed to probe flash size\n", __FUNCTION__);
|
||||
printk(KERN_ERR "%s: Failed to probe flash size\n", __func__);
|
||||
#endif
|
||||
|
||||
platform_add_devices(iop13xx_devices, plat_idx);
|
||||
|
|
|
@ -14,8 +14,10 @@
|
|||
|
||||
#include <linux/mm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/f75375s.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/serial_core.h>
|
||||
|
@ -167,11 +169,21 @@ static struct platform_device glantank_serial_device = {
|
|||
.resource = &glantank_uart_resource,
|
||||
};
|
||||
|
||||
static struct f75375s_platform_data glantank_f75375s = {
|
||||
.pwm = { 255, 255 },
|
||||
.pwm_enable = { 0, 0 },
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata glantank_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("rtc-rs5c372", 0x32),
|
||||
.type = "rs5c372a",
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("f75375", 0x2e),
|
||||
.type = "f75375",
|
||||
.platform_data = &glantank_f75375s,
|
||||
},
|
||||
};
|
||||
|
||||
static void glantank_power_off(void)
|
||||
|
|
|
@ -87,7 +87,7 @@ static inline int check_master_abort(void)
|
|||
if (isr & PCI_ISR_PFE) {
|
||||
/* make sure the Master Abort bit is reset */
|
||||
*PCI_ISR = PCI_ISR_PFE;
|
||||
pr_debug("%s failed\n", __FUNCTION__);
|
||||
pr_debug("%s failed\n", __func__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ static int __init gtwx5715_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
|||
else
|
||||
rc = gtwx5715_irqmap[slot][pin-1];
|
||||
|
||||
printk("%s: Mapped slot %d pin %d to IRQ %d\n", __FUNCTION__,slot, pin, rc);
|
||||
printk("%s: Mapped slot %d pin %d to IRQ %d\n", __func__, slot, pin, rc);
|
||||
return(rc);
|
||||
}
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@ netx_hif_ack_irq(unsigned int _irq)
|
|||
val &= ~((1 << 24) << irq);
|
||||
writel(val, NETX_DPMAS_INT_EN);
|
||||
|
||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, _irq);
|
||||
DEBUG_IRQ("%s: irq %d\n", __func__, _irq);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -145,7 +145,7 @@ netx_hif_mask_irq(unsigned int _irq)
|
|||
val = readl(NETX_DPMAS_INT_EN);
|
||||
val &= ~((1 << 24) << irq);
|
||||
writel(val, NETX_DPMAS_INT_EN);
|
||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, _irq);
|
||||
DEBUG_IRQ("%s: irq %d\n", __func__, _irq);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -157,7 +157,7 @@ netx_hif_unmask_irq(unsigned int _irq)
|
|||
val = readl(NETX_DPMAS_INT_EN);
|
||||
val |= (1 << 24) << irq;
|
||||
writel(val, NETX_DPMAS_INT_EN);
|
||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, _irq);
|
||||
DEBUG_IRQ("%s: irq %d\n", __func__, _irq);
|
||||
}
|
||||
|
||||
static struct irq_chip netx_hif_chip = {
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
static spinlock_t gpio_lock = __SPIN_LOCK_UNLOCKED(gpio_lock);
|
||||
|
||||
/* only access gpiores with atomic ops */
|
||||
static DECLARE_BITMAP(gpiores, GPIO_MAX);
|
||||
static DECLARE_BITMAP(gpiores, GPIO_MAX + 1);
|
||||
|
||||
static inline int ns9xxx_valid_gpio(unsigned gpio)
|
||||
{
|
||||
|
|
|
@ -350,6 +350,10 @@ static void __init h2_init_smc91x(void)
|
|||
|
||||
static struct i2c_board_info __initdata h2_i2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps65010", 0x48),
|
||||
.type = "tps65010",
|
||||
.irq = OMAP_GPIO_IRQ(58),
|
||||
}, {
|
||||
I2C_BOARD_INFO("isp1301_omap", 0x2d),
|
||||
.type = "isp1301_omap",
|
||||
.irq = OMAP_GPIO_IRQ(2),
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/i2c/tps65010.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
@ -51,6 +52,8 @@
|
|||
#include <asm/arch/mcbsp.h>
|
||||
#include <asm/arch/omap-alsa.h>
|
||||
|
||||
#define H3_TS_GPIO 48
|
||||
|
||||
static int h3_keymap[] = {
|
||||
KEY(0, 0, KEY_LEFT),
|
||||
KEY(0, 1, KEY_RIGHT),
|
||||
|
@ -373,6 +376,17 @@ static struct platform_device h3_lcd_device = {
|
|||
.id = -1,
|
||||
};
|
||||
|
||||
static struct spi_board_info h3_spi_board_info[] __initdata = {
|
||||
[0] = {
|
||||
.modalias = "tsc2101",
|
||||
.bus_num = 2,
|
||||
.chip_select = 0,
|
||||
.irq = OMAP_GPIO_IRQ(H3_TS_GPIO),
|
||||
.max_speed_hz = 16000000,
|
||||
/* .platform_data = &tsc_platform_data, */
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_mcbsp_reg_cfg mcbsp_regs = {
|
||||
.spcr2 = FREE | FRST | GRST | XRST | XINTM(3),
|
||||
.spcr1 = RINTM(3) | RRST,
|
||||
|
@ -457,6 +471,14 @@ static struct omap_board_config_kernel h3_config[] __initdata = {
|
|||
{ OMAP_TAG_LCD, &h3_lcd_config },
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata h3_i2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps65010", 0x48),
|
||||
.type = "tps65013",
|
||||
/* .irq = OMAP_GPIO_IRQ(??), */
|
||||
},
|
||||
};
|
||||
|
||||
static struct omap_gpio_switch h3_gpio_switches[] __initdata = {
|
||||
{
|
||||
.name = "mmc_slot",
|
||||
|
|
|
@ -717,7 +717,7 @@ static int __init omap_pm_init(void)
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_OMAP_32K_TIMER
|
||||
error = sysfs_create_file(power_kobj, &sleep_while_idle_attr);
|
||||
error = sysfs_create_file(power_kobj, &sleep_while_idle_attr.attr);
|
||||
if (error)
|
||||
printk(KERN_ERR "sysfs_create_file failed: %d\n", error);
|
||||
#endif
|
||||
|
|
|
@ -132,13 +132,20 @@ static inline void omap_mpu_timer_start(int nr, unsigned long load_val,
|
|||
timer->cntl = timerflags;
|
||||
}
|
||||
|
||||
static inline void omap_mpu_timer_stop(int nr)
|
||||
{
|
||||
volatile omap_mpu_timer_regs_t* timer = omap_mpu_timer_base(nr);
|
||||
|
||||
timer->cntl &= ~MPU_TIMER_ST;
|
||||
}
|
||||
|
||||
/*
|
||||
* ---------------------------------------------------------------------------
|
||||
* MPU timer 1 ... count down to zero, interrupt, reload
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static int omap_mpu_set_next_event(unsigned long cycles,
|
||||
struct clock_event_device *evt)
|
||||
struct clock_event_device *evt)
|
||||
{
|
||||
omap_mpu_timer_start(0, cycles, 0);
|
||||
return 0;
|
||||
|
@ -152,6 +159,7 @@ static void omap_mpu_set_mode(enum clock_event_mode mode,
|
|||
omap_mpu_set_autoreset(0);
|
||||
break;
|
||||
case CLOCK_EVT_MODE_ONESHOT:
|
||||
omap_mpu_timer_stop(0);
|
||||
omap_mpu_remove_autoreset(0);
|
||||
break;
|
||||
case CLOCK_EVT_MODE_UNUSED:
|
||||
|
@ -163,7 +171,7 @@ static void omap_mpu_set_mode(enum clock_event_mode mode,
|
|||
|
||||
static struct clock_event_device clockevent_mpu_timer1 = {
|
||||
.name = "mpu_timer1",
|
||||
.features = CLOCK_EVT_FEAT_PERIODIC, CLOCK_EVT_FEAT_ONESHOT,
|
||||
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
|
||||
.shift = 32,
|
||||
.set_next_event = omap_mpu_set_next_event,
|
||||
.set_mode = omap_mpu_set_mode,
|
||||
|
|
|
@ -42,6 +42,12 @@ static struct map_desc omap2_io_desc[] __initdata = {
|
|||
.length = L3_24XX_SIZE,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
{
|
||||
.virtual = L4_24XX_VIRT,
|
||||
.pfn = __phys_to_pfn(L4_24XX_PHYS),
|
||||
.length = L4_24XX_SIZE,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
#ifdef CONFIG_ARCH_OMAP2430
|
||||
{
|
||||
.virtual = L4_WK_243X_VIRT,
|
||||
|
|
|
@ -97,14 +97,20 @@
|
|||
#define PCIE_BAR_CTRL(n) ORION_PCIE_REG(0x1804 + ((n - 1) * 4))
|
||||
#define PCIE_BAR_LO(n) ORION_PCIE_REG(0x0010 + ((n) * 8))
|
||||
#define PCIE_BAR_HI(n) ORION_PCIE_REG(0x0014 + ((n) * 8))
|
||||
#define PCIE_WIN_CTRL(n) ORION_PCIE_REG(0x1820 + ((n) << 4))
|
||||
#define PCIE_WIN_BASE(n) ORION_PCIE_REG(0x1824 + ((n) << 4))
|
||||
#define PCIE_WIN_REMAP(n) ORION_PCIE_REG(0x182c + ((n) << 4))
|
||||
#define PCIE_WIN_CTRL(n) (((n) < 5) ? \
|
||||
ORION_PCIE_REG(0x1820 + ((n) << 4)) : \
|
||||
ORION_PCIE_REG(0x1880))
|
||||
#define PCIE_WIN_BASE(n) (((n) < 5) ? \
|
||||
ORION_PCIE_REG(0x1824 + ((n) << 4)) : \
|
||||
ORION_PCIE_REG(0x1884))
|
||||
#define PCIE_WIN_REMAP(n) (((n) < 5) ? \
|
||||
ORION_PCIE_REG(0x182c + ((n) << 4)) : \
|
||||
ORION_PCIE_REG(0x188c))
|
||||
#define PCIE_DEFWIN_CTRL ORION_PCIE_REG(0x18b0)
|
||||
#define PCIE_EXPROM_WIN_CTRL ORION_PCIE_REG(0x18c0)
|
||||
#define PCIE_EXPROM_WIN_REMP ORION_PCIE_REG(0x18c4)
|
||||
#define PCIE_MAX_BARS 3
|
||||
#define PCIE_MAX_WINS 5
|
||||
#define PCIE_MAX_WINS 6
|
||||
|
||||
/*
|
||||
* Use PCIE BAR '1' for all DDR banks
|
||||
|
|
|
@ -17,7 +17,9 @@
|
|||
#include <linux/mv643xx_eth.h>
|
||||
#include <linux/mv643xx_i2c.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/timex.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include "common.h"
|
||||
|
@ -177,8 +179,8 @@ static struct platform_device orion_ehci1 = {
|
|||
|
||||
static struct resource orion_eth_shared_resources[] = {
|
||||
{
|
||||
.start = ORION_ETH_PHYS_BASE,
|
||||
.end = ORION_ETH_PHYS_BASE + 0xffff,
|
||||
.start = ORION_ETH_PHYS_BASE + 0x2000,
|
||||
.end = ORION_ETH_PHYS_BASE + 0x3fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
@ -347,3 +349,21 @@ void __init orion_init(void)
|
|||
platform_device_register(&orion_ehci1);
|
||||
platform_device_register(&orion_i2c);
|
||||
}
|
||||
|
||||
/*
|
||||
* Many orion-based systems have buggy bootloader implementations.
|
||||
* This is a common fixup for bogus memory tags.
|
||||
*/
|
||||
void __init tag_fixup_mem32(struct machine_desc *mdesc, struct tag *t,
|
||||
char **from, struct meminfo *meminfo)
|
||||
{
|
||||
for (; t->hdr.size; t = tag_next(t))
|
||||
if (t->hdr.tag == ATAG_MEM &&
|
||||
(!t->u.mem.size || t->u.mem.size & ~PAGE_MASK ||
|
||||
t->u.mem.start & ~PAGE_MASK)) {
|
||||
printk(KERN_WARNING
|
||||
"Clearing invalid memory bank %dKB@0x%08x\n",
|
||||
t->u.mem.size / 1024, t->u.mem.start);
|
||||
t->hdr.tag = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,4 +83,10 @@ struct mv_sata_platform_data;
|
|||
|
||||
void __init orion_sata_init(struct mv_sata_platform_data *sata_data);
|
||||
|
||||
struct machine_desc;
|
||||
struct meminfo;
|
||||
struct tag;
|
||||
extern void __init tag_fixup_mem32(struct machine_desc *, struct tag *,
|
||||
char **, struct meminfo *);
|
||||
|
||||
#endif /* __ARCH_ORION_COMMON_H__ */
|
||||
|
|
|
@ -319,4 +319,5 @@ MACHINE_START(DNS323, "D-Link DNS-323")
|
|||
.map_io = orion_map_io,
|
||||
.init_irq = orion_init_irq,
|
||||
.timer = &orion_timer,
|
||||
.fixup = tag_fixup_mem32,
|
||||
MACHINE_END
|
||||
|
|
|
@ -36,7 +36,7 @@ int gpio_direction_input(unsigned pin)
|
|||
unsigned long flags;
|
||||
|
||||
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
|
||||
pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
|
||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,7 @@ int gpio_direction_output(unsigned pin, int value)
|
|||
int mask;
|
||||
|
||||
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
|
||||
pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
|
||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,7 @@ int gpio_request(unsigned pin, const char *label)
|
|||
unsigned long flags;
|
||||
|
||||
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
|
||||
pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
|
||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -149,7 +149,7 @@ int gpio_request(unsigned pin, const char *label)
|
|||
|
||||
if (gpio_label[pin]) {
|
||||
pr_debug("%s: GPIO %d already used as %s\n",
|
||||
__FUNCTION__, pin, gpio_label[pin]);
|
||||
__func__, pin, gpio_label[pin]);
|
||||
ret = -EBUSY;
|
||||
} else
|
||||
gpio_label[pin] = label ? label : "?";
|
||||
|
@ -162,12 +162,12 @@ EXPORT_SYMBOL(gpio_request);
|
|||
void gpio_free(unsigned pin)
|
||||
{
|
||||
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid)) {
|
||||
pr_debug("%s: invalid GPIO %d\n", __FUNCTION__, pin);
|
||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gpio_label[pin])
|
||||
pr_warning("%s: GPIO %d already freed\n", __FUNCTION__, pin);
|
||||
pr_warning("%s: GPIO %d already freed\n", __func__, pin);
|
||||
else
|
||||
gpio_label[pin] = NULL;
|
||||
}
|
||||
|
|
|
@ -240,4 +240,5 @@ MACHINE_START(KUROBOX_PRO, "Buffalo/Revogear Kurobox Pro")
|
|||
.map_io = orion_map_io,
|
||||
.init_irq = orion_init_irq,
|
||||
.timer = &orion_timer,
|
||||
.fixup = tag_fixup_mem32,
|
||||
MACHINE_END
|
||||
|
|
|
@ -357,4 +357,5 @@ MACHINE_START(TS209, "QNAP TS-109/TS-209")
|
|||
.map_io = orion_map_io,
|
||||
.init_irq = orion_init_irq,
|
||||
.timer = &orion_timer,
|
||||
.fixup = tag_fixup_mem32,
|
||||
MACHINE_END
|
||||
|
|
|
@ -976,7 +976,7 @@ static int __init clk_init(void)
|
|||
(*clkp)->set_parent((*clkp), (*clkp)->parent);
|
||||
}
|
||||
pr_debug("%s: clock %s, rate %ld\n",
|
||||
__FUNCTION__, (*clkp)->name, (*clkp)->rate);
|
||||
__func__, (*clkp)->name, (*clkp)->rate);
|
||||
}
|
||||
|
||||
local_clk_use(&ck_pll4);
|
||||
|
|
|
@ -192,7 +192,7 @@ void pnx4008_free_channel(int ch)
|
|||
if (!dma_channels[ch].name) {
|
||||
printk(KERN_CRIT
|
||||
"%s: trying to free channel %d which is already freed\n",
|
||||
__FUNCTION__, ch);
|
||||
__func__, ch);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ static int __init cmx270_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
|||
{
|
||||
int irq;
|
||||
|
||||
dev_dbg(&dev->dev, "%s: slot=%x, pin=%x\n", __FUNCTION__, slot, pin);
|
||||
dev_dbg(&dev->dev, "%s: slot=%x, pin=%x\n", __func__, slot, pin);
|
||||
|
||||
irq = it8152_pci_map_irq(dev, slot, pin);
|
||||
if (irq)
|
||||
|
|
|
@ -504,11 +504,11 @@ static void cmx270_mci_setpower(struct device *dev, unsigned int vdd)
|
|||
struct pxamci_platform_data *p_d = dev->platform_data;
|
||||
|
||||
if ((1 << vdd) & p_d->ocr_mask) {
|
||||
printk(KERN_DEBUG "%s: on\n", __FUNCTION__);
|
||||
printk(KERN_DEBUG "%s: on\n", __func__);
|
||||
GPCR(105) = GPIO_bit(105);
|
||||
} else {
|
||||
GPSR(105) = GPIO_bit(105);
|
||||
printk(KERN_DEBUG "%s: off\n", __FUNCTION__);
|
||||
printk(KERN_DEBUG "%s: off\n", __func__);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ void pxa_free_dma (int dma_ch)
|
|||
if (!dma_channels[dma_ch].name) {
|
||||
printk (KERN_CRIT
|
||||
"%s: trying to free channel %d which is already freed\n",
|
||||
__FUNCTION__, dma_ch);
|
||||
__func__, dma_ch);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -264,7 +264,7 @@ static int em_x270_mci_init(struct device *dev,
|
|||
"MMC card detect", data);
|
||||
if (err) {
|
||||
printk(KERN_ERR "%s: can't request MMC card detect IRQ: %d\n",
|
||||
__FUNCTION__, err);
|
||||
__func__, err);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -390,11 +390,11 @@ static void mainstone_mci_setpower(struct device *dev, unsigned int vdd)
|
|||
struct pxamci_platform_data* p_d = dev->platform_data;
|
||||
|
||||
if (( 1 << vdd) & p_d->ocr_mask) {
|
||||
printk(KERN_DEBUG "%s: on\n", __FUNCTION__);
|
||||
printk(KERN_DEBUG "%s: on\n", __func__);
|
||||
MST_MSCWR1 |= MST_MSCWR1_MMC_ON;
|
||||
MST_MSCWR1 &= ~MST_MSCWR1_MS_SEL;
|
||||
} else {
|
||||
printk(KERN_DEBUG "%s: off\n", __FUNCTION__);
|
||||
printk(KERN_DEBUG "%s: off\n", __func__);
|
||||
MST_MSCWR1 &= ~MST_MSCWR1_MMC_ON;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -217,7 +217,7 @@ void board_pcmcia_power(int power)
|
|||
ConXS_BCR = trizeps_conxs_bcr;
|
||||
|
||||
}
|
||||
pr_debug("%s: o%s 0x%x\n", __FUNCTION__, power ? "n": "ff", trizeps_conxs_bcr);
|
||||
pr_debug("%s: o%s 0x%x\n", __func__, power ? "n": "ff", trizeps_conxs_bcr);
|
||||
}
|
||||
|
||||
/* backlight power switching for LCD panel */
|
||||
|
@ -228,7 +228,7 @@ static void board_backlight_power(int on)
|
|||
} else {
|
||||
trizeps_conxs_bcr &= ~ConXS_BCR_L_DISP;
|
||||
}
|
||||
pr_debug("%s: o%s 0x%x\n", __FUNCTION__, on ? "n" : "ff", trizeps_conxs_bcr);
|
||||
pr_debug("%s: o%s 0x%x\n", __func__, on ? "n" : "ff", trizeps_conxs_bcr);
|
||||
ConXS_BCR = trizeps_conxs_bcr;
|
||||
}
|
||||
|
||||
|
@ -238,10 +238,10 @@ static void board_mci_power(struct device *dev, unsigned int vdd)
|
|||
struct pxamci_platform_data* p_d = dev->platform_data;
|
||||
|
||||
if (( 1 << vdd) & p_d->ocr_mask) {
|
||||
pr_debug("%s: on\n", __FUNCTION__);
|
||||
pr_debug("%s: on\n", __func__);
|
||||
/* FIXME fill in values here */
|
||||
} else {
|
||||
pr_debug("%s: off\n", __FUNCTION__);
|
||||
pr_debug("%s: off\n", __func__);
|
||||
/* FIXME fill in values here */
|
||||
}
|
||||
}
|
||||
|
|
|
@ -206,7 +206,7 @@ static int __init badge4_init(void)
|
|||
if (ret < 0)
|
||||
printk(KERN_ERR
|
||||
"%s: SA-1111 initialization failed (%d)\n",
|
||||
__FUNCTION__, ret);
|
||||
__func__, ret);
|
||||
|
||||
|
||||
/* maybe turn on 5v0 from the start */
|
||||
|
@ -240,11 +240,11 @@ void badge4_set_5V(unsigned subsystem, int on)
|
|||
/* detect on->off and off->on transitions */
|
||||
if ((!old_5V_bitmap) && (badge4_5V_bitmap)) {
|
||||
/* was off, now on */
|
||||
printk(KERN_INFO "%s: enabling 5V supply rail\n", __FUNCTION__);
|
||||
printk(KERN_INFO "%s: enabling 5V supply rail\n", __func__);
|
||||
GPSR = BADGE4_GPIO_PCMEN5V;
|
||||
} else if ((old_5V_bitmap) && (!badge4_5V_bitmap)) {
|
||||
/* was on, now off */
|
||||
printk(KERN_INFO "%s: disabling 5V supply rail\n", __FUNCTION__);
|
||||
printk(KERN_INFO "%s: disabling 5V supply rail\n", __func__);
|
||||
GPCR = BADGE4_GPIO_PCMEN5V;
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ static void sa1100_update_dram_timings(int current_speed, int new_speed)
|
|||
|
||||
if (settings->speed == 0) {
|
||||
panic("%s: couldn't find dram setting for speed %d\n",
|
||||
__FUNCTION__, new_speed);
|
||||
__func__, new_speed);
|
||||
}
|
||||
|
||||
/* No risk, no fun: run with interrupts on! */
|
||||
|
|
|
@ -129,7 +129,7 @@ int sa1100_request_dma (dma_device_t device, const char *device_id,
|
|||
if (err) {
|
||||
printk(KERN_ERR
|
||||
"%s: unable to request IRQ %d for %s\n",
|
||||
__FUNCTION__, IRQ_DMA0 + i, device_id);
|
||||
__func__, IRQ_DMA0 + i, device_id);
|
||||
dma->device = 0;
|
||||
return err;
|
||||
}
|
||||
|
@ -165,12 +165,12 @@ void sa1100_free_dma(dma_regs_t *regs)
|
|||
if (regs == (dma_regs_t *)&DDAR(i))
|
||||
break;
|
||||
if (i >= SA1100_DMA_CHANNELS) {
|
||||
printk(KERN_ERR "%s: bad DMA identifier\n", __FUNCTION__);
|
||||
printk(KERN_ERR "%s: bad DMA identifier\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dma_chan[i].device) {
|
||||
printk(KERN_ERR "%s: Trying to free free DMA\n", __FUNCTION__);
|
||||
printk(KERN_ERR "%s: Trying to free free DMA\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -329,7 +329,7 @@ void sa1100_reset_dma(dma_regs_t *regs)
|
|||
if (regs == (dma_regs_t *)&DDAR(i))
|
||||
break;
|
||||
if (i >= SA1100_DMA_CHANNELS) {
|
||||
printk(KERN_ERR "%s: bad DMA identifier\n", __FUNCTION__);
|
||||
printk(KERN_ERR "%s: bad DMA identifier\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -596,7 +596,7 @@ static void h3800_control_egpio(enum ipaq_egpio_type x, int setp)
|
|||
case IPAQ_EGPIO_CODEC_NRESET:
|
||||
case IPAQ_EGPIO_AUDIO_ON:
|
||||
case IPAQ_EGPIO_QMUTE:
|
||||
printk("%s: error - should not be called\n", __FUNCTION__);
|
||||
printk("%s: error - should not be called\n", __func__);
|
||||
break;
|
||||
case IPAQ_EGPIO_OPT_NVRAM_ON:
|
||||
SET_ASIC2(GPIO2_OPT_ON_NVRAM);
|
||||
|
@ -638,7 +638,7 @@ static int h3800_pm_callback(int req)
|
|||
static u16 asic2_data;
|
||||
int result = 0;
|
||||
|
||||
printk("%s %d\n", __FUNCTION__, req);
|
||||
printk("%s %d\n", __func__, req);
|
||||
|
||||
switch (req) {
|
||||
case PM_RESUME:
|
||||
|
@ -666,7 +666,7 @@ static int h3800_pm_callback(int req)
|
|||
asic2_data = H3800_ASIC2_GPIOPIOD;
|
||||
break;
|
||||
default:
|
||||
printk("%s: unrecognized PM callback\n", __FUNCTION__);
|
||||
printk("%s: unrecognized PM callback\n", __func__);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
|
@ -706,7 +706,7 @@ static void h3800_IRQ_demux(unsigned int irq, struct irq_desc *desc)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (0) printk("%s: interrupt received\n", __FUNCTION__);
|
||||
if (0) printk("%s: interrupt received\n", __func__);
|
||||
|
||||
desc->chip->ack(irq);
|
||||
|
||||
|
@ -716,21 +716,21 @@ static void h3800_IRQ_demux(unsigned int irq, struct irq_desc *desc)
|
|||
|
||||
/* KPIO */
|
||||
irq = H3800_ASIC2_KPIINTFLAG;
|
||||
if (0) printk("%s KPIO 0x%08X\n", __FUNCTION__, irq);
|
||||
if (0) printk("%s KPIO 0x%08X\n", __func__, irq);
|
||||
for (j = 0; j < H3800_KPIO_IRQ_COUNT; j++)
|
||||
if (irq & kpio_irq_mask[j])
|
||||
handle_edge_irq(H3800_KPIO_IRQ_COUNT + j, irq_desc + H3800_KPIO_IRQ_COUNT + j);
|
||||
|
||||
/* GPIO2 */
|
||||
irq = H3800_ASIC2_GPIINTFLAG;
|
||||
if (0) printk("%s GPIO 0x%08X\n", __FUNCTION__, irq);
|
||||
if (0) printk("%s GPIO 0x%08X\n", __func__, irq);
|
||||
for (j = 0; j < H3800_GPIO_IRQ_COUNT; j++)
|
||||
if (irq & gpio_irq_mask[j])
|
||||
handle_edge_irq(H3800_GPIO_IRQ_COUNT + j, irq_desc + H3800_GPIO_IRQ_COUNT + j);
|
||||
}
|
||||
|
||||
if (i >= MAX_ASIC_ISR_LOOPS)
|
||||
printk("%s: interrupt processing overrun\n", __FUNCTION__);
|
||||
printk("%s: interrupt processing overrun\n", __func__);
|
||||
|
||||
/* For level-based interrupts */
|
||||
desc->chip->unmask(irq);
|
||||
|
|
|
@ -114,6 +114,10 @@ clean_addr: .word CLEAN_ADDR
|
|||
* Nothing too exciting at the moment
|
||||
*/
|
||||
ENTRY(cpu_xscale_proc_init)
|
||||
@ enable write buffer coalescing. Some bootloader disable it
|
||||
mrc p15, 0, r1, c1, c0, 1
|
||||
bic r1, r1, #1
|
||||
mcr p15, 0, r1, c1, c0, 1
|
||||
mov pc, lr
|
||||
|
||||
/*
|
||||
|
|
|
@ -371,7 +371,7 @@ static int __init iop3xx_init_atu_setup(char *str)
|
|||
default:
|
||||
printk(KERN_DEBUG "\"%s\" malformed at "
|
||||
"character: \'%c\'",
|
||||
__FUNCTION__,
|
||||
__func__,
|
||||
*str);
|
||||
*(str + 1) = '\0';
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ choice
|
|||
|
||||
config ARCH_OMAP1
|
||||
bool "TI OMAP1"
|
||||
select GENERIC_CLOCKEVENTS
|
||||
|
||||
config ARCH_OMAP2
|
||||
bool "TI OMAP2"
|
||||
|
|
|
@ -14,9 +14,14 @@ obj-$(CONFIG_OMAP_32K_TIMER) += timer32k.o
|
|||
# OCPI interconnect support for 1710, 1610 and 5912
|
||||
obj-$(CONFIG_ARCH_OMAP16XX) += ocpi.o
|
||||
|
||||
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
|
||||
|
||||
obj-$(CONFIG_CPU_FREQ) += cpu-omap.o
|
||||
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o
|
||||
obj-$(CONFIG_I2C_OMAP) += i2c.o
|
||||
|
||||
# OMAP mailbox framework
|
||||
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox.o
|
||||
|
||||
|
|
|
@ -33,43 +33,33 @@
|
|||
#define MPU_CLK "virt_prcm_set"
|
||||
#endif
|
||||
|
||||
static struct clk *mpu_clk;
|
||||
|
||||
/* TODO: Add support for SDRAM timing changes */
|
||||
|
||||
int omap_verify_speed(struct cpufreq_policy *policy)
|
||||
{
|
||||
struct clk * mpu_clk;
|
||||
|
||||
if (policy->cpu)
|
||||
return -EINVAL;
|
||||
|
||||
cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
|
||||
policy->cpuinfo.max_freq);
|
||||
mpu_clk = clk_get(NULL, MPU_CLK);
|
||||
if (IS_ERR(mpu_clk))
|
||||
return PTR_ERR(mpu_clk);
|
||||
|
||||
policy->min = clk_round_rate(mpu_clk, policy->min * 1000) / 1000;
|
||||
policy->max = clk_round_rate(mpu_clk, policy->max * 1000) / 1000;
|
||||
cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
|
||||
policy->cpuinfo.max_freq);
|
||||
clk_put(mpu_clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned int omap_getspeed(unsigned int cpu)
|
||||
{
|
||||
struct clk * mpu_clk;
|
||||
unsigned long rate;
|
||||
|
||||
if (cpu)
|
||||
return 0;
|
||||
|
||||
mpu_clk = clk_get(NULL, MPU_CLK);
|
||||
if (IS_ERR(mpu_clk))
|
||||
return 0;
|
||||
rate = clk_get_rate(mpu_clk) / 1000;
|
||||
clk_put(mpu_clk);
|
||||
|
||||
return rate;
|
||||
}
|
||||
|
||||
|
@ -77,14 +67,9 @@ static int omap_target(struct cpufreq_policy *policy,
|
|||
unsigned int target_freq,
|
||||
unsigned int relation)
|
||||
{
|
||||
struct clk * mpu_clk;
|
||||
struct cpufreq_freqs freqs;
|
||||
int ret = 0;
|
||||
|
||||
mpu_clk = clk_get(NULL, MPU_CLK);
|
||||
if (IS_ERR(mpu_clk))
|
||||
return PTR_ERR(mpu_clk);
|
||||
|
||||
freqs.old = omap_getspeed(0);
|
||||
freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000;
|
||||
freqs.cpu = 0;
|
||||
|
@ -92,15 +77,12 @@ static int omap_target(struct cpufreq_policy *policy,
|
|||
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
|
||||
ret = clk_set_rate(mpu_clk, target_freq * 1000);
|
||||
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
|
||||
clk_put(mpu_clk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init omap_cpu_init(struct cpufreq_policy *policy)
|
||||
{
|
||||
struct clk * mpu_clk;
|
||||
|
||||
mpu_clk = clk_get(NULL, MPU_CLK);
|
||||
if (IS_ERR(mpu_clk))
|
||||
return PTR_ERR(mpu_clk);
|
||||
|
@ -111,17 +93,23 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
|
|||
policy->cpuinfo.min_freq = clk_round_rate(mpu_clk, 0) / 1000;
|
||||
policy->cpuinfo.max_freq = clk_round_rate(mpu_clk, VERY_HI_RATE) / 1000;
|
||||
policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
|
||||
clk_put(mpu_clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap_cpu_exit(struct cpufreq_policy *policy)
|
||||
{
|
||||
clk_put(mpu_clk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct cpufreq_driver omap_driver = {
|
||||
.flags = CPUFREQ_STICKY,
|
||||
.verify = omap_verify_speed,
|
||||
.target = omap_target,
|
||||
.get = omap_getspeed,
|
||||
.init = omap_cpu_init,
|
||||
.exit = omap_cpu_exit,
|
||||
.name = "omap",
|
||||
};
|
||||
|
||||
|
|
|
@ -88,68 +88,6 @@ EXPORT_SYMBOL(dsp_kfunc_device_register);
|
|||
static inline void omap_init_dsp(void) { }
|
||||
#endif /* CONFIG_OMAP_DSP */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
|
||||
|
||||
#define OMAP1_I2C_BASE 0xfffb3800
|
||||
#define OMAP2_I2C_BASE1 0x48070000
|
||||
#define OMAP_I2C_SIZE 0x3f
|
||||
#define OMAP1_I2C_INT INT_I2C
|
||||
#define OMAP2_I2C_INT1 56
|
||||
|
||||
static struct resource i2c_resources1[] = {
|
||||
{
|
||||
.start = 0,
|
||||
.end = 0,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = 0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
/* DMA not used; works around erratum writing to non-empty i2c fifo */
|
||||
|
||||
static struct platform_device omap_i2c_device1 = {
|
||||
.name = "i2c_omap",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(i2c_resources1),
|
||||
.resource = i2c_resources1,
|
||||
};
|
||||
|
||||
/* See also arch/arm/mach-omap2/devices.c for second I2C on 24xx */
|
||||
static void omap_init_i2c(void)
|
||||
{
|
||||
if (cpu_is_omap24xx()) {
|
||||
i2c_resources1[0].start = OMAP2_I2C_BASE1;
|
||||
i2c_resources1[0].end = OMAP2_I2C_BASE1 + OMAP_I2C_SIZE;
|
||||
i2c_resources1[1].start = OMAP2_I2C_INT1;
|
||||
} else {
|
||||
i2c_resources1[0].start = OMAP1_I2C_BASE;
|
||||
i2c_resources1[0].end = OMAP1_I2C_BASE + OMAP_I2C_SIZE;
|
||||
i2c_resources1[1].start = OMAP1_I2C_INT;
|
||||
}
|
||||
|
||||
/* FIXME define and use a boot tag, in case of boards that
|
||||
* either don't wire up I2C, or chips that mux it differently...
|
||||
* it can include clocking and address info, maybe more.
|
||||
*/
|
||||
if (cpu_is_omap24xx()) {
|
||||
omap_cfg_reg(M19_24XX_I2C1_SCL);
|
||||
omap_cfg_reg(L15_24XX_I2C1_SDA);
|
||||
} else {
|
||||
omap_cfg_reg(I2C_SCL);
|
||||
omap_cfg_reg(I2C_SDA);
|
||||
}
|
||||
|
||||
(void) platform_device_register(&omap_i2c_device1);
|
||||
}
|
||||
|
||||
#else
|
||||
static inline void omap_init_i2c(void) {}
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
#if defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE)
|
||||
|
||||
|
@ -501,7 +439,6 @@ static int __init omap_init_devices(void)
|
|||
* in alphabetical order so they're easier to sort through.
|
||||
*/
|
||||
omap_init_dsp();
|
||||
omap_init_i2c();
|
||||
omap_init_kp();
|
||||
omap_init_mmc();
|
||||
omap_init_uwire();
|
||||
|
|
|
@ -137,7 +137,7 @@ static void omap_disable_channel_irq(int lch);
|
|||
static inline void omap_enable_channel_irq(int lch);
|
||||
|
||||
#define REVISIT_24XX() printk(KERN_ERR "FIXME: no %s on 24xx\n", \
|
||||
__FUNCTION__);
|
||||
__func__);
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP15XX
|
||||
/* Returns 1 if the DMA module is in OMAP1510-compatible mode, 0 otherwise */
|
||||
|
@ -699,7 +699,7 @@ omap_dma_set_global_params(int arb_rate, int max_fifo_depth, int tparams)
|
|||
u32 reg;
|
||||
|
||||
if (!cpu_class_is_omap2()) {
|
||||
printk(KERN_ERR "FIXME: no %s on 15xx/16xx\n", __FUNCTION__);
|
||||
printk(KERN_ERR "FIXME: no %s on 15xx/16xx\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1020,12 +1020,12 @@ static void create_dma_lch_chain(int lch_head, int lch_queue)
|
|||
}
|
||||
|
||||
w = OMAP_DMA_CLNK_CTRL_REG(lch_head);
|
||||
w &= ~(0x0f);
|
||||
w &= ~(0x1f);
|
||||
w |= lch_queue;
|
||||
OMAP_DMA_CLNK_CTRL_REG(lch_head) = w;
|
||||
|
||||
w = OMAP_DMA_CLNK_CTRL_REG(lch_queue);
|
||||
w &= ~(0x0f);
|
||||
w &= ~(0x1f);
|
||||
w |= (dma_chan[lch_queue].next_linked_ch);
|
||||
OMAP_DMA_CLNK_CTRL_REG(lch_queue) = w;
|
||||
}
|
||||
|
@ -1248,7 +1248,7 @@ EXPORT_SYMBOL(omap_dma_chain_status);
|
|||
* @param frame_count
|
||||
* @param callbk_data - channel callback parameter data.
|
||||
*
|
||||
* @return - Success : start_dma status
|
||||
* @return - Success : 0
|
||||
* Failure: -EINVAL/-EBUSY
|
||||
*/
|
||||
int omap_dma_chain_a_transfer(int chain_id, int src_start, int dest_start,
|
||||
|
@ -1367,7 +1367,7 @@ int omap_dma_chain_a_transfer(int chain_id, int src_start, int dest_start,
|
|||
dma_chan[lch].flags |= OMAP_DMA_ACTIVE;
|
||||
}
|
||||
}
|
||||
return start_dma;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(omap_dma_chain_a_transfer);
|
||||
|
||||
|
@ -1663,6 +1663,7 @@ static int omap2_dma_handle_ch(int ch)
|
|||
if (!status) {
|
||||
if (printk_ratelimit())
|
||||
printk(KERN_WARNING "Spurious DMA IRQ for lch %d\n", ch);
|
||||
omap_writel(1 << ch, OMAP_DMA4_IRQSTATUS_L0);
|
||||
return 0;
|
||||
}
|
||||
if (unlikely(dma_chan[ch].dev_id == -1)) {
|
||||
|
@ -1705,14 +1706,8 @@ static int omap2_dma_handle_ch(int ch)
|
|||
status = OMAP_DMA_CSR_REG(ch);
|
||||
}
|
||||
|
||||
if (likely(dma_chan[ch].callback != NULL)) {
|
||||
if (dma_chan[ch].chain_id != -1)
|
||||
dma_chan[ch].callback(dma_chan[ch].chain_id, status,
|
||||
dma_chan[ch].data);
|
||||
else
|
||||
dma_chan[ch].callback(ch, status, dma_chan[ch].data);
|
||||
|
||||
}
|
||||
if (likely(dma_chan[ch].callback != NULL))
|
||||
dma_chan[ch].callback(ch, status, dma_chan[ch].data);
|
||||
|
||||
OMAP_DMA_CSR_REG(ch) = status;
|
||||
|
||||
|
|
|
@ -268,7 +268,7 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id)
|
|||
if (id <= 0 || id > dm_timer_count || dm_timers[id-1].reserved) {
|
||||
spin_unlock_irqrestore(&dm_timer_lock, flags);
|
||||
printk("BUG: warning at %s:%d/%s(): unable to get timer %d\n",
|
||||
__FILE__, __LINE__, __FUNCTION__, id);
|
||||
__FILE__, __LINE__, __func__, id);
|
||||
dump_stack();
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -333,13 +333,14 @@ static void _set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)
|
|||
void omap_set_gpio_direction(int gpio, int is_input)
|
||||
{
|
||||
struct gpio_bank *bank;
|
||||
unsigned long flags;
|
||||
|
||||
if (check_gpio(gpio) < 0)
|
||||
return;
|
||||
bank = get_gpio_bank(gpio);
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
_set_gpio_direction(bank, get_gpio_index(gpio), is_input);
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
}
|
||||
|
||||
static void _set_gpio_dataout(struct gpio_bank *bank, int gpio, int enable)
|
||||
|
@ -406,13 +407,14 @@ static void _set_gpio_dataout(struct gpio_bank *bank, int gpio, int enable)
|
|||
void omap_set_gpio_dataout(int gpio, int enable)
|
||||
{
|
||||
struct gpio_bank *bank;
|
||||
unsigned long flags;
|
||||
|
||||
if (check_gpio(gpio) < 0)
|
||||
return;
|
||||
bank = get_gpio_bank(gpio);
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
_set_gpio_dataout(bank, get_gpio_index(gpio), enable);
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
}
|
||||
|
||||
int omap_get_gpio_datain(int gpio)
|
||||
|
@ -624,6 +626,7 @@ static int gpio_irq_type(unsigned irq, unsigned type)
|
|||
struct gpio_bank *bank;
|
||||
unsigned gpio;
|
||||
int retval;
|
||||
unsigned long flags;
|
||||
|
||||
if (!cpu_class_is_omap2() && irq > IH_MPUIO_BASE)
|
||||
gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
|
||||
|
@ -642,13 +645,13 @@ static int gpio_irq_type(unsigned irq, unsigned type)
|
|||
return -EINVAL;
|
||||
|
||||
bank = get_irq_chip_data(irq);
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
retval = _set_gpio_triggering(bank, get_gpio_index(gpio), type);
|
||||
if (retval == 0) {
|
||||
irq_desc[irq].status &= ~IRQ_TYPE_SENSE_MASK;
|
||||
irq_desc[irq].status |= type;
|
||||
}
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -830,11 +833,13 @@ static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int ena
|
|||
*/
|
||||
static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
switch (bank->method) {
|
||||
#ifdef CONFIG_ARCH_OMAP16XX
|
||||
case METHOD_MPUIO:
|
||||
case METHOD_GPIO_1610:
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
if (enable) {
|
||||
bank->suspend_wakeup |= (1 << gpio);
|
||||
enable_irq_wake(bank->irq);
|
||||
|
@ -842,7 +847,7 @@ static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
|
|||
disable_irq_wake(bank->irq);
|
||||
bank->suspend_wakeup &= ~(1 << gpio);
|
||||
}
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
return 0;
|
||||
#endif
|
||||
#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
|
||||
|
@ -853,7 +858,7 @@ static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
|
|||
(bank - gpio_bank) * 32 + gpio);
|
||||
return -EINVAL;
|
||||
}
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
if (enable) {
|
||||
bank->suspend_wakeup |= (1 << gpio);
|
||||
enable_irq_wake(bank->irq);
|
||||
|
@ -861,7 +866,7 @@ static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
|
|||
disable_irq_wake(bank->irq);
|
||||
bank->suspend_wakeup &= ~(1 << gpio);
|
||||
}
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
return 0;
|
||||
#endif
|
||||
default:
|
||||
|
@ -897,16 +902,17 @@ static int gpio_wake_enable(unsigned int irq, unsigned int enable)
|
|||
int omap_request_gpio(int gpio)
|
||||
{
|
||||
struct gpio_bank *bank;
|
||||
unsigned long flags;
|
||||
|
||||
if (check_gpio(gpio) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
bank = get_gpio_bank(gpio);
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
if (unlikely(bank->reserved_map & (1 << get_gpio_index(gpio)))) {
|
||||
printk(KERN_ERR "omap-gpio: GPIO %d is already reserved!\n", gpio);
|
||||
dump_stack();
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
return -1;
|
||||
}
|
||||
bank->reserved_map |= (1 << get_gpio_index(gpio));
|
||||
|
@ -925,7 +931,7 @@ int omap_request_gpio(int gpio)
|
|||
__raw_writel(__raw_readl(reg) | (1 << get_gpio_index(gpio)), reg);
|
||||
}
|
||||
#endif
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -933,15 +939,16 @@ int omap_request_gpio(int gpio)
|
|||
void omap_free_gpio(int gpio)
|
||||
{
|
||||
struct gpio_bank *bank;
|
||||
unsigned long flags;
|
||||
|
||||
if (check_gpio(gpio) < 0)
|
||||
return;
|
||||
bank = get_gpio_bank(gpio);
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
if (unlikely(!(bank->reserved_map & (1 << get_gpio_index(gpio))))) {
|
||||
printk(KERN_ERR "omap-gpio: GPIO %d wasn't reserved!\n", gpio);
|
||||
dump_stack();
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
return;
|
||||
}
|
||||
#ifdef CONFIG_ARCH_OMAP16XX
|
||||
|
@ -960,7 +967,7 @@ void omap_free_gpio(int gpio)
|
|||
#endif
|
||||
bank->reserved_map &= ~(1 << get_gpio_index(gpio));
|
||||
_reset_gpio(bank, gpio);
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1127,10 +1134,9 @@ static void gpio_mask_irq(unsigned int irq)
|
|||
static void gpio_unmask_irq(unsigned int irq)
|
||||
{
|
||||
unsigned int gpio = irq - IH_GPIO_BASE;
|
||||
unsigned int gpio_idx = get_gpio_index(gpio);
|
||||
struct gpio_bank *bank = get_irq_chip_data(irq);
|
||||
|
||||
_set_gpio_irqenable(bank, gpio_idx, 1);
|
||||
_set_gpio_irqenable(bank, gpio, 1);
|
||||
}
|
||||
|
||||
static struct irq_chip gpio_irq_chip = {
|
||||
|
@ -1194,11 +1200,12 @@ static int omap_mpuio_suspend_late(struct platform_device *pdev, pm_message_t me
|
|||
{
|
||||
struct gpio_bank *bank = platform_get_drvdata(pdev);
|
||||
void __iomem *mask_reg = bank->base + OMAP_MPUIO_GPIO_MASKIT;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
bank->saved_wakeup = __raw_readl(mask_reg);
|
||||
__raw_writel(0xffff & ~bank->suspend_wakeup, mask_reg);
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1207,10 +1214,11 @@ static int omap_mpuio_resume_early(struct platform_device *pdev)
|
|||
{
|
||||
struct gpio_bank *bank = platform_get_drvdata(pdev);
|
||||
void __iomem *mask_reg = bank->base + OMAP_MPUIO_GPIO_MASKIT;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
__raw_writel(bank->saved_wakeup, mask_reg);
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1277,6 +1285,11 @@ static struct clk *gpio_fclks[OMAP34XX_NR_GPIOS];
|
|||
static struct clk *gpio_iclks[OMAP34XX_NR_GPIOS];
|
||||
#endif
|
||||
|
||||
/* This lock class tells lockdep that GPIO irqs are in a different
|
||||
* category than their parents, so it won't report false recursion.
|
||||
*/
|
||||
static struct lock_class_key gpio_lock_class;
|
||||
|
||||
static int __init _omap_gpio_init(void)
|
||||
{
|
||||
int i;
|
||||
|
@ -1450,6 +1463,7 @@ static int __init _omap_gpio_init(void)
|
|||
#endif
|
||||
for (j = bank->virtual_irq_start;
|
||||
j < bank->virtual_irq_start + gpio_count; j++) {
|
||||
lockdep_set_class(&irq_desc[j].lock, &gpio_lock_class);
|
||||
set_irq_chip_data(j, bank);
|
||||
if (bank_is_mpuio(bank))
|
||||
set_irq_chip(j, &mpuio_irq_chip);
|
||||
|
@ -1489,6 +1503,7 @@ static int omap_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
|
|||
void __iomem *wake_status;
|
||||
void __iomem *wake_clear;
|
||||
void __iomem *wake_set;
|
||||
unsigned long flags;
|
||||
|
||||
switch (bank->method) {
|
||||
#ifdef CONFIG_ARCH_OMAP16XX
|
||||
|
@ -1509,11 +1524,11 @@ static int omap_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
|
|||
continue;
|
||||
}
|
||||
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
bank->saved_wakeup = __raw_readl(wake_status);
|
||||
__raw_writel(0xffffffff, wake_clear);
|
||||
__raw_writel(bank->suspend_wakeup, wake_set);
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1530,6 +1545,7 @@ static int omap_gpio_resume(struct sys_device *dev)
|
|||
struct gpio_bank *bank = &gpio_bank[i];
|
||||
void __iomem *wake_clear;
|
||||
void __iomem *wake_set;
|
||||
unsigned long flags;
|
||||
|
||||
switch (bank->method) {
|
||||
#ifdef CONFIG_ARCH_OMAP16XX
|
||||
|
@ -1548,10 +1564,10 @@ static int omap_gpio_resume(struct sys_device *dev)
|
|||
continue;
|
||||
}
|
||||
|
||||
spin_lock(&bank->lock);
|
||||
spin_lock_irqsave(&bank->lock, flags);
|
||||
__raw_writel(0xffffffff, wake_clear);
|
||||
__raw_writel(bank->saved_wakeup, wake_set);
|
||||
spin_unlock(&bank->lock);
|
||||
spin_unlock_irqrestore(&bank->lock, flags);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -130,8 +130,8 @@ dmadbg_showregs(const char *fname, int line, struct s3c2410_dma_chan *chan)
|
|||
dmadbg_dumpregs(fname, line, chan, &state);
|
||||
}
|
||||
|
||||
#define dbg_showregs(chan) dmadbg_showregs(__FUNCTION__, __LINE__, (chan))
|
||||
#define dbg_showchan(chan) dmadbg_showchan(__FUNCTION__, __LINE__, (chan))
|
||||
#define dbg_showregs(chan) dmadbg_showregs(__func__, __LINE__, (chan))
|
||||
#define dbg_showchan(chan) dmadbg_showchan(__func__, __LINE__, (chan))
|
||||
#else
|
||||
#define dbg_showregs(chan) do { } while(0)
|
||||
#define dbg_showchan(chan) do { } while(0)
|
||||
|
@ -403,7 +403,7 @@ static int s3c2410_dma_start(struct s3c2410_dma_chan *chan)
|
|||
|
||||
if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
|
||||
pr_debug("%s: buff not yet loaded, no more todo\n",
|
||||
__FUNCTION__);
|
||||
__func__);
|
||||
} else {
|
||||
chan->load_state = S3C2410_DMALOAD_1RUNNING;
|
||||
s3c2410_dma_loadbuffer(chan, chan->next);
|
||||
|
@ -463,16 +463,16 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
|
|||
return -EINVAL;
|
||||
|
||||
pr_debug("%s: id=%p, data=%08x, size=%d\n",
|
||||
__FUNCTION__, id, (unsigned int)data, size);
|
||||
__func__, id, (unsigned int)data, size);
|
||||
|
||||
buf = kmem_cache_alloc(dma_kmem, GFP_ATOMIC);
|
||||
if (buf == NULL) {
|
||||
pr_debug("%s: out of memory (%ld alloc)\n",
|
||||
__FUNCTION__, (long)sizeof(*buf));
|
||||
__func__, (long)sizeof(*buf));
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
//pr_debug("%s: new buffer %p\n", __FUNCTION__, buf);
|
||||
//pr_debug("%s: new buffer %p\n", __func__, buf);
|
||||
//dbg_showchan(chan);
|
||||
|
||||
buf->next = NULL;
|
||||
|
@ -486,18 +486,18 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id,
|
|||
if (chan->curr == NULL) {
|
||||
/* we've got nothing loaded... */
|
||||
pr_debug("%s: buffer %p queued onto empty channel\n",
|
||||
__FUNCTION__, buf);
|
||||
__func__, buf);
|
||||
|
||||
chan->curr = buf;
|
||||
chan->end = buf;
|
||||
chan->next = NULL;
|
||||
} else {
|
||||
pr_debug("dma%d: %s: buffer %p queued onto non-empty channel\n",
|
||||
chan->number, __FUNCTION__, buf);
|
||||
chan->number, __func__, buf);
|
||||
|
||||
if (chan->end == NULL)
|
||||
pr_debug("dma%d: %s: %p not empty, and chan->end==NULL?\n",
|
||||
chan->number, __FUNCTION__, chan);
|
||||
chan->number, __func__, chan);
|
||||
|
||||
chan->end->next = buf;
|
||||
chan->end = buf;
|
||||
|
@ -572,7 +572,7 @@ s3c2410_dma_lastxfer(struct s3c2410_dma_chan *chan)
|
|||
if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
|
||||
/* flag error? */
|
||||
printk(KERN_ERR "dma%d: timeout waiting for load (%s)\n",
|
||||
chan->number, __FUNCTION__);
|
||||
chan->number, __func__);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
@ -658,7 +658,7 @@ s3c2410_dma_irq(int irq, void *devpw)
|
|||
|
||||
if (buf->magic != BUF_MAGIC) {
|
||||
printk(KERN_ERR "dma%d: %s: buf %p incorrect magic\n",
|
||||
chan->number, __FUNCTION__, buf);
|
||||
chan->number, __func__, buf);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
@ -692,7 +692,7 @@ s3c2410_dma_irq(int irq, void *devpw)
|
|||
if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
|
||||
/* flag error? */
|
||||
printk(KERN_ERR "dma%d: timeout waiting for load (%s)\n",
|
||||
chan->number, __FUNCTION__);
|
||||
chan->number, __func__);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
@ -759,7 +759,7 @@ int s3c2410_dma_request(unsigned int channel,
|
|||
|
||||
if (!chan->irq_claimed) {
|
||||
pr_debug("dma%d: %s : requesting irq %d\n",
|
||||
channel, __FUNCTION__, chan->irq);
|
||||
channel, __func__, chan->irq);
|
||||
|
||||
chan->irq_claimed = 1;
|
||||
local_irq_restore(flags);
|
||||
|
@ -786,7 +786,7 @@ int s3c2410_dma_request(unsigned int channel,
|
|||
|
||||
/* need to setup */
|
||||
|
||||
pr_debug("%s: channel initialised, %p\n", __FUNCTION__, chan);
|
||||
pr_debug("%s: channel initialised, %p\n", __func__, chan);
|
||||
|
||||
return chan->number | DMACH_LOW_LEVEL;
|
||||
}
|
||||
|
@ -823,7 +823,7 @@ int s3c2410_dma_free(dmach_t channel, struct s3c2410_dma_client *client)
|
|||
|
||||
if (chan->state != S3C2410_DMA_IDLE) {
|
||||
pr_debug("%s: need to stop dma channel %p\n",
|
||||
__FUNCTION__, chan);
|
||||
__func__, chan);
|
||||
|
||||
/* possibly flush the channel */
|
||||
s3c2410_dma_ctrl(channel, S3C2410_DMAOP_STOP);
|
||||
|
@ -852,7 +852,7 @@ static int s3c2410_dma_dostop(struct s3c2410_dma_chan *chan)
|
|||
unsigned long flags;
|
||||
unsigned long tmp;
|
||||
|
||||
pr_debug("%s:\n", __FUNCTION__);
|
||||
pr_debug("%s:\n", __func__);
|
||||
|
||||
dbg_showchan(chan);
|
||||
|
||||
|
@ -907,14 +907,14 @@ static int s3c2410_dma_flush(struct s3c2410_dma_chan *chan)
|
|||
struct s3c2410_dma_buf *buf, *next;
|
||||
unsigned long flags;
|
||||
|
||||
pr_debug("%s: chan %p (%d)\n", __FUNCTION__, chan, chan->number);
|
||||
pr_debug("%s: chan %p (%d)\n", __func__, chan, chan->number);
|
||||
|
||||
dbg_showchan(chan);
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
if (chan->state != S3C2410_DMA_IDLE) {
|
||||
pr_debug("%s: stopping channel...\n", __FUNCTION__ );
|
||||
pr_debug("%s: stopping channel...\n", __func__ );
|
||||
s3c2410_dma_ctrl(chan->number, S3C2410_DMAOP_STOP);
|
||||
}
|
||||
|
||||
|
@ -929,7 +929,7 @@ static int s3c2410_dma_flush(struct s3c2410_dma_chan *chan)
|
|||
next = buf->next;
|
||||
|
||||
pr_debug("%s: free buffer %p, next %p\n",
|
||||
__FUNCTION__, buf, buf->next);
|
||||
__func__, buf, buf->next);
|
||||
|
||||
s3c2410_dma_buffdone(chan, buf, S3C2410_RES_ABORT);
|
||||
s3c2410_dma_freebuf(buf);
|
||||
|
@ -976,7 +976,7 @@ static int s3c2410_dma_started(struct s3c2410_dma_chan *chan)
|
|||
|
||||
if (s3c2410_dma_waitforload(chan, __LINE__) == 0) {
|
||||
pr_debug("%s: buff not yet loaded, no more todo\n",
|
||||
__FUNCTION__);
|
||||
__func__);
|
||||
} else {
|
||||
chan->load_state = S3C2410_DMALOAD_1RUNNING;
|
||||
s3c2410_dma_loadbuffer(chan, chan->next);
|
||||
|
@ -1050,16 +1050,16 @@ int s3c2410_dma_config(dmach_t channel,
|
|||
struct s3c2410_dma_chan *chan = lookup_dma_channel(channel);
|
||||
|
||||
pr_debug("%s: chan=%d, xfer_unit=%d, dcon=%08x\n",
|
||||
__FUNCTION__, channel, xferunit, dcon);
|
||||
__func__, channel, xferunit, dcon);
|
||||
|
||||
if (chan == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("%s: Initial dcon is %08x\n", __FUNCTION__, dcon);
|
||||
pr_debug("%s: Initial dcon is %08x\n", __func__, dcon);
|
||||
|
||||
dcon |= chan->dcon & dma_sel.dcon_mask;
|
||||
|
||||
pr_debug("%s: New dcon is %08x\n", __FUNCTION__, dcon);
|
||||
pr_debug("%s: New dcon is %08x\n", __func__, dcon);
|
||||
|
||||
switch (xferunit) {
|
||||
case 1:
|
||||
|
@ -1075,14 +1075,14 @@ int s3c2410_dma_config(dmach_t channel,
|
|||
break;
|
||||
|
||||
default:
|
||||
pr_debug("%s: bad transfer size %d\n", __FUNCTION__, xferunit);
|
||||
pr_debug("%s: bad transfer size %d\n", __func__, xferunit);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dcon |= S3C2410_DCON_HWTRIG;
|
||||
dcon |= S3C2410_DCON_INTREQ;
|
||||
|
||||
pr_debug("%s: dcon now %08x\n", __FUNCTION__, dcon);
|
||||
pr_debug("%s: dcon now %08x\n", __func__, dcon);
|
||||
|
||||
chan->dcon = dcon;
|
||||
chan->xfer_unit = xferunit;
|
||||
|
@ -1099,7 +1099,7 @@ int s3c2410_dma_setflags(dmach_t channel, unsigned int flags)
|
|||
if (chan == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("%s: chan=%p, flags=%08x\n", __FUNCTION__, chan, flags);
|
||||
pr_debug("%s: chan=%p, flags=%08x\n", __func__, chan, flags);
|
||||
|
||||
chan->flags = flags;
|
||||
|
||||
|
@ -1120,7 +1120,7 @@ int s3c2410_dma_set_opfn(dmach_t channel, s3c2410_dma_opfn_t rtn)
|
|||
if (chan == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("%s: chan=%p, op rtn=%p\n", __FUNCTION__, chan, rtn);
|
||||
pr_debug("%s: chan=%p, op rtn=%p\n", __func__, chan, rtn);
|
||||
|
||||
chan->op_fn = rtn;
|
||||
|
||||
|
@ -1136,7 +1136,7 @@ int s3c2410_dma_set_buffdone_fn(dmach_t channel, s3c2410_dma_cbfn_t rtn)
|
|||
if (chan == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("%s: chan=%p, callback rtn=%p\n", __FUNCTION__, chan, rtn);
|
||||
pr_debug("%s: chan=%p, callback rtn=%p\n", __func__, chan, rtn);
|
||||
|
||||
chan->callback_fn = rtn;
|
||||
|
||||
|
@ -1170,7 +1170,7 @@ int s3c2410_dma_devconfig(int channel,
|
|||
return -EINVAL;
|
||||
|
||||
pr_debug("%s: source=%d, hwcfg=%08x, devaddr=%08lx\n",
|
||||
__FUNCTION__, (int)source, hwcfg, devaddr);
|
||||
__func__, (int)source, hwcfg, devaddr);
|
||||
|
||||
chan->source = source;
|
||||
chan->dev_addr = devaddr;
|
||||
|
@ -1180,7 +1180,7 @@ int s3c2410_dma_devconfig(int channel,
|
|||
case S3C2410_DMASRC_HW:
|
||||
/* source is hardware */
|
||||
pr_debug("%s: hw source, devaddr=%08lx, hwcfg=%d\n",
|
||||
__FUNCTION__, devaddr, hwcfg);
|
||||
__func__, devaddr, hwcfg);
|
||||
dma_wrreg(chan, S3C2410_DMA_DISRCC, hwcfg & 3);
|
||||
dma_wrreg(chan, S3C2410_DMA_DISRC, devaddr);
|
||||
dma_wrreg(chan, S3C2410_DMA_DIDSTC, (0<<1) | (0<<0));
|
||||
|
@ -1190,8 +1190,8 @@ int s3c2410_dma_devconfig(int channel,
|
|||
|
||||
case S3C2410_DMASRC_MEM:
|
||||
/* source is memory */
|
||||
pr_debug( "%s: mem source, devaddr=%08lx, hwcfg=%d\n",
|
||||
__FUNCTION__, devaddr, hwcfg);
|
||||
pr_debug("%s: mem source, devaddr=%08lx, hwcfg=%d\n",
|
||||
__func__, devaddr, hwcfg);
|
||||
dma_wrreg(chan, S3C2410_DMA_DISRCC, (0<<1) | (0<<0));
|
||||
dma_wrreg(chan, S3C2410_DMA_DIDST, devaddr);
|
||||
dma_wrreg(chan, S3C2410_DMA_DIDSTC, hwcfg & 3);
|
||||
|
|
|
@ -163,6 +163,7 @@ add_reserved_region(resource_size_t start, resource_size_t end,
|
|||
new->start = start;
|
||||
new->end = end;
|
||||
new->name = name;
|
||||
new->sibling = next;
|
||||
new->flags = IORESOURCE_MEM;
|
||||
|
||||
*pprev = new;
|
||||
|
|
|
@ -178,6 +178,7 @@ static int do_cop_absent(u32 insn)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BUG
|
||||
int is_valid_bugaddr(unsigned long pc)
|
||||
{
|
||||
unsigned short opcode;
|
||||
|
@ -189,6 +190,7 @@ int is_valid_bugaddr(unsigned long pc)
|
|||
|
||||
return opcode == AVR32_BUG_OPCODE;
|
||||
}
|
||||
#endif
|
||||
|
||||
asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs)
|
||||
{
|
||||
|
@ -197,6 +199,7 @@ asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs)
|
|||
void __user *pc;
|
||||
long code;
|
||||
|
||||
#ifdef CONFIG_BUG
|
||||
if (!user_mode(regs) && (ecr == ECR_ILLEGAL_OPCODE)) {
|
||||
enum bug_trap_type type;
|
||||
|
||||
|
@ -211,6 +214,7 @@ asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs)
|
|||
die("Kernel BUG", regs, SIGKILL);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
local_irq_enable();
|
||||
|
||||
|
|
|
@ -1824,7 +1824,7 @@ choice
|
|||
Allows the configuration of the timer frequency.
|
||||
|
||||
config HZ_48
|
||||
bool "48 HZ" if SYS_SUPPORTS_48HZ
|
||||
bool "48 HZ" if SYS_SUPPORTS_48HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||
|
||||
config HZ_100
|
||||
bool "100 HZ" if SYS_SUPPORTS_100HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
# for "archclean" cleaning up for this architecture.
|
||||
#
|
||||
|
||||
KBUILD_DEFCONFIG := ip22_defconfig
|
||||
|
||||
cflags-y :=
|
||||
|
||||
#
|
||||
|
|
|
@ -161,22 +161,22 @@ static dbdev_tab_t dbdev_tab[] = {
|
|||
{ DSCR_CMD0_ALWAYS, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 },
|
||||
|
||||
/* Provide 16 user definable device types */
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
{ ~0, 0, 0, 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
#define DBDEV_TAB_SIZE ARRAY_SIZE(dbdev_tab)
|
||||
|
@ -209,7 +209,7 @@ au1xxx_ddma_add_device(dbdev_tab_t *dev)
|
|||
dbdev_tab_t *p=NULL;
|
||||
static u16 new_id=0x1000;
|
||||
|
||||
p = find_dbdev_id(0);
|
||||
p = find_dbdev_id(~0);
|
||||
if ( NULL != p )
|
||||
{
|
||||
memcpy(p, dev, sizeof(dbdev_tab_t));
|
||||
|
|
1158
arch/mips/defconfig
1158
arch/mips/defconfig
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -76,7 +76,6 @@ obj-$(CONFIG_PROC_FS) += proc.o
|
|||
obj-$(CONFIG_64BIT) += cpu-bugs64.o
|
||||
|
||||
obj-$(CONFIG_I8253) += i8253.o
|
||||
obj-$(CONFIG_PCSPEAKER) += pcspeaker.o
|
||||
|
||||
obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
|
||||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||
|
|
|
@ -167,7 +167,7 @@ static inline void check_mult_sh(void)
|
|||
panic(bug64hit, !R4000_WAR ? r4kwar : nowar);
|
||||
}
|
||||
|
||||
static volatile int daddi_ov __initdata = 0;
|
||||
static volatile int daddi_ov __cpuinitdata = 0;
|
||||
|
||||
asmlinkage void __init do_daddi_ov(struct pt_regs *regs)
|
||||
{
|
||||
|
@ -239,7 +239,7 @@ static inline void check_daddi(void)
|
|||
panic(bug64hit, !DADDI_WAR ? daddiwar : nowar);
|
||||
}
|
||||
|
||||
int daddiu_bug __initdata = -1;
|
||||
int daddiu_bug __cpuinitdata = -1;
|
||||
|
||||
static inline void check_daddiu(void)
|
||||
{
|
||||
|
|
|
@ -550,7 +550,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c)
|
|||
}
|
||||
}
|
||||
|
||||
static char unknown_isa[] __initdata = KERN_ERR \
|
||||
static char unknown_isa[] __cpuinitdata = KERN_ERR \
|
||||
"Unsupported ISA type, c0.config0: %d.";
|
||||
|
||||
static inline unsigned int decode_config0(struct cpuinfo_mips *c)
|
||||
|
@ -656,7 +656,7 @@ static inline unsigned int decode_config3(struct cpuinfo_mips *c)
|
|||
return config3 & MIPS_CONF_M;
|
||||
}
|
||||
|
||||
static void __init decode_configs(struct cpuinfo_mips *c)
|
||||
static void __cpuinit decode_configs(struct cpuinfo_mips *c)
|
||||
{
|
||||
/* MIPS32 or MIPS64 compliant CPU. */
|
||||
c->options = MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE | MIPS_CPU_COUNTER |
|
||||
|
@ -814,7 +814,7 @@ const char *__cpu_name[NR_CPUS];
|
|||
/*
|
||||
* Name a CPU
|
||||
*/
|
||||
static __init const char *cpu_to_name(struct cpuinfo_mips *c)
|
||||
static __cpuinit const char *cpu_to_name(struct cpuinfo_mips *c)
|
||||
{
|
||||
const char *name = NULL;
|
||||
|
||||
|
@ -896,7 +896,7 @@ static __init const char *cpu_to_name(struct cpuinfo_mips *c)
|
|||
return name;
|
||||
}
|
||||
|
||||
__init void cpu_probe(void)
|
||||
__cpuinit void cpu_probe(void)
|
||||
{
|
||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
||||
unsigned int cpu = smp_processor_id();
|
||||
|
@ -959,7 +959,7 @@ __init void cpu_probe(void)
|
|||
c->srsets = 1;
|
||||
}
|
||||
|
||||
__init void cpu_report(void)
|
||||
__cpuinit void cpu_report(void)
|
||||
{
|
||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
||||
|
||||
|
|
|
@ -22,12 +22,17 @@ static struct clocksource clocksource_mips = {
|
|||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
void __init init_mips_clocksource(void)
|
||||
int __init init_mips_clocksource(void)
|
||||
{
|
||||
if (!cpu_has_counter || !mips_hpt_frequency)
|
||||
return -ENXIO;
|
||||
|
||||
/* Calclate a somewhat reasonable rating value */
|
||||
clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000;
|
||||
|
||||
clocksource_set_clock(&clocksource_mips, mips_hpt_frequency);
|
||||
|
||||
clocksource_register(&clocksource_mips);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -195,7 +195,7 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
|
|||
j start_kernel
|
||||
END(kernel_entry)
|
||||
|
||||
__INIT
|
||||
__CPUINIT
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
|
|
|
@ -534,8 +534,7 @@ static int simulate_llsc(struct pt_regs *regs, unsigned int opcode)
|
|||
|
||||
/*
|
||||
* Simulate trapping 'rdhwr' instructions to provide user accessible
|
||||
* registers not implemented in hardware. The only current use of this
|
||||
* is the thread area pointer.
|
||||
* registers not implemented in hardware.
|
||||
*/
|
||||
static int simulate_rdhwr(struct pt_regs *regs, unsigned int opcode)
|
||||
{
|
||||
|
@ -545,11 +544,31 @@ static int simulate_rdhwr(struct pt_regs *regs, unsigned int opcode)
|
|||
int rd = (opcode & RD) >> 11;
|
||||
int rt = (opcode & RT) >> 16;
|
||||
switch (rd) {
|
||||
case 29:
|
||||
regs->regs[rt] = ti->tp_value;
|
||||
return 0;
|
||||
case 0: /* CPU number */
|
||||
regs->regs[rt] = smp_processor_id();
|
||||
return 0;
|
||||
case 1: /* SYNCI length */
|
||||
regs->regs[rt] = min(current_cpu_data.dcache.linesz,
|
||||
current_cpu_data.icache.linesz);
|
||||
return 0;
|
||||
case 2: /* Read count register */
|
||||
regs->regs[rt] = read_c0_count();
|
||||
return 0;
|
||||
case 3: /* Count register resolution */
|
||||
switch (current_cpu_data.cputype) {
|
||||
case CPU_20KC:
|
||||
case CPU_25KF:
|
||||
regs->regs[rt] = 1;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
regs->regs[rt] = 2;
|
||||
}
|
||||
return 0;
|
||||
case 29:
|
||||
regs->regs[rt] = ti->tp_value;
|
||||
return 0;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1287,7 +1306,7 @@ int cp0_compare_irq;
|
|||
int cp0_perfcount_irq;
|
||||
EXPORT_SYMBOL_GPL(cp0_perfcount_irq);
|
||||
|
||||
void __init per_cpu_trap_init(void)
|
||||
void __cpuinit per_cpu_trap_init(void)
|
||||
{
|
||||
unsigned int cpu = smp_processor_id();
|
||||
unsigned int status_set = ST0_CU0;
|
||||
|
@ -1404,11 +1423,12 @@ void __init set_handler(unsigned long offset, void *addr, unsigned long size)
|
|||
flush_icache_range(ebase + offset, ebase + offset + size);
|
||||
}
|
||||
|
||||
static char panic_null_cerr[] __initdata =
|
||||
static char panic_null_cerr[] __cpuinitdata =
|
||||
"Trying to set NULL cache error exception handler";
|
||||
|
||||
/* Install uncached CPU exception handler */
|
||||
void __init set_uncached_handler(unsigned long offset, void *addr, unsigned long size)
|
||||
void __cpuinit set_uncached_handler(unsigned long offset, void *addr,
|
||||
unsigned long size)
|
||||
{
|
||||
#ifdef CONFIG_32BIT
|
||||
unsigned long uncached_ebase = KSEG1ADDR(ebase);
|
||||
|
|
|
@ -17,3 +17,5 @@ word_type __ucmpdi2(unsigned long long a, unsigned long long b)
|
|||
return 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(__ucmpdi2);
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
* values, so we can avoid sharing the same stack area between a cached
|
||||
* and the uncached mode.
|
||||
*/
|
||||
unsigned long __init run_uncached(void *func)
|
||||
unsigned long __cpuinit run_uncached(void *func)
|
||||
{
|
||||
register long sp __asm__("$sp");
|
||||
register long ret __asm__("$2");
|
||||
|
|
|
@ -146,7 +146,7 @@ void __init plat_perf_setup(void)
|
|||
}
|
||||
}
|
||||
|
||||
unsigned int __init get_c0_compare_int(void)
|
||||
unsigned int __cpuinit get_c0_compare_int(void)
|
||||
{
|
||||
#ifdef MSC01E_INT_BASE
|
||||
if (cpu_has_veic) {
|
||||
|
|
|
@ -83,7 +83,7 @@ static void mips_timer_dispatch(void)
|
|||
}
|
||||
|
||||
|
||||
unsigned __init get_c0_compare_int(void)
|
||||
unsigned __cpuinit get_c0_compare_int(void)
|
||||
{
|
||||
#ifdef MSC01E_INT_BASE
|
||||
if (cpu_has_veic) {
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче