vserver 1.9.3
[linux-2.6.git] / arch / mips / vr41xx / common / vrc4173.c
index 3b00635..0bbad1e 100644 (file)
@@ -316,6 +316,96 @@ static inline void vrc4173_giu_init(void)
        spin_lock_init(&vrc4173_giu_lock);
 }
 
+void vrc4173_enable_piuint(uint16_t mask)
+{
+       irq_desc_t *desc = irq_desc + VRC4173_PIU_IRQ;
+       unsigned long flags;
+       uint16_t val;
+
+       spin_lock_irqsave(&desc->lock, flags);
+       val = vrc4173_inw(VRC4173_MPIUINTREG);
+       val |= mask;
+       vrc4173_outw(val, VRC4173_MPIUINTREG);
+       spin_unlock_irqrestore(&desc->lock, flags);
+}
+
+EXPORT_SYMBOL(vrc4173_eanble_piuint);
+
+void vrc4173_disable_piuint(uint16_t mask)
+{
+       irq_desc_t *desc = irq_desc + VRC4173_PIU_IRQ;
+       unsigned long flags;
+       uint16_t val;
+
+       spin_lock_irqsave(&desc->lock, flags);
+       val = vrc4173_inw(VRC4173_MPIUINTREG);
+       val &= ~mask;
+       vrc4173_outw(val, VRC4173_MPIUINTREG);
+       spin_unlock_irqrestore(&desc->lock, flags);
+}
+
+EXPORT_SYMBOL(vrc4173_disable_piuint);
+
+void vrc4173_enable_aiuint(uint16_t mask)
+{
+       irq_desc_t *desc = irq_desc + VRC4173_AIU_IRQ;
+       unsigned long flags;
+       uint16_t val;
+
+       spin_lock_irqsave(&desc->lock, flags);
+       val = vrc4173_inw(VRC4173_MAIUINTREG);
+       val |= mask;
+       vrc4173_outw(val, VRC4173_MAIUINTREG);
+       spin_unlock_irqrestore(&desc->lock, flags);
+}
+
+EXPORT_SYMBOL(vrc4173_enable_aiuint);
+
+void vrc4173_disable_aiuint(uint16_t mask)
+{
+       irq_desc_t *desc = irq_desc + VRC4173_AIU_IRQ;
+       unsigned long flags;
+       uint16_t val;
+
+       spin_lock_irqsave(&desc->lock, flags);
+       val = vrc4173_inw(VRC4173_MAIUINTREG);
+       val &= ~mask;
+       vrc4173_outw(val, VRC4173_MAIUINTREG);
+       spin_unlock_irqrestore(&desc->lock, flags);
+}
+
+EXPORT_SYMBOL(vrc4173_disable_aiuint);
+
+void vrc4173_enable_kiuint(uint16_t mask)
+{
+       irq_desc_t *desc = irq_desc + VRC4173_KIU_IRQ;
+       unsigned long flags;
+       uint16_t val;
+
+       spin_lock_irqsave(&desc->lock, flags);
+       val = vrc4173_inw(VRC4173_MKIUINTREG);
+       val |= mask;
+       vrc4173_outw(val, VRC4173_MKIUINTREG);
+       spin_unlock_irqrestore(&desc->lock, flags);
+}
+
+EXPORT_SYMBOL(vrc4173_enable_kiuint);
+
+void vrc4173_disable_kiuint(uint16_t mask)
+{
+       irq_desc_t *desc = irq_desc + VRC4173_KIU_IRQ;
+       unsigned long flags;
+       uint16_t val;
+
+       spin_lock_irqsave(&desc->lock, flags);
+       val = vrc4173_inw(VRC4173_MKIUINTREG);
+       val &= ~mask;
+       vrc4173_outw(val, VRC4173_MKIUINTREG);
+       spin_unlock_irqrestore(&desc->lock, flags);
+}
+
+EXPORT_SYMBOL(vrc4173_disable_kiuint);
+
 static void enable_vrc4173_irq(unsigned int irq)
 {
        uint16_t val;