Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: drivers/pci/dmar.c
This commit is contained in:
commit
b876d08f81
12
CREDITS
12
CREDITS
@ -1653,14 +1653,14 @@ S: Chapel Hill, North Carolina 27514-4818
|
|||||||
S: USA
|
S: USA
|
||||||
|
|
||||||
N: Dave Jones
|
N: Dave Jones
|
||||||
E: davej@codemonkey.org.uk
|
E: davej@redhat.com
|
||||||
W: http://www.codemonkey.org.uk
|
W: http://www.codemonkey.org.uk
|
||||||
D: x86 errata/setup maintenance.
|
D: Assorted VIA x86 support.
|
||||||
D: AGPGART driver.
|
D: 2.5 AGPGART overhaul.
|
||||||
D: CPUFREQ maintenance.
|
D: CPUFREQ maintenance.
|
||||||
D: Backport/Forwardport merge monkey.
|
D: Fedora kernel maintainence.
|
||||||
D: Various Janitor work.
|
D: Misc/Other.
|
||||||
S: United Kingdom
|
S: 314 Littleton Rd, Westford, MA 01886, USA
|
||||||
|
|
||||||
N: Martin Josfsson
|
N: Martin Josfsson
|
||||||
E: gandalf@wlug.westbo.se
|
E: gandalf@wlug.westbo.se
|
||||||
|
@ -1105,7 +1105,7 @@ static struct block_device_operations opt_fops = {
|
|||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Function names as strings (__FUNCTION__).
|
Function names as strings (__func__).
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -236,10 +236,8 @@ software system can set different pages for controlling accesses to the
|
|||||||
MSI-X structure. The implementation of MSI support requires the PCI
|
MSI-X structure. The implementation of MSI support requires the PCI
|
||||||
subsystem, not a device driver, to maintain full control of the MSI-X
|
subsystem, not a device driver, to maintain full control of the MSI-X
|
||||||
table/MSI-X PBA (Pending Bit Array) and MMIO address space of the MSI-X
|
table/MSI-X PBA (Pending Bit Array) and MMIO address space of the MSI-X
|
||||||
table/MSI-X PBA. A device driver is prohibited from requesting the MMIO
|
table/MSI-X PBA. A device driver should not access the MMIO address
|
||||||
address space of the MSI-X table/MSI-X PBA. Otherwise, the PCI subsystem
|
space of the MSI-X table/MSI-X PBA.
|
||||||
will fail enabling MSI-X on its hardware device when it calls the function
|
|
||||||
pci_enable_msix().
|
|
||||||
|
|
||||||
5.3.2 API pci_enable_msix
|
5.3.2 API pci_enable_msix
|
||||||
|
|
||||||
|
@ -163,6 +163,10 @@ need pass only as many optional fields as necessary:
|
|||||||
o class and classmask fields default to 0
|
o class and classmask fields default to 0
|
||||||
o driver_data defaults to 0UL.
|
o driver_data defaults to 0UL.
|
||||||
|
|
||||||
|
Note that driver_data must match the value used by any of the pci_device_id
|
||||||
|
entries defined in the driver. This makes the driver_data field mandatory
|
||||||
|
if all the pci_device_id entries have a non-zero driver_data value.
|
||||||
|
|
||||||
Once added, the driver probe routine will be invoked for any unclaimed
|
Once added, the driver probe routine will be invoked for any unclaimed
|
||||||
PCI devices listed in its (newly updated) pci_ids list.
|
PCI devices listed in its (newly updated) pci_ids list.
|
||||||
|
|
||||||
|
@ -203,22 +203,17 @@ to mmio_enabled.
|
|||||||
|
|
||||||
3.3 helper functions
|
3.3 helper functions
|
||||||
|
|
||||||
3.3.1 int pci_find_aer_capability(struct pci_dev *dev);
|
3.3.1 int pci_enable_pcie_error_reporting(struct pci_dev *dev);
|
||||||
pci_find_aer_capability locates the PCI Express AER capability
|
|
||||||
in the device configuration space. If the device doesn't support
|
|
||||||
PCI-Express AER, the function returns 0.
|
|
||||||
|
|
||||||
3.3.2 int pci_enable_pcie_error_reporting(struct pci_dev *dev);
|
|
||||||
pci_enable_pcie_error_reporting enables the device to send error
|
pci_enable_pcie_error_reporting enables the device to send error
|
||||||
messages to root port when an error is detected. Note that devices
|
messages to root port when an error is detected. Note that devices
|
||||||
don't enable the error reporting by default, so device drivers need
|
don't enable the error reporting by default, so device drivers need
|
||||||
call this function to enable it.
|
call this function to enable it.
|
||||||
|
|
||||||
3.3.3 int pci_disable_pcie_error_reporting(struct pci_dev *dev);
|
3.3.2 int pci_disable_pcie_error_reporting(struct pci_dev *dev);
|
||||||
pci_disable_pcie_error_reporting disables the device to send error
|
pci_disable_pcie_error_reporting disables the device to send error
|
||||||
messages to root port when an error is detected.
|
messages to root port when an error is detected.
|
||||||
|
|
||||||
3.3.4 int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
|
3.3.3 int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
|
||||||
pci_cleanup_aer_uncorrect_error_status cleanups the uncorrectable
|
pci_cleanup_aer_uncorrect_error_status cleanups the uncorrectable
|
||||||
error status register.
|
error status register.
|
||||||
|
|
||||||
|
@ -101,6 +101,7 @@ parameter is applicable:
|
|||||||
X86-64 X86-64 architecture is enabled.
|
X86-64 X86-64 architecture is enabled.
|
||||||
More X86-64 boot options can be found in
|
More X86-64 boot options can be found in
|
||||||
Documentation/x86_64/boot-options.txt .
|
Documentation/x86_64/boot-options.txt .
|
||||||
|
X86 Either 32bit or 64bit x86 (same as X86-32+X86-64)
|
||||||
|
|
||||||
In addition, the following text indicates that the option:
|
In addition, the following text indicates that the option:
|
||||||
|
|
||||||
@ -1588,7 +1589,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
See also Documentation/paride.txt.
|
See also Documentation/paride.txt.
|
||||||
|
|
||||||
pci=option[,option...] [PCI] various PCI subsystem options:
|
pci=option[,option...] [PCI] various PCI subsystem options:
|
||||||
off [X86-32] don't probe for the PCI bus
|
off [X86] don't probe for the PCI bus
|
||||||
bios [X86-32] force use of PCI BIOS, don't access
|
bios [X86-32] force use of PCI BIOS, don't access
|
||||||
the hardware directly. Use this if your machine
|
the hardware directly. Use this if your machine
|
||||||
has a non-standard PCI host bridge.
|
has a non-standard PCI host bridge.
|
||||||
@ -1596,9 +1597,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
hardware access methods are allowed. Use this
|
hardware access methods are allowed. Use this
|
||||||
if you experience crashes upon bootup and you
|
if you experience crashes upon bootup and you
|
||||||
suspect they are caused by the BIOS.
|
suspect they are caused by the BIOS.
|
||||||
conf1 [X86-32] Force use of PCI Configuration
|
conf1 [X86] Force use of PCI Configuration
|
||||||
Mechanism 1.
|
Mechanism 1.
|
||||||
conf2 [X86-32] Force use of PCI Configuration
|
conf2 [X86] Force use of PCI Configuration
|
||||||
Mechanism 2.
|
Mechanism 2.
|
||||||
noaer [PCIE] If the PCIEAER kernel config parameter is
|
noaer [PCIE] If the PCIEAER kernel config parameter is
|
||||||
enabled, this kernel boot option can be used to
|
enabled, this kernel boot option can be used to
|
||||||
@ -1618,37 +1619,37 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
this option if the kernel is unable to allocate
|
this option if the kernel is unable to allocate
|
||||||
IRQs or discover secondary PCI buses on your
|
IRQs or discover secondary PCI buses on your
|
||||||
motherboard.
|
motherboard.
|
||||||
rom [X86-32] Assign address space to expansion ROMs.
|
rom [X86] Assign address space to expansion ROMs.
|
||||||
Use with caution as certain devices share
|
Use with caution as certain devices share
|
||||||
address decoders between ROMs and other
|
address decoders between ROMs and other
|
||||||
resources.
|
resources.
|
||||||
norom [X86-32,X86_64] Do not assign address space to
|
norom [X86] Do not assign address space to
|
||||||
expansion ROMs that do not already have
|
expansion ROMs that do not already have
|
||||||
BIOS assigned address ranges.
|
BIOS assigned address ranges.
|
||||||
irqmask=0xMMMM [X86-32] Set a bit mask of IRQs allowed to be
|
irqmask=0xMMMM [X86] Set a bit mask of IRQs allowed to be
|
||||||
assigned automatically to PCI devices. You can
|
assigned automatically to PCI devices. You can
|
||||||
make the kernel exclude IRQs of your ISA cards
|
make the kernel exclude IRQs of your ISA cards
|
||||||
this way.
|
this way.
|
||||||
pirqaddr=0xAAAAA [X86-32] Specify the physical address
|
pirqaddr=0xAAAAA [X86] Specify the physical address
|
||||||
of the PIRQ table (normally generated
|
of the PIRQ table (normally generated
|
||||||
by the BIOS) if it is outside the
|
by the BIOS) if it is outside the
|
||||||
F0000h-100000h range.
|
F0000h-100000h range.
|
||||||
lastbus=N [X86-32] Scan all buses thru bus #N. Can be
|
lastbus=N [X86] Scan all buses thru bus #N. Can be
|
||||||
useful if the kernel is unable to find your
|
useful if the kernel is unable to find your
|
||||||
secondary buses and you want to tell it
|
secondary buses and you want to tell it
|
||||||
explicitly which ones they are.
|
explicitly which ones they are.
|
||||||
assign-busses [X86-32] Always assign all PCI bus
|
assign-busses [X86] Always assign all PCI bus
|
||||||
numbers ourselves, overriding
|
numbers ourselves, overriding
|
||||||
whatever the firmware may have done.
|
whatever the firmware may have done.
|
||||||
usepirqmask [X86-32] Honor the possible IRQ mask stored
|
usepirqmask [X86] Honor the possible IRQ mask stored
|
||||||
in the BIOS $PIR table. This is needed on
|
in the BIOS $PIR table. This is needed on
|
||||||
some systems with broken BIOSes, notably
|
some systems with broken BIOSes, notably
|
||||||
some HP Pavilion N5400 and Omnibook XE3
|
some HP Pavilion N5400 and Omnibook XE3
|
||||||
notebooks. This will have no effect if ACPI
|
notebooks. This will have no effect if ACPI
|
||||||
IRQ routing is enabled.
|
IRQ routing is enabled.
|
||||||
noacpi [X86-32] Do not use ACPI for IRQ routing
|
noacpi [X86] Do not use ACPI for IRQ routing
|
||||||
or for PCI scanning.
|
or for PCI scanning.
|
||||||
use_crs [X86-32] Use _CRS for PCI resource
|
use_crs [X86] Use _CRS for PCI resource
|
||||||
allocation.
|
allocation.
|
||||||
routeirq Do IRQ routing for all PCI devices.
|
routeirq Do IRQ routing for all PCI devices.
|
||||||
This is normally done in pci_enable_device(),
|
This is normally done in pci_enable_device(),
|
||||||
@ -1677,6 +1678,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
reserved for the CardBus bridge's memory
|
reserved for the CardBus bridge's memory
|
||||||
window. The default value is 64 megabytes.
|
window. The default value is 64 megabytes.
|
||||||
|
|
||||||
|
pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power
|
||||||
|
Management.
|
||||||
|
off Disable ASPM.
|
||||||
|
force Enable ASPM even on devices that claim not to support it.
|
||||||
|
WARNING: Forcing ASPM on may cause system lockups.
|
||||||
|
|
||||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||||
|
|
||||||
pd. [PARIDE]
|
pd. [PARIDE]
|
||||||
|
@ -50,10 +50,12 @@ Connecting a function (probe) to a marker is done by providing a probe (function
|
|||||||
to call) for the specific marker through marker_probe_register() and can be
|
to call) for the specific marker through marker_probe_register() and can be
|
||||||
activated by calling marker_arm(). Marker deactivation can be done by calling
|
activated by calling marker_arm(). Marker deactivation can be done by calling
|
||||||
marker_disarm() as many times as marker_arm() has been called. Removing a probe
|
marker_disarm() as many times as marker_arm() has been called. Removing a probe
|
||||||
is done through marker_probe_unregister(); it will disarm the probe and make
|
is done through marker_probe_unregister(); it will disarm the probe.
|
||||||
sure there is no caller left using the probe when it returns. Probe removal is
|
marker_synchronize_unregister() must be called before the end of the module exit
|
||||||
preempt-safe because preemption is disabled around the probe call. See the
|
function to make sure there is no caller left using the probe. This, and the
|
||||||
"Probe example" section below for a sample probe module.
|
fact that preemption is disabled around the probe call, make sure that probe
|
||||||
|
removal and module unload are safe. See the "Probe example" section below for a
|
||||||
|
sample probe module.
|
||||||
|
|
||||||
The marker mechanism supports inserting multiple instances of the same marker.
|
The marker mechanism supports inserting multiple instances of the same marker.
|
||||||
Markers can be put in inline functions, inlined static functions, and
|
Markers can be put in inline functions, inlined static functions, and
|
||||||
|
@ -95,8 +95,9 @@ On all - write a character to /proc/sysrq-trigger. e.g.:
|
|||||||
|
|
||||||
'p' - Will dump the current registers and flags to your console.
|
'p' - Will dump the current registers and flags to your console.
|
||||||
|
|
||||||
'q' - Will dump a list of all running hrtimers.
|
'q' - Will dump per CPU lists of all armed hrtimers (but NOT regular
|
||||||
WARNING: Does not cover any other timers
|
timer_list timers) and detailed information about all
|
||||||
|
clockevent devices.
|
||||||
|
|
||||||
'r' - Turns off keyboard raw mode and sets it to XLATE.
|
'r' - Turns off keyboard raw mode and sets it to XLATE.
|
||||||
|
|
||||||
|
101
Documentation/tracepoints.txt
Normal file
101
Documentation/tracepoints.txt
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
Using the Linux Kernel Tracepoints
|
||||||
|
|
||||||
|
Mathieu Desnoyers
|
||||||
|
|
||||||
|
|
||||||
|
This document introduces Linux Kernel Tracepoints and their use. It provides
|
||||||
|
examples of how to insert tracepoints in the kernel and connect probe functions
|
||||||
|
to them and provides some examples of probe functions.
|
||||||
|
|
||||||
|
|
||||||
|
* Purpose of tracepoints
|
||||||
|
|
||||||
|
A tracepoint placed in code provides a hook to call a function (probe) that you
|
||||||
|
can provide at runtime. A tracepoint can be "on" (a probe is connected to it) or
|
||||||
|
"off" (no probe is attached). When a tracepoint is "off" it has no effect,
|
||||||
|
except for adding a tiny time penalty (checking a condition for a branch) and
|
||||||
|
space penalty (adding a few bytes for the function call at the end of the
|
||||||
|
instrumented function and adds a data structure in a separate section). When a
|
||||||
|
tracepoint is "on", the function you provide is called each time the tracepoint
|
||||||
|
is executed, in the execution context of the caller. When the function provided
|
||||||
|
ends its execution, it returns to the caller (continuing from the tracepoint
|
||||||
|
site).
|
||||||
|
|
||||||
|
You can put tracepoints at important locations in the code. They are
|
||||||
|
lightweight hooks that can pass an arbitrary number of parameters,
|
||||||
|
which prototypes are described in a tracepoint declaration placed in a header
|
||||||
|
file.
|
||||||
|
|
||||||
|
They can be used for tracing and performance accounting.
|
||||||
|
|
||||||
|
|
||||||
|
* Usage
|
||||||
|
|
||||||
|
Two elements are required for tracepoints :
|
||||||
|
|
||||||
|
- A tracepoint definition, placed in a header file.
|
||||||
|
- The tracepoint statement, in C code.
|
||||||
|
|
||||||
|
In order to use tracepoints, you should include linux/tracepoint.h.
|
||||||
|
|
||||||
|
In include/trace/subsys.h :
|
||||||
|
|
||||||
|
#include <linux/tracepoint.h>
|
||||||
|
|
||||||
|
DEFINE_TRACE(subsys_eventname,
|
||||||
|
TPPTOTO(int firstarg, struct task_struct *p),
|
||||||
|
TPARGS(firstarg, p));
|
||||||
|
|
||||||
|
In subsys/file.c (where the tracing statement must be added) :
|
||||||
|
|
||||||
|
#include <trace/subsys.h>
|
||||||
|
|
||||||
|
void somefct(void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
trace_subsys_eventname(arg, task);
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
Where :
|
||||||
|
- subsys_eventname is an identifier unique to your event
|
||||||
|
- subsys is the name of your subsystem.
|
||||||
|
- eventname is the name of the event to trace.
|
||||||
|
- TPPTOTO(int firstarg, struct task_struct *p) is the prototype of the function
|
||||||
|
called by this tracepoint.
|
||||||
|
- TPARGS(firstarg, p) are the parameters names, same as found in the prototype.
|
||||||
|
|
||||||
|
Connecting a function (probe) to a tracepoint is done by providing a probe
|
||||||
|
(function to call) for the specific tracepoint through
|
||||||
|
register_trace_subsys_eventname(). Removing a probe is done through
|
||||||
|
unregister_trace_subsys_eventname(); it will remove the probe sure there is no
|
||||||
|
caller left using the probe when it returns. Probe removal is preempt-safe
|
||||||
|
because preemption is disabled around the probe call. See the "Probe example"
|
||||||
|
section below for a sample probe module.
|
||||||
|
|
||||||
|
The tracepoint mechanism supports inserting multiple instances of the same
|
||||||
|
tracepoint, but a single definition must be made of a given tracepoint name over
|
||||||
|
all the kernel to make sure no type conflict will occur. Name mangling of the
|
||||||
|
tracepoints is done using the prototypes to make sure typing is correct.
|
||||||
|
Verification of probe type correctness is done at the registration site by the
|
||||||
|
compiler. Tracepoints can be put in inline functions, inlined static functions,
|
||||||
|
and unrolled loops as well as regular functions.
|
||||||
|
|
||||||
|
The naming scheme "subsys_event" is suggested here as a convention intended
|
||||||
|
to limit collisions. Tracepoint names are global to the kernel: they are
|
||||||
|
considered as being the same whether they are in the core kernel image or in
|
||||||
|
modules.
|
||||||
|
|
||||||
|
|
||||||
|
* Probe / tracepoint example
|
||||||
|
|
||||||
|
See the example provided in samples/tracepoints/src
|
||||||
|
|
||||||
|
Compile them with your kernel.
|
||||||
|
|
||||||
|
Run, as root :
|
||||||
|
modprobe tracepoint-example (insmod order is not important)
|
||||||
|
modprobe tracepoint-probe-example
|
||||||
|
cat /proc/tracepoint-example (returns an expected error)
|
||||||
|
rmmod tracepoint-example tracepoint-probe-example
|
||||||
|
dmesg
|
@ -36,7 +36,7 @@ $ mount -t debugfs debugfs /debug
|
|||||||
$ echo mmiotrace > /debug/tracing/current_tracer
|
$ echo mmiotrace > /debug/tracing/current_tracer
|
||||||
$ cat /debug/tracing/trace_pipe > mydump.txt &
|
$ cat /debug/tracing/trace_pipe > mydump.txt &
|
||||||
Start X or whatever.
|
Start X or whatever.
|
||||||
$ echo "X is up" > /debug/tracing/marker
|
$ echo "X is up" > /debug/tracing/trace_marker
|
||||||
$ echo none > /debug/tracing/current_tracer
|
$ echo none > /debug/tracing/current_tracer
|
||||||
Check for lost events.
|
Check for lost events.
|
||||||
|
|
||||||
@ -59,9 +59,8 @@ The 'cat' process should stay running (sleeping) in the background.
|
|||||||
Load the driver you want to trace and use it. Mmiotrace will only catch MMIO
|
Load the driver you want to trace and use it. Mmiotrace will only catch MMIO
|
||||||
accesses to areas that are ioremapped while mmiotrace is active.
|
accesses to areas that are ioremapped while mmiotrace is active.
|
||||||
|
|
||||||
[Unimplemented feature:]
|
|
||||||
During tracing you can place comments (markers) into the trace by
|
During tracing you can place comments (markers) into the trace by
|
||||||
$ echo "X is up" > /debug/tracing/marker
|
$ echo "X is up" > /debug/tracing/trace_marker
|
||||||
This makes it easier to see which part of the (huge) trace corresponds to
|
This makes it easier to see which part of the (huge) trace corresponds to
|
||||||
which action. It is recommended to place descriptive markers about what you
|
which action. It is recommended to place descriptive markers about what you
|
||||||
do.
|
do.
|
||||||
|
@ -1198,7 +1198,7 @@ S: Maintained
|
|||||||
|
|
||||||
CPU FREQUENCY DRIVERS
|
CPU FREQUENCY DRIVERS
|
||||||
P: Dave Jones
|
P: Dave Jones
|
||||||
M: davej@codemonkey.org.uk
|
M: davej@redhat.com
|
||||||
L: cpufreq@vger.kernel.org
|
L: cpufreq@vger.kernel.org
|
||||||
W: http://www.codemonkey.org.uk/projects/cpufreq/
|
W: http://www.codemonkey.org.uk/projects/cpufreq/
|
||||||
T: git kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git
|
T: git kernel.org/pub/scm/linux/kernel/git/davej/cpufreq.git
|
||||||
|
@ -47,7 +47,7 @@ typedef struct irq_swizzle_struct
|
|||||||
|
|
||||||
static irq_swizzle_t *sable_lynx_irq_swizzle;
|
static irq_swizzle_t *sable_lynx_irq_swizzle;
|
||||||
|
|
||||||
static void sable_lynx_init_irq(int nr_irqs);
|
static void sable_lynx_init_irq(int nr_of_irqs);
|
||||||
|
|
||||||
#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SABLE)
|
#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SABLE)
|
||||||
|
|
||||||
@ -530,11 +530,11 @@ sable_lynx_srm_device_interrupt(unsigned long vector)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
sable_lynx_init_irq(int nr_irqs)
|
sable_lynx_init_irq(int nr_of_irqs)
|
||||||
{
|
{
|
||||||
long i;
|
long i;
|
||||||
|
|
||||||
for (i = 0; i < nr_irqs; ++i) {
|
for (i = 0; i < nr_of_irqs; ++i) {
|
||||||
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
|
||||||
irq_desc[i].chip = &sable_lynx_irq_type;
|
irq_desc[i].chip = &sable_lynx_irq_type;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ static inline unsigned long iop13xx_core_freq(void)
|
|||||||
return 1200000000;
|
return 1200000000;
|
||||||
default:
|
default:
|
||||||
printk("%s: warning unknown frequency, defaulting to 800Mhz\n",
|
printk("%s: warning unknown frequency, defaulting to 800Mhz\n",
|
||||||
__FUNCTION__);
|
__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 800000000;
|
return 800000000;
|
||||||
@ -60,7 +60,7 @@ static inline unsigned long iop13xx_xsi_bus_ratio(void)
|
|||||||
return 4;
|
return 4;
|
||||||
default:
|
default:
|
||||||
printk("%s: warning unknown ratio, defaulting to 2\n",
|
printk("%s: warning unknown ratio, defaulting to 2\n",
|
||||||
__FUNCTION__);
|
__func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
|
@ -143,7 +143,7 @@ static struct irq_chip ixdp2x00_cpld_irq_chip = {
|
|||||||
.unmask = ixdp2x00_irq_unmask
|
.unmask = ixdp2x00_irq_unmask
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init ixdp2x00_init_irq(volatile unsigned long *stat_reg, volatile unsigned long *mask_reg, unsigned long nr_irqs)
|
void __init ixdp2x00_init_irq(volatile unsigned long *stat_reg, volatile unsigned long *mask_reg, unsigned long nr_of_irqs)
|
||||||
{
|
{
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ void __init ixdp2x00_init_irq(volatile unsigned long *stat_reg, volatile unsigne
|
|||||||
|
|
||||||
board_irq_stat = stat_reg;
|
board_irq_stat = stat_reg;
|
||||||
board_irq_mask = mask_reg;
|
board_irq_mask = mask_reg;
|
||||||
board_irq_count = nr_irqs;
|
board_irq_count = nr_of_irqs;
|
||||||
|
|
||||||
*board_irq_mask = 0xffffffff;
|
*board_irq_mask = 0xffffffff;
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ static void __init omap_irq_bank_init_one(struct omap_irq_bank *bank)
|
|||||||
|
|
||||||
void __init omap_init_irq(void)
|
void __init omap_init_irq(void)
|
||||||
{
|
{
|
||||||
unsigned long nr_irqs = 0;
|
unsigned long nr_of_irqs = 0;
|
||||||
unsigned int nr_banks = 0;
|
unsigned int nr_banks = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -133,14 +133,14 @@ void __init omap_init_irq(void)
|
|||||||
|
|
||||||
omap_irq_bank_init_one(bank);
|
omap_irq_bank_init_one(bank);
|
||||||
|
|
||||||
nr_irqs += bank->nr_irqs;
|
nr_of_irqs += bank->nr_irqs;
|
||||||
nr_banks++;
|
nr_banks++;
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "Total of %ld interrupts on %d active controller%s\n",
|
printk(KERN_INFO "Total of %ld interrupts on %d active controller%s\n",
|
||||||
nr_irqs, nr_banks, nr_banks > 1 ? "s" : "");
|
nr_of_irqs, nr_banks, nr_banks > 1 ? "s" : "");
|
||||||
|
|
||||||
for (i = 0; i < nr_irqs; i++) {
|
for (i = 0; i < nr_of_irqs; i++) {
|
||||||
set_irq_chip(i, &omap_irq_chip);
|
set_irq_chip(i, &omap_irq_chip);
|
||||||
set_irq_handler(i, handle_level_irq);
|
set_irq_handler(i, handle_level_irq);
|
||||||
set_irq_flags(i, IRQF_VALID);
|
set_irq_flags(i, IRQF_VALID);
|
||||||
|
@ -30,7 +30,7 @@ extern void zylonite_pxa300_init(void);
|
|||||||
static inline void zylonite_pxa300_init(void)
|
static inline void zylonite_pxa300_init(void)
|
||||||
{
|
{
|
||||||
if (cpu_is_pxa300() || cpu_is_pxa310())
|
if (cpu_is_pxa300() || cpu_is_pxa310())
|
||||||
panic("%s: PXA300/PXA310 not supported\n", __FUNCTION__);
|
panic("%s: PXA300/PXA310 not supported\n", __func__);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ extern void zylonite_pxa320_init(void);
|
|||||||
static inline void zylonite_pxa320_init(void)
|
static inline void zylonite_pxa320_init(void)
|
||||||
{
|
{
|
||||||
if (cpu_is_pxa320())
|
if (cpu_is_pxa320())
|
||||||
panic("%s: PXA320 not supported\n", __FUNCTION__);
|
panic("%s: PXA320 not supported\n", __func__);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* arch/arm/mach-sa1100/include/mach/ide.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 1998 Hugo Fiennes & Nicolas Pitre
|
|
||||||
*
|
|
||||||
* 18-aug-2000: Cleanup by Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
|
|
||||||
* Get rid of the special ide_init_hwif_ports() functions
|
|
||||||
* and make a generalised function that can be used by all
|
|
||||||
* architectures.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/irq.h>
|
|
||||||
#include <mach/hardware.h>
|
|
||||||
#include <asm/mach-types.h>
|
|
||||||
|
|
||||||
#error "This code is broken and needs update to match with current ide support"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set up a hw structure for a specified data port, control port and IRQ.
|
|
||||||
* This should follow whatever the default interface uses.
|
|
||||||
*/
|
|
||||||
static inline void ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port,
|
|
||||||
unsigned long ctrl_port, int *irq)
|
|
||||||
{
|
|
||||||
unsigned long reg = data_port;
|
|
||||||
int i;
|
|
||||||
int regincr = 1;
|
|
||||||
|
|
||||||
/* The Empeg board has the first two address lines unused */
|
|
||||||
if (machine_is_empeg())
|
|
||||||
regincr = 1 << 2;
|
|
||||||
|
|
||||||
/* The LART doesn't use A0 for IDE */
|
|
||||||
if (machine_is_lart())
|
|
||||||
regincr = 1 << 1;
|
|
||||||
|
|
||||||
memset(hw, 0, sizeof(*hw));
|
|
||||||
|
|
||||||
for (i = 0; i <= 7; i++) {
|
|
||||||
hw->io_ports_array[i] = reg;
|
|
||||||
reg += regincr;
|
|
||||||
}
|
|
||||||
|
|
||||||
hw->io_ports.ctl_addr = ctrl_port;
|
|
||||||
|
|
||||||
if (irq)
|
|
||||||
*irq = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This registers the standard ports for this architecture with the IDE
|
|
||||||
* driver.
|
|
||||||
*/
|
|
||||||
static __inline__ void
|
|
||||||
ide_init_default_hwifs(void)
|
|
||||||
{
|
|
||||||
if (machine_is_lart()) {
|
|
||||||
#ifdef CONFIG_SA1100_LART
|
|
||||||
hw_regs_t hw;
|
|
||||||
|
|
||||||
/* Enable GPIO as interrupt line */
|
|
||||||
GPDR &= ~LART_GPIO_IDE;
|
|
||||||
set_irq_type(LART_IRQ_IDE, IRQ_TYPE_EDGE_RISING);
|
|
||||||
|
|
||||||
/* set PCMCIA interface timing */
|
|
||||||
MECR = 0x00060006;
|
|
||||||
|
|
||||||
/* init the interface */
|
|
||||||
ide_init_hwif_ports(&hw, PCMCIA_IO_0_BASE + 0x0000, PCMCIA_IO_0_BASE + 0x1000, NULL);
|
|
||||||
hw.irq = LART_IRQ_IDE;
|
|
||||||
ide_register_hw(&hw);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
@ -191,7 +191,7 @@ static int __init eic_probe(struct platform_device *pdev)
|
|||||||
struct eic *eic;
|
struct eic *eic;
|
||||||
struct resource *regs;
|
struct resource *regs;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
unsigned int nr_irqs;
|
unsigned int nr_of_irqs;
|
||||||
unsigned int int_irq;
|
unsigned int int_irq;
|
||||||
int ret;
|
int ret;
|
||||||
u32 pattern;
|
u32 pattern;
|
||||||
@ -224,7 +224,7 @@ static int __init eic_probe(struct platform_device *pdev)
|
|||||||
eic_writel(eic, IDR, ~0UL);
|
eic_writel(eic, IDR, ~0UL);
|
||||||
eic_writel(eic, MODE, ~0UL);
|
eic_writel(eic, MODE, ~0UL);
|
||||||
pattern = eic_readl(eic, MODE);
|
pattern = eic_readl(eic, MODE);
|
||||||
nr_irqs = fls(pattern);
|
nr_of_irqs = fls(pattern);
|
||||||
|
|
||||||
/* Trigger on low level unless overridden by driver */
|
/* Trigger on low level unless overridden by driver */
|
||||||
eic_writel(eic, EDGE, 0UL);
|
eic_writel(eic, EDGE, 0UL);
|
||||||
@ -232,7 +232,7 @@ static int __init eic_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
eic->chip = &eic_chip;
|
eic->chip = &eic_chip;
|
||||||
|
|
||||||
for (i = 0; i < nr_irqs; i++) {
|
for (i = 0; i < nr_of_irqs; i++) {
|
||||||
set_irq_chip_and_handler(eic->first_irq + i, &eic_chip,
|
set_irq_chip_and_handler(eic->first_irq + i, &eic_chip,
|
||||||
handle_level_irq);
|
handle_level_irq);
|
||||||
set_irq_chip_data(eic->first_irq + i, eic);
|
set_irq_chip_data(eic->first_irq + i, eic);
|
||||||
@ -256,7 +256,7 @@ static int __init eic_probe(struct platform_device *pdev)
|
|||||||
eic->regs, int_irq);
|
eic->regs, int_irq);
|
||||||
dev_info(&pdev->dev,
|
dev_info(&pdev->dev,
|
||||||
"Handling %u external IRQs, starting with IRQ %u\n",
|
"Handling %u external IRQs, starting with IRQ %u\n",
|
||||||
nr_irqs, eic->first_irq);
|
nr_of_irqs, eic->first_irq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -95,16 +95,8 @@ extern int pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma,
|
|||||||
enum pci_mmap_state mmap_state, int write_combine);
|
enum pci_mmap_state mmap_state, int write_combine);
|
||||||
#define HAVE_PCI_LEGACY
|
#define HAVE_PCI_LEGACY
|
||||||
extern int pci_mmap_legacy_page_range(struct pci_bus *bus,
|
extern int pci_mmap_legacy_page_range(struct pci_bus *bus,
|
||||||
struct vm_area_struct *vma);
|
struct vm_area_struct *vma,
|
||||||
extern ssize_t pci_read_legacy_io(struct kobject *kobj,
|
enum pci_mmap_state mmap_state);
|
||||||
struct bin_attribute *bin_attr,
|
|
||||||
char *buf, loff_t off, size_t count);
|
|
||||||
extern ssize_t pci_write_legacy_io(struct kobject *kobj,
|
|
||||||
struct bin_attribute *bin_attr,
|
|
||||||
char *buf, loff_t off, size_t count);
|
|
||||||
extern int pci_mmap_legacy_mem(struct kobject *kobj,
|
|
||||||
struct bin_attribute *attr,
|
|
||||||
struct vm_area_struct *vma);
|
|
||||||
|
|
||||||
#define pci_get_legacy_mem platform_pci_get_legacy_mem
|
#define pci_get_legacy_mem platform_pci_get_legacy_mem
|
||||||
#define pci_legacy_read platform_pci_legacy_read
|
#define pci_legacy_read platform_pci_legacy_read
|
||||||
|
@ -614,12 +614,17 @@ char *ia64_pci_get_legacy_mem(struct pci_bus *bus)
|
|||||||
* vector to get the base address.
|
* vector to get the base address.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma)
|
pci_mmap_legacy_page_range(struct pci_bus *bus, struct vm_area_struct *vma,
|
||||||
|
enum pci_mmap_state mmap_state)
|
||||||
{
|
{
|
||||||
unsigned long size = vma->vm_end - vma->vm_start;
|
unsigned long size = vma->vm_end - vma->vm_start;
|
||||||
pgprot_t prot;
|
pgprot_t prot;
|
||||||
char *addr;
|
char *addr;
|
||||||
|
|
||||||
|
/* We only support mmap'ing of legacy memory space */
|
||||||
|
if (mmap_state != pci_mmap_mem)
|
||||||
|
return -ENOSYS;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Avoid attribute aliasing. See Documentation/ia64/aliasing.txt
|
* Avoid attribute aliasing. See Documentation/ia64/aliasing.txt
|
||||||
* for more details.
|
* for more details.
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#include <linux/cpu.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
@ -9,6 +9,8 @@ config PARISC
|
|||||||
def_bool y
|
def_bool y
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
|
select RTC_CLASS
|
||||||
|
select RTC_DRV_PARISC
|
||||||
help
|
help
|
||||||
The PA-RISC microprocessor is designed by Hewlett-Packard and used
|
The PA-RISC microprocessor is designed by Hewlett-Packard and used
|
||||||
in many of their workstations & servers (HP9000 700 and 800 series,
|
in many of their workstations & servers (HP9000 700 and 800 series,
|
||||||
|
@ -13,10 +13,6 @@
|
|||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
#define ide_request_irq(irq,hand,flg,dev,id) request_irq((irq),(hand),(flg),(dev),(id))
|
|
||||||
#define ide_free_irq(irq,dev_id) free_irq((irq), (dev_id))
|
|
||||||
#define ide_request_region(from,extent,name) request_region((from), (extent), (name))
|
|
||||||
#define ide_release_region(from,extent) release_region((from), (extent))
|
|
||||||
/* Generic I/O and MEMIO string operations. */
|
/* Generic I/O and MEMIO string operations. */
|
||||||
|
|
||||||
#define __ide_insw insw
|
#define __ide_insw insw
|
@ -332,6 +332,9 @@
|
|||||||
#define BOOT_CONSOLE_SPA_OFFSET 0x3c4
|
#define BOOT_CONSOLE_SPA_OFFSET 0x3c4
|
||||||
#define BOOT_CONSOLE_PATH_OFFSET 0x3a8
|
#define BOOT_CONSOLE_PATH_OFFSET 0x3a8
|
||||||
|
|
||||||
|
/* size of the pdc_result buffer for firmware.c */
|
||||||
|
#define NUM_PDC_RESULT 32
|
||||||
|
|
||||||
#if !defined(__ASSEMBLY__)
|
#if !defined(__ASSEMBLY__)
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
@ -600,6 +603,7 @@ int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsi
|
|||||||
int pdc_chassis_disp(unsigned long disp);
|
int pdc_chassis_disp(unsigned long disp);
|
||||||
int pdc_chassis_warn(unsigned long *warn);
|
int pdc_chassis_warn(unsigned long *warn);
|
||||||
int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info);
|
int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info);
|
||||||
|
int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info);
|
||||||
int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index,
|
int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index,
|
||||||
void *iodc_data, unsigned int iodc_data_size);
|
void *iodc_data, unsigned int iodc_data_size);
|
||||||
int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info,
|
int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info,
|
||||||
@ -638,6 +642,7 @@ int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void set_firmware_width(void);
|
void set_firmware_width(void);
|
||||||
|
void set_firmware_width_unlocked(void);
|
||||||
int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
|
int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
|
||||||
int pdc_do_reset(void);
|
int pdc_do_reset(void);
|
||||||
int pdc_soft_power_info(unsigned long *power_reg);
|
int pdc_soft_power_info(unsigned long *power_reg);
|
@ -47,6 +47,16 @@ struct pt_regs {
|
|||||||
|
|
||||||
#define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS))
|
#define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS))
|
||||||
|
|
||||||
|
#define __ARCH_WANT_COMPAT_SYS_PTRACE
|
||||||
|
|
||||||
|
struct task_struct;
|
||||||
|
#define arch_has_single_step() 1
|
||||||
|
void user_disable_single_step(struct task_struct *task);
|
||||||
|
void user_enable_single_step(struct task_struct *task);
|
||||||
|
|
||||||
|
#define arch_has_block_step() 1
|
||||||
|
void user_enable_block_step(struct task_struct *task);
|
||||||
|
|
||||||
/* XXX should we use iaoq[1] or iaoq[0] ? */
|
/* XXX should we use iaoq[1] or iaoq[0] ? */
|
||||||
#define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0)
|
#define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0)
|
||||||
#define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0)
|
#define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user