Commit b876d08f authored by David Woodhouse's avatar David Woodhouse

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6

Conflicts:

	drivers/pci/dmar.c
parents b364776a 2515ddc6
...@@ -1653,14 +1653,14 @@ S: Chapel Hill, North Carolina 27514-4818 ...@@ -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 = { ...@@ -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 ...@@ -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: ...@@ -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. ...@@ -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: ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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.: ...@@ -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.
......
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 ...@@ -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. ...@@ -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 ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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); ...@@ -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); ...@@ -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
......
/*
* 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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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 @@ ...@@ -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 ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 ...@@ -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, ...@@ -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 { ...@@ -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)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment