static inline void mask_ioasic_irq(unsigned int irq) { u32 simr; simr = ioasic_read(IO_REG_SIMR); simr &= ~(1 << (irq - ioasic_irq_base)); ioasic_write(IO_REG_SIMR, simr); }
static inline void unmask_ioasic_irq(unsigned int irq) { u32 simr; simr = ioasic_read(SIMR); simr |= (1 << (irq - ioasic_irq_base)); ioasic_write(SIMR, simr); }
static unsigned int dec_ioasic_hpt_read(void) { /* * The free-running counter is 32-bit which is good for about * 2 minutes, 50 seconds at possible count rates of up to 25MHz. */ return ioasic_read(IO_REG_FCTR); }
static void mask_ioasic_irq(struct irq_data *d) { u32 simr; simr = ioasic_read(IO_REG_SIMR); simr &= ~(1 << (d->irq - ioasic_irq_base)); ioasic_write(IO_REG_SIMR, simr); }
void __init prom_identify_arch(u32 magic) { unsigned char dec_cpunum, dec_firmrev, dec_etc, dec_systype; u32 dec_sysid; if (!prom_is_rex(magic)) { dec_sysid = simple_strtoul(prom_getenv("systype"), (char **)0, 0); } else { dec_sysid = rex_getsysid(); if (dec_sysid == 0) { printk("Zero sysid returned from PROM! " "Assuming a PMAX-like machine.\n"); dec_sysid = 1; } } dec_cpunum = (dec_sysid & 0xff000000) >> 24; dec_systype = (dec_sysid & 0xff0000) >> 16; dec_firmrev = (dec_sysid & 0xff00) >> 8; dec_etc = dec_sysid & 0xff; /* * FIXME: This may not be an exhaustive list of DECStations/Servers! * Put all model-specific initialisation calls here. */ switch (dec_systype) { case DS2100_3100: mips_machtype = MACH_DS23100; prom_init_kn01(); break; case DS5100: /* DS5100 MIPSMATE */ mips_machtype = MACH_DS5100; prom_init_kn230(); break; case DS5000_200: /* DS5000 3max */ mips_machtype = MACH_DS5000_200; prom_init_kn02(); break; case DS5000_1XX: /* DS5000/100 3min */ mips_machtype = MACH_DS5000_1XX; prom_init_kn02xa(); break; case DS5000_2X0: /* DS5000/240 3max+ or DS5900 bigmax */ mips_machtype = MACH_DS5000_2X0; prom_init_kn03(); if (!(ioasic_read(IO_REG_SIR) & KN03_IO_INR_3MAXP)) mips_machtype = MACH_DS5900; break; case DS5000_XX: /* Personal DS5000/xx maxine */ mips_machtype = MACH_DS5000_XX; prom_init_kn02xa(); break; case DS5800: /* DS5800 Isis */ mips_machtype = MACH_DS5800; break; case DS5400: /* DS5400 MIPSfair */ mips_machtype = MACH_DS5400; break; case DS5500: /* DS5500 MIPSfair-2 */ mips_machtype = MACH_DS5500; break; default: mips_machtype = MACH_DSUNKNOWN; break; } if (mips_machtype == MACH_DSUNKNOWN) printk("This is an %s, id is %x\n", dec_system_strings[mips_machtype], dec_systype); else printk("This is a %s\n", dec_system_strings[mips_machtype]); }
static cycle_t dec_ioasic_hpt_read(struct clocksource *cs) { return ioasic_read(IO_REG_FCTR); }
static cycle_t dec_ioasic_hpt_read(void) { return ioasic_read(IO_REG_FCTR); }
static void dec_ioasic_hpt_init(unsigned int count) { ioasic_write(IO_REG_FCTR, ioasic_read(IO_REG_FCTR) - count); }