Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (32 commits) sh: intc: switch irq_desc iteration to new active IRQ iterator. sh: fix up cpu hotplug IRQ migration for irq_data changes. sh: oprofile: Make sure the backtrace op is available for timer-fallback. sh64: oprofile: Fix up kernel stack pointer size mismatch. sh: oprofile: Fix up and extend op_name_from_perf_id(). sh: lockless get_user_pages_fast() sh64: _PAGE_SPECIAL support. sound: sh: ctrl_in/outX to __raw_read/writeX conversion. sh: disable deprecated genirq support. sh: update show_interrupts() for irq_data chip lookup. sh: intc: irq_data conversion. sh64: irq_data conversion. sh64: update for IRQ flag handling naming changes. rtc: rtc-rs5c313: ctrl_in/outX to __raw_read/writeX conversion. sh: mach-se: irq_data conversion. input: hp680_ts_input: ctrl_in/outX to __raw_read/writeX conversion. input: jornada680_kbd: ctrl_in/outX to __raw_read/writeX conversion. sh: hd64461: irq_data conversion. sh: mach-x3proto: irq_data conversion. sh: mach-systemh: irq_data conversion. ...
Este cometimento está contido em:
@@ -55,8 +55,9 @@ static struct irqaction cayman_action_pci2 = {
|
||||
.flags = IRQF_DISABLED,
|
||||
};
|
||||
|
||||
static void enable_cayman_irq(unsigned int irq)
|
||||
static void enable_cayman_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
unsigned long flags;
|
||||
unsigned long mask;
|
||||
unsigned int reg;
|
||||
@@ -72,8 +73,9 @@ static void enable_cayman_irq(unsigned int irq)
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
void disable_cayman_irq(unsigned int irq)
|
||||
static void disable_cayman_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
unsigned long flags;
|
||||
unsigned long mask;
|
||||
unsigned int reg;
|
||||
@@ -89,16 +91,10 @@ void disable_cayman_irq(unsigned int irq)
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
static void ack_cayman_irq(unsigned int irq)
|
||||
{
|
||||
disable_cayman_irq(irq);
|
||||
}
|
||||
|
||||
struct irq_chip cayman_irq_type = {
|
||||
.name = "Cayman-IRQ",
|
||||
.unmask = enable_cayman_irq,
|
||||
.mask = disable_cayman_irq,
|
||||
.mask_ack = ack_cayman_irq,
|
||||
.irq_unmask = enable_cayman_irq,
|
||||
.irq_mask = disable_cayman_irq,
|
||||
};
|
||||
|
||||
int cayman_irq_demux(int evt)
|
||||
|
@@ -60,8 +60,9 @@
|
||||
*/
|
||||
|
||||
/* Disable the hardware event by masking its bit in its EMR */
|
||||
static inline void disable_systemasic_irq(unsigned int irq)
|
||||
static inline void disable_systemasic_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
__u32 emr = EMR_BASE + (LEVEL(irq) << 4) + (LEVEL(irq) << 2);
|
||||
__u32 mask;
|
||||
|
||||
@@ -71,8 +72,9 @@ static inline void disable_systemasic_irq(unsigned int irq)
|
||||
}
|
||||
|
||||
/* Enable the hardware event by setting its bit in its EMR */
|
||||
static inline void enable_systemasic_irq(unsigned int irq)
|
||||
static inline void enable_systemasic_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
__u32 emr = EMR_BASE + (LEVEL(irq) << 4) + (LEVEL(irq) << 2);
|
||||
__u32 mask;
|
||||
|
||||
@@ -82,18 +84,19 @@ static inline void enable_systemasic_irq(unsigned int irq)
|
||||
}
|
||||
|
||||
/* Acknowledge a hardware event by writing its bit back to its ESR */
|
||||
static void mask_ack_systemasic_irq(unsigned int irq)
|
||||
static void mask_ack_systemasic_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
__u32 esr = ESR_BASE + (LEVEL(irq) << 2);
|
||||
disable_systemasic_irq(irq);
|
||||
disable_systemasic_irq(data);
|
||||
outl((1 << EVENT_BIT(irq)), esr);
|
||||
}
|
||||
|
||||
struct irq_chip systemasic_int = {
|
||||
.name = "System ASIC",
|
||||
.mask = disable_systemasic_irq,
|
||||
.mask_ack = mask_ack_systemasic_irq,
|
||||
.unmask = enable_systemasic_irq,
|
||||
.irq_mask = disable_systemasic_irq,
|
||||
.irq_mask_ack = mask_ack_systemasic_irq,
|
||||
.irq_unmask = enable_systemasic_irq,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@@ -18,25 +18,24 @@
|
||||
#include <linux/io.h>
|
||||
#include <mach-landisk/mach/iodata_landisk.h>
|
||||
|
||||
static void disable_landisk_irq(unsigned int irq)
|
||||
static void disable_landisk_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned char mask = 0xff ^ (0x01 << (irq - 5));
|
||||
unsigned char mask = 0xff ^ (0x01 << (data->irq - 5));
|
||||
|
||||
__raw_writeb(__raw_readb(PA_IMASK) & mask, PA_IMASK);
|
||||
}
|
||||
|
||||
static void enable_landisk_irq(unsigned int irq)
|
||||
static void enable_landisk_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned char value = (0x01 << (irq - 5));
|
||||
unsigned char value = (0x01 << (data->irq - 5));
|
||||
|
||||
__raw_writeb(__raw_readb(PA_IMASK) | value, PA_IMASK);
|
||||
}
|
||||
|
||||
static struct irq_chip landisk_irq_chip __read_mostly = {
|
||||
.name = "LANDISK",
|
||||
.mask = disable_landisk_irq,
|
||||
.unmask = enable_landisk_irq,
|
||||
.mask_ack = disable_landisk_irq,
|
||||
.irq_mask = disable_landisk_irq,
|
||||
.irq_unmask = enable_landisk_irq,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -50,7 +49,7 @@ void __init init_landisk_IRQ(void)
|
||||
disable_irq_nosync(i);
|
||||
set_irq_chip_and_handler_name(i, &landisk_irq_chip,
|
||||
handle_level_irq, "level");
|
||||
enable_landisk_irq(i);
|
||||
enable_landisk_irq(irq_get_irq_data(i));
|
||||
}
|
||||
__raw_writeb(0x00, PA_PWRINT_CLR);
|
||||
}
|
||||
|
@@ -65,19 +65,9 @@ static const struct {
|
||||
# error Inconsistancy in defining the IRQ# for primary IDE!
|
||||
#endif
|
||||
|
||||
static void enable_microdev_irq(unsigned int irq);
|
||||
static void disable_microdev_irq(unsigned int irq);
|
||||
static void mask_and_ack_microdev(unsigned int);
|
||||
|
||||
static struct irq_chip microdev_irq_type = {
|
||||
.name = "MicroDev-IRQ",
|
||||
.unmask = enable_microdev_irq,
|
||||
.mask = disable_microdev_irq,
|
||||
.ack = mask_and_ack_microdev,
|
||||
};
|
||||
|
||||
static void disable_microdev_irq(unsigned int irq)
|
||||
static void disable_microdev_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
unsigned int fpgaIrq;
|
||||
|
||||
if (irq >= NUM_EXTERNAL_IRQS)
|
||||
@@ -91,8 +81,9 @@ static void disable_microdev_irq(unsigned int irq)
|
||||
__raw_writel(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTDSB_REG);
|
||||
}
|
||||
|
||||
static void enable_microdev_irq(unsigned int irq)
|
||||
static void enable_microdev_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
unsigned long priorityReg, priorities, pri;
|
||||
unsigned int fpgaIrq;
|
||||
|
||||
@@ -116,17 +107,18 @@ static void enable_microdev_irq(unsigned int irq)
|
||||
__raw_writel(MICRODEV_FPGA_INTC_MASK(fpgaIrq), MICRODEV_FPGA_INTENB_REG);
|
||||
}
|
||||
|
||||
static struct irq_chip microdev_irq_type = {
|
||||
.name = "MicroDev-IRQ",
|
||||
.irq_unmask = enable_microdev_irq,
|
||||
.irq_mask = disable_microdev_irq,
|
||||
};
|
||||
|
||||
/* This function sets the desired irq handler to be a MicroDev type */
|
||||
static void __init make_microdev_irq(unsigned int irq)
|
||||
{
|
||||
disable_irq_nosync(irq);
|
||||
set_irq_chip_and_handler(irq, µdev_irq_type, handle_level_irq);
|
||||
disable_microdev_irq(irq);
|
||||
}
|
||||
|
||||
static void mask_and_ack_microdev(unsigned int irq)
|
||||
{
|
||||
disable_microdev_irq(irq);
|
||||
disable_microdev_irq(irq_get_irq_data(irq));
|
||||
}
|
||||
|
||||
extern void __init init_microdev_irq(void)
|
||||
|
@@ -25,8 +25,9 @@
|
||||
#define INTC_IPR01 0xfffe0818
|
||||
#define INTC_ICR1 0xfffe0802
|
||||
|
||||
static void disable_se7206_irq(unsigned int irq)
|
||||
static void disable_se7206_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
unsigned short val;
|
||||
unsigned short mask = 0xffff ^ (0x0f << 4 * (3 - (IRQ0_IRQ - irq)));
|
||||
unsigned short msk0,msk1;
|
||||
@@ -55,8 +56,9 @@ static void disable_se7206_irq(unsigned int irq)
|
||||
__raw_writew(msk1, INTMSK1);
|
||||
}
|
||||
|
||||
static void enable_se7206_irq(unsigned int irq)
|
||||
static void enable_se7206_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
unsigned short val;
|
||||
unsigned short value = (0x0001 << 4 * (3 - (IRQ0_IRQ - irq)));
|
||||
unsigned short msk0,msk1;
|
||||
@@ -86,13 +88,14 @@ static void enable_se7206_irq(unsigned int irq)
|
||||
__raw_writew(msk1, INTMSK1);
|
||||
}
|
||||
|
||||
static void eoi_se7206_irq(unsigned int irq)
|
||||
static void eoi_se7206_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned short sts0,sts1;
|
||||
unsigned int irq = data->irq;
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
|
||||
if (!(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
|
||||
enable_se7206_irq(irq);
|
||||
enable_se7206_irq(data);
|
||||
/* FPGA isr clear */
|
||||
sts0 = __raw_readw(INTSTS0);
|
||||
sts1 = __raw_readw(INTSTS1);
|
||||
@@ -115,10 +118,9 @@ static void eoi_se7206_irq(unsigned int irq)
|
||||
|
||||
static struct irq_chip se7206_irq_chip __read_mostly = {
|
||||
.name = "SE7206-FPGA",
|
||||
.mask = disable_se7206_irq,
|
||||
.unmask = enable_se7206_irq,
|
||||
.mask_ack = disable_se7206_irq,
|
||||
.eoi = eoi_se7206_irq,
|
||||
.irq_mask = disable_se7206_irq,
|
||||
.irq_unmask = enable_se7206_irq,
|
||||
.irq_eoi = eoi_se7206_irq,
|
||||
};
|
||||
|
||||
static void make_se7206_irq(unsigned int irq)
|
||||
@@ -126,7 +128,7 @@ static void make_se7206_irq(unsigned int irq)
|
||||
disable_irq_nosync(irq);
|
||||
set_irq_chip_and_handler_name(irq, &se7206_irq_chip,
|
||||
handle_level_irq, "level");
|
||||
disable_se7206_irq(irq);
|
||||
disable_se7206_irq(irq_get_irq_data(irq));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -18,23 +18,22 @@
|
||||
|
||||
unsigned int se7343_fpga_irq[SE7343_FPGA_IRQ_NR] = { 0, };
|
||||
|
||||
static void disable_se7343_irq(unsigned int irq)
|
||||
static void disable_se7343_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int bit = (unsigned int)get_irq_chip_data(irq);
|
||||
unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data);
|
||||
__raw_writew(__raw_readw(PA_CPLD_IMSK) | 1 << bit, PA_CPLD_IMSK);
|
||||
}
|
||||
|
||||
static void enable_se7343_irq(unsigned int irq)
|
||||
static void enable_se7343_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int bit = (unsigned int)get_irq_chip_data(irq);
|
||||
unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data);
|
||||
__raw_writew(__raw_readw(PA_CPLD_IMSK) & ~(1 << bit), PA_CPLD_IMSK);
|
||||
}
|
||||
|
||||
static struct irq_chip se7343_irq_chip __read_mostly = {
|
||||
.name = "SE7343-FPGA",
|
||||
.mask = disable_se7343_irq,
|
||||
.unmask = enable_se7343_irq,
|
||||
.mask_ack = disable_se7343_irq,
|
||||
.name = "SE7343-FPGA",
|
||||
.irq_mask = disable_se7343_irq,
|
||||
.irq_unmask = enable_se7343_irq,
|
||||
};
|
||||
|
||||
static void se7343_irq_demux(unsigned int irq, struct irq_desc *desc)
|
||||
|
@@ -18,23 +18,22 @@
|
||||
|
||||
unsigned int se7722_fpga_irq[SE7722_FPGA_IRQ_NR] = { 0, };
|
||||
|
||||
static void disable_se7722_irq(unsigned int irq)
|
||||
static void disable_se7722_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int bit = (unsigned int)get_irq_chip_data(irq);
|
||||
unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data);
|
||||
__raw_writew(__raw_readw(IRQ01_MASK) | 1 << bit, IRQ01_MASK);
|
||||
}
|
||||
|
||||
static void enable_se7722_irq(unsigned int irq)
|
||||
static void enable_se7722_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int bit = (unsigned int)get_irq_chip_data(irq);
|
||||
unsigned int bit = (unsigned int)irq_data_get_irq_chip_data(data);
|
||||
__raw_writew(__raw_readw(IRQ01_MASK) & ~(1 << bit), IRQ01_MASK);
|
||||
}
|
||||
|
||||
static struct irq_chip se7722_irq_chip __read_mostly = {
|
||||
.name = "SE7722-FPGA",
|
||||
.mask = disable_se7722_irq,
|
||||
.unmask = enable_se7722_irq,
|
||||
.mask_ack = disable_se7722_irq,
|
||||
.name = "SE7722-FPGA",
|
||||
.irq_mask = disable_se7722_irq,
|
||||
.irq_unmask = enable_se7722_irq,
|
||||
};
|
||||
|
||||
static void se7722_irq_demux(unsigned int irq, struct irq_desc *desc)
|
||||
|
@@ -68,25 +68,26 @@ static struct fpga_irq get_fpga_irq(unsigned int irq)
|
||||
return set;
|
||||
}
|
||||
|
||||
static void disable_se7724_irq(unsigned int irq)
|
||||
static void disable_se7724_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
struct fpga_irq set = get_fpga_irq(fpga2irq(irq));
|
||||
unsigned int bit = irq - set.base;
|
||||
__raw_writew(__raw_readw(set.mraddr) | 0x0001 << bit, set.mraddr);
|
||||
}
|
||||
|
||||
static void enable_se7724_irq(unsigned int irq)
|
||||
static void enable_se7724_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned int irq = data->irq;
|
||||
struct fpga_irq set = get_fpga_irq(fpga2irq(irq));
|
||||
unsigned int bit = irq - set.base;
|
||||
__raw_writew(__raw_readw(set.mraddr) & ~(0x0001 << bit), set.mraddr);
|
||||
}
|
||||
|
||||
static struct irq_chip se7724_irq_chip __read_mostly = {
|
||||
.name = "SE7724-FPGA",
|
||||
.mask = disable_se7724_irq,
|
||||
.unmask = enable_se7724_irq,
|
||||
.mask_ack = disable_se7724_irq,
|
||||
.name = "SE7724-FPGA",
|
||||
.irq_mask = disable_se7724_irq,
|
||||
.irq_unmask = enable_se7724_irq,
|
||||
};
|
||||
|
||||
static void se7724_irq_demux(unsigned int irq, struct irq_desc *desc)
|
||||
|
@@ -23,54 +23,39 @@
|
||||
static unsigned long *systemh_irq_mask_register = (unsigned long *)0xB3F10004;
|
||||
static unsigned long *systemh_irq_request_register = (unsigned long *)0xB3F10000;
|
||||
|
||||
/* forward declaration */
|
||||
static void enable_systemh_irq(unsigned int irq);
|
||||
static void disable_systemh_irq(unsigned int irq);
|
||||
static void mask_and_ack_systemh(unsigned int);
|
||||
static void disable_systemh_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned long val, mask = 0x01 << 1;
|
||||
|
||||
/* Clear the "irq"th bit in the mask and set it in the request */
|
||||
val = __raw_readl((unsigned long)systemh_irq_mask_register);
|
||||
val &= ~mask;
|
||||
__raw_writel(val, (unsigned long)systemh_irq_mask_register);
|
||||
|
||||
val = __raw_readl((unsigned long)systemh_irq_request_register);
|
||||
val |= mask;
|
||||
__raw_writel(val, (unsigned long)systemh_irq_request_register);
|
||||
}
|
||||
|
||||
static void enable_systemh_irq(struct irq_data *data)
|
||||
{
|
||||
unsigned long val, mask = 0x01 << 1;
|
||||
|
||||
/* Set "irq"th bit in the mask register */
|
||||
val = __raw_readl((unsigned long)systemh_irq_mask_register);
|
||||
val |= mask;
|
||||
__raw_writel(val, (unsigned long)systemh_irq_mask_register);
|
||||
}
|
||||
|
||||
static struct irq_chip systemh_irq_type = {
|
||||
.name = " SystemH Register",
|
||||
.unmask = enable_systemh_irq,
|
||||
.mask = disable_systemh_irq,
|
||||
.ack = mask_and_ack_systemh,
|
||||
.name = "SystemH Register",
|
||||
.irq_unmask = enable_systemh_irq,
|
||||
.irq_mask = disable_systemh_irq,
|
||||
};
|
||||
|
||||
static void disable_systemh_irq(unsigned int irq)
|
||||
{
|
||||
if (systemh_irq_mask_register) {
|
||||
unsigned long val, mask = 0x01 << 1;
|
||||
|
||||
/* Clear the "irq"th bit in the mask and set it in the request */
|
||||
val = __raw_readl((unsigned long)systemh_irq_mask_register);
|
||||
val &= ~mask;
|
||||
__raw_writel(val, (unsigned long)systemh_irq_mask_register);
|
||||
|
||||
val = __raw_readl((unsigned long)systemh_irq_request_register);
|
||||
val |= mask;
|
||||
__raw_writel(val, (unsigned long)systemh_irq_request_register);
|
||||
}
|
||||
}
|
||||
|
||||
static void enable_systemh_irq(unsigned int irq)
|
||||
{
|
||||
if (systemh_irq_mask_register) {
|
||||
unsigned long val, mask = 0x01 << 1;
|
||||
|
||||
/* Set "irq"th bit in the mask register */
|
||||
val = __raw_readl((unsigned long)systemh_irq_mask_register);
|
||||
val |= mask;
|
||||
__raw_writel(val, (unsigned long)systemh_irq_mask_register);
|
||||
}
|
||||
}
|
||||
|
||||
static void mask_and_ack_systemh(unsigned int irq)
|
||||
{
|
||||
disable_systemh_irq(irq);
|
||||
}
|
||||
|
||||
void make_systemh_irq(unsigned int irq)
|
||||
{
|
||||
disable_irq_nosync(irq);
|
||||
set_irq_chip_and_handler(irq, &systemh_irq_type, handle_level_irq);
|
||||
disable_systemh_irq(irq);
|
||||
disable_systemh_irq(irq_get_irq_data(irq));
|
||||
}
|
||||
|
@@ -54,18 +54,19 @@ static int x3proto_gpio_to_irq(struct gpio_chip *chip, unsigned gpio)
|
||||
|
||||
static void x3proto_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
struct irq_chip *chip = get_irq_desc_chip(desc);
|
||||
struct irq_data *data = irq_get_irq_data(irq);
|
||||
struct irq_chip *chip = irq_data_get_irq_chip(data);
|
||||
unsigned long mask;
|
||||
int pin;
|
||||
|
||||
chip->mask_ack(irq);
|
||||
chip->irq_mask_ack(data);
|
||||
|
||||
mask = __raw_readw(KEYDETR);
|
||||
|
||||
for_each_set_bit(pin, &mask, NR_BASEBOARD_GPIOS)
|
||||
generic_handle_irq(x3proto_gpio_to_irq(NULL, pin));
|
||||
|
||||
chip->unmask(irq);
|
||||
chip->irq_unmask(data);
|
||||
}
|
||||
|
||||
struct gpio_chip x3proto_gpio_chip = {
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador