Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: parisc: Fix GSC PS/2 driver name for keyboard and mouse parisc: KittyHawk LCD fix parisc: convert the rest of the irq handlers to simple/percpu parisc: fix dino/gsc interrupts parisc: remove redundant initialization in sigsegv path of sys_rt_sigreturn
This commit is contained in:
commit
47ad504c56
|
@ -75,9 +75,6 @@ static void cpu_unmask_irq(unsigned int irq)
|
||||||
smp_send_all_nop();
|
smp_send_all_nop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void no_ack_irq(unsigned int irq) { }
|
|
||||||
void no_end_irq(unsigned int irq) { }
|
|
||||||
|
|
||||||
void cpu_ack_irq(unsigned int irq)
|
void cpu_ack_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
unsigned long mask = EIEM_MASK(irq);
|
unsigned long mask = EIEM_MASK(irq);
|
||||||
|
@ -241,7 +238,7 @@ int cpu_claim_irq(unsigned int irq, struct irq_chip *type, void *data)
|
||||||
|
|
||||||
/* for iosapic interrupts */
|
/* for iosapic interrupts */
|
||||||
if (type) {
|
if (type) {
|
||||||
set_irq_chip_and_handler(irq, type, handle_level_irq);
|
set_irq_chip_and_handler(irq, type, handle_percpu_irq);
|
||||||
set_irq_chip_data(irq, data);
|
set_irq_chip_data(irq, data);
|
||||||
cpu_unmask_irq(irq);
|
cpu_unmask_irq(irq);
|
||||||
}
|
}
|
||||||
|
@ -392,7 +389,7 @@ static void claim_cpu_irqs(void)
|
||||||
int i;
|
int i;
|
||||||
for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) {
|
for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) {
|
||||||
set_irq_chip_and_handler(i, &cpu_interrupt_type,
|
set_irq_chip_and_handler(i, &cpu_interrupt_type,
|
||||||
handle_level_irq);
|
handle_percpu_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_irq_handler(TIMER_IRQ, handle_percpu_irq);
|
set_irq_handler(TIMER_IRQ, handle_percpu_irq);
|
||||||
|
|
|
@ -98,7 +98,6 @@ void
|
||||||
sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
|
sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
|
||||||
{
|
{
|
||||||
struct rt_sigframe __user *frame;
|
struct rt_sigframe __user *frame;
|
||||||
struct siginfo si;
|
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
unsigned long usp = (regs->gr[30] & ~(0x01UL));
|
unsigned long usp = (regs->gr[30] & ~(0x01UL));
|
||||||
unsigned long sigframe_size = PARISC_RT_SIGFRAME_SIZE;
|
unsigned long sigframe_size = PARISC_RT_SIGFRAME_SIZE;
|
||||||
|
@ -178,13 +177,7 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
|
||||||
|
|
||||||
give_sigsegv:
|
give_sigsegv:
|
||||||
DBG(1,"sys_rt_sigreturn: Sending SIGSEGV\n");
|
DBG(1,"sys_rt_sigreturn: Sending SIGSEGV\n");
|
||||||
si.si_signo = SIGSEGV;
|
force_sig(SIGSEGV, current);
|
||||||
si.si_errno = 0;
|
|
||||||
si.si_code = SI_KERNEL;
|
|
||||||
si.si_pid = task_pid_vnr(current);
|
|
||||||
si.si_uid = current_uid();
|
|
||||||
si.si_addr = &frame->uc;
|
|
||||||
force_sig_info(SIGSEGV, &si, current);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -358,7 +358,7 @@ static int __devinit gscps2_probe(struct parisc_device *dev)
|
||||||
gscps2_reset(ps2port);
|
gscps2_reset(ps2port);
|
||||||
ps2port->id = readb(ps2port->addr + GSC_ID) & 0x0f;
|
ps2port->id = readb(ps2port->addr + GSC_ID) & 0x0f;
|
||||||
|
|
||||||
snprintf(serio->name, sizeof(serio->name), "GSC PS/2 %s",
|
snprintf(serio->name, sizeof(serio->name), "gsc-ps2-%s",
|
||||||
(ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse");
|
(ps2port->id == GSC_ID_KEYBOARD) ? "keyboard" : "mouse");
|
||||||
strlcpy(serio->phys, dev_name(&dev->dev), sizeof(serio->phys));
|
strlcpy(serio->phys, dev_name(&dev->dev), sizeof(serio->phys));
|
||||||
serio->id.type = SERIO_8042;
|
serio->id.type = SERIO_8042;
|
||||||
|
|
|
@ -349,7 +349,6 @@ static struct irq_chip dino_interrupt_type = {
|
||||||
.name = "GSC-PCI",
|
.name = "GSC-PCI",
|
||||||
.unmask = dino_unmask_irq,
|
.unmask = dino_unmask_irq,
|
||||||
.mask = dino_mask_irq,
|
.mask = dino_mask_irq,
|
||||||
.ack = no_ack_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -186,7 +186,6 @@ static struct irq_chip eisa_interrupt_type = {
|
||||||
.name = "EISA",
|
.name = "EISA",
|
||||||
.unmask = eisa_unmask_irq,
|
.unmask = eisa_unmask_irq,
|
||||||
.mask = eisa_mask_irq,
|
.mask = eisa_mask_irq,
|
||||||
.ack = no_ack_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static irqreturn_t eisa_irq(int wax_irq, void *intr_dev)
|
static irqreturn_t eisa_irq(int wax_irq, void *intr_dev)
|
||||||
|
@ -340,7 +339,7 @@ static int __init eisa_probe(struct parisc_device *dev)
|
||||||
setup_irq(2, &irq2_action);
|
setup_irq(2, &irq2_action);
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
set_irq_chip_and_handler(i, &eisa_interrupt_type,
|
set_irq_chip_and_handler(i, &eisa_interrupt_type,
|
||||||
handle_level_irq);
|
handle_simple_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
EISA_bus = 1;
|
EISA_bus = 1;
|
||||||
|
|
|
@ -143,7 +143,6 @@ static struct irq_chip gsc_asic_interrupt_type = {
|
||||||
.name = "GSC-ASIC",
|
.name = "GSC-ASIC",
|
||||||
.unmask = gsc_asic_unmask_irq,
|
.unmask = gsc_asic_unmask_irq,
|
||||||
.mask = gsc_asic_mask_irq,
|
.mask = gsc_asic_mask_irq,
|
||||||
.ack = no_ack_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int gsc_assign_irq(struct irq_chip *type, void *data)
|
int gsc_assign_irq(struct irq_chip *type, void *data)
|
||||||
|
@ -153,7 +152,7 @@ int gsc_assign_irq(struct irq_chip *type, void *data)
|
||||||
if (irq > GSC_IRQ_MAX)
|
if (irq > GSC_IRQ_MAX)
|
||||||
return NO_IRQ;
|
return NO_IRQ;
|
||||||
|
|
||||||
set_irq_chip_and_handler(irq, type, handle_level_irq);
|
set_irq_chip_and_handler(irq, type, handle_simple_irq);
|
||||||
set_irq_chip_data(irq, data);
|
set_irq_chip_data(irq, data);
|
||||||
|
|
||||||
return irq++;
|
return irq++;
|
||||||
|
|
|
@ -669,6 +669,13 @@ printk("\n");
|
||||||
DBG(KERN_DEBUG "enable_irq(%d): eoi(%p, 0x%x)\n", irq,
|
DBG(KERN_DEBUG "enable_irq(%d): eoi(%p, 0x%x)\n", irq,
|
||||||
vi->eoi_addr, vi->eoi_data);
|
vi->eoi_addr, vi->eoi_data);
|
||||||
iosapic_eoi(vi->eoi_addr, vi->eoi_data);
|
iosapic_eoi(vi->eoi_addr, vi->eoi_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void iosapic_eoi_irq(unsigned int irq)
|
||||||
|
{
|
||||||
|
struct vector_info *vi = get_irq_chip_data(irq);
|
||||||
|
|
||||||
|
iosapic_eoi(vi->eoi_addr, vi->eoi_data);
|
||||||
cpu_eoi_irq(irq);
|
cpu_eoi_irq(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -705,6 +712,7 @@ static struct irq_chip iosapic_interrupt_type = {
|
||||||
.unmask = iosapic_unmask_irq,
|
.unmask = iosapic_unmask_irq,
|
||||||
.mask = iosapic_mask_irq,
|
.mask = iosapic_mask_irq,
|
||||||
.ack = cpu_ack_irq,
|
.ack = cpu_ack_irq,
|
||||||
|
.eoi = iosapic_eoi_irq,
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
.set_affinity = iosapic_set_affinity_irq,
|
.set_affinity = iosapic_set_affinity_irq,
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -64,6 +64,7 @@ static unsigned int led_diskio __read_mostly = 1;
|
||||||
static unsigned int led_lanrxtx __read_mostly = 1;
|
static unsigned int led_lanrxtx __read_mostly = 1;
|
||||||
static char lcd_text[32] __read_mostly;
|
static char lcd_text[32] __read_mostly;
|
||||||
static char lcd_text_default[32] __read_mostly;
|
static char lcd_text_default[32] __read_mostly;
|
||||||
|
static int lcd_no_led_support __read_mostly = 0; /* KittyHawk doesn't support LED on its LCD */
|
||||||
|
|
||||||
|
|
||||||
static struct workqueue_struct *led_wq;
|
static struct workqueue_struct *led_wq;
|
||||||
|
@ -115,7 +116,7 @@ lcd_info __attribute__((aligned(8))) __read_mostly =
|
||||||
.lcd_width = 16,
|
.lcd_width = 16,
|
||||||
.lcd_cmd_reg_addr = KITTYHAWK_LCD_CMD,
|
.lcd_cmd_reg_addr = KITTYHAWK_LCD_CMD,
|
||||||
.lcd_data_reg_addr = KITTYHAWK_LCD_DATA,
|
.lcd_data_reg_addr = KITTYHAWK_LCD_DATA,
|
||||||
.min_cmd_delay = 40,
|
.min_cmd_delay = 80,
|
||||||
.reset_cmd1 = 0x80,
|
.reset_cmd1 = 0x80,
|
||||||
.reset_cmd2 = 0xc0,
|
.reset_cmd2 = 0xc0,
|
||||||
};
|
};
|
||||||
|
@ -135,6 +136,9 @@ static int start_task(void)
|
||||||
/* Display the default text now */
|
/* Display the default text now */
|
||||||
if (led_type == LED_HASLCD) lcd_print( lcd_text_default );
|
if (led_type == LED_HASLCD) lcd_print( lcd_text_default );
|
||||||
|
|
||||||
|
/* KittyHawk has no LED support on its LCD */
|
||||||
|
if (lcd_no_led_support) return 0;
|
||||||
|
|
||||||
/* Create the work queue and queue the LED task */
|
/* Create the work queue and queue the LED task */
|
||||||
led_wq = create_singlethread_workqueue("led_wq");
|
led_wq = create_singlethread_workqueue("led_wq");
|
||||||
queue_delayed_work(led_wq, &led_task, 0);
|
queue_delayed_work(led_wq, &led_task, 0);
|
||||||
|
@ -248,9 +252,13 @@ static int __init led_create_procfs(void)
|
||||||
|
|
||||||
proc_pdc_root = proc_mkdir("pdc", 0);
|
proc_pdc_root = proc_mkdir("pdc", 0);
|
||||||
if (!proc_pdc_root) return -1;
|
if (!proc_pdc_root) return -1;
|
||||||
ent = proc_create_data("led", S_IRUGO|S_IWUSR, proc_pdc_root,
|
|
||||||
&led_proc_fops, (void *)LED_NOLCD); /* LED */
|
if (!lcd_no_led_support)
|
||||||
if (!ent) return -1;
|
{
|
||||||
|
ent = proc_create_data("led", S_IRUGO|S_IWUSR, proc_pdc_root,
|
||||||
|
&led_proc_fops, (void *)LED_NOLCD); /* LED */
|
||||||
|
if (!ent) return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (led_type == LED_HASLCD)
|
if (led_type == LED_HASLCD)
|
||||||
{
|
{
|
||||||
|
@ -692,6 +700,7 @@ int __init led_init(void)
|
||||||
case 0x58B: /* KittyHawk DC2 100 (K200) */
|
case 0x58B: /* KittyHawk DC2 100 (K200) */
|
||||||
printk(KERN_INFO "%s: KittyHawk-Machine (hversion 0x%x) found, "
|
printk(KERN_INFO "%s: KittyHawk-Machine (hversion 0x%x) found, "
|
||||||
"LED detection skipped.\n", __FILE__, CPU_HVERSION);
|
"LED detection skipped.\n", __FILE__, CPU_HVERSION);
|
||||||
|
lcd_no_led_support = 1;
|
||||||
goto found; /* use the preinitialized values of lcd_info */
|
goto found; /* use the preinitialized values of lcd_info */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -323,7 +323,6 @@ static struct irq_chip superio_interrupt_type = {
|
||||||
.name = SUPERIO,
|
.name = SUPERIO,
|
||||||
.unmask = superio_unmask_irq,
|
.unmask = superio_unmask_irq,
|
||||||
.mask = superio_mask_irq,
|
.mask = superio_mask_irq,
|
||||||
.ack = no_ack_irq,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef DEBUG_SUPERIO_INIT
|
#ifdef DEBUG_SUPERIO_INIT
|
||||||
|
@ -354,7 +353,7 @@ int superio_fixup_irq(struct pci_dev *pcidev)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
set_irq_chip_and_handler(i, &superio_interrupt_type, handle_level_irq);
|
set_irq_chip_and_handler(i, &superio_interrupt_type, handle_simple_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue