Path: blob/master/arch/m32r/platforms/oaks32r/setup.c
10819 views
/*1* linux/arch/m32r/platforms/oaks32r/setup.c2*3* Setup routines for OAKS32R Board4*5* Copyright (c) 2002-2005 Hiroyuki Kondo, Hirokazu Takata,6* Hitoshi Yamamoto, Mamoru Sakugawa7*/89#include <linux/irq.h>10#include <linux/kernel.h>11#include <linux/init.h>1213#include <asm/system.h>14#include <asm/m32r.h>15#include <asm/io.h>1617#define irq2port(x) (M32R_ICU_CR1_PORTL + ((x - 1) * sizeof(unsigned long)))1819icu_data_t icu_data[NR_IRQS];2021static void disable_oaks32r_irq(unsigned int irq)22{23unsigned long port, data;2425port = irq2port(irq);26data = icu_data[irq].icucr|M32R_ICUCR_ILEVEL7;27outl(data, port);28}2930static void enable_oaks32r_irq(unsigned int irq)31{32unsigned long port, data;3334port = irq2port(irq);35data = icu_data[irq].icucr|M32R_ICUCR_IEN|M32R_ICUCR_ILEVEL6;36outl(data, port);37}3839static void mask_oaks32r(struct irq_data *data)40{41disable_oaks32r_irq(data->irq);42}4344static void unmask_oaks32r(struct irq_data *data)45{46enable_oaks32r_irq(data->irq);47}4849static void shutdown_oaks32r(struct irq_data *data)50{51unsigned long port;5253port = irq2port(data->irq);54outl(M32R_ICUCR_ILEVEL7, port);55}5657static struct irq_chip oaks32r_irq_type =58{59.name = "OAKS32R-IRQ",60.irq_shutdown = shutdown_oaks32r,61.irq_mask = mask_oaks32r,62.irq_unmask = unmask_oaks32r,63};6465void __init init_IRQ(void)66{67static int once = 0;6869if (once)70return;71else72once++;7374#ifdef CONFIG_NE200075/* INT3 : LAN controller (RTL8019AS) */76irq_set_chip_and_handler(M32R_IRQ_INT3, &oaks32r_irq_type,77handle_level_irq);78icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;79disable_oaks32r_irq(M32R_IRQ_INT3);80#endif /* CONFIG_M32R_NE2000 */8182/* MFT2 : system timer */83irq_set_chip_and_handler(M32R_IRQ_MFT2, &oaks32r_irq_type,84handle_level_irq);85icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN;86disable_oaks32r_irq(M32R_IRQ_MFT2);8788#ifdef CONFIG_SERIAL_M32R_SIO89/* SIO0_R : uart receive data */90irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &oaks32r_irq_type,91handle_level_irq);92icu_data[M32R_IRQ_SIO0_R].icucr = 0;93disable_oaks32r_irq(M32R_IRQ_SIO0_R);9495/* SIO0_S : uart send data */96irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &oaks32r_irq_type,97handle_level_irq);98icu_data[M32R_IRQ_SIO0_S].icucr = 0;99disable_oaks32r_irq(M32R_IRQ_SIO0_S);100101/* SIO1_R : uart receive data */102irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &oaks32r_irq_type,103handle_level_irq);104icu_data[M32R_IRQ_SIO1_R].icucr = 0;105disable_oaks32r_irq(M32R_IRQ_SIO1_R);106107/* SIO1_S : uart send data */108irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &oaks32r_irq_type,109handle_level_irq);110icu_data[M32R_IRQ_SIO1_S].icucr = 0;111disable_oaks32r_irq(M32R_IRQ_SIO1_S);112#endif /* CONFIG_SERIAL_M32R_SIO */113}114115116