#define CPSR_IRQDIS 0x80 #define CPSR_FIQDIS 0x40 .arm .globl _dc_inval_entries .globl _dc_flush_entries .globl _dc_flush .globl _dc_inval .globl _ic_inval .globl _drain_write_buffer .globl _tlb_inval .globl irq_kill .globl irq_restore .text irq_kill: mrs r1, cpsr and r0, r1, #(CPSR_IRQDIS|CPSR_FIQDIS) orr r1, r1, #(CPSR_IRQDIS|CPSR_FIQDIS) msr cpsr_c, r1 bx lr irq_restore: mrs r1, cpsr bic r1, r1, #(CPSR_IRQDIS|CPSR_FIQDIS) orr r1, r1, r0 msr cpsr_c, r1 bx lr _dc_inval_entries: mcr p15, 0, r0, c7, c6, 1 add r0, #0x20 subs r1, #1 bne _dc_inval_entries bx lr _dc_flush_entries: mcr p15, 0, r0, c7, c10, 1 add r0, #0x20 subs r1, #1 bne _dc_flush_entries bx lr _dc_flush: mrc p15, 0, pc, c7, c10, 3 bne _dc_flush bx lr _dc_inval: mov r0, #0 mcr p15, 0, r0, c7, c6, 0 bx lr _ic_inval: mov r0, #0 mcr p15, 0, r0, c7, c5, 0 bx lr _drain_write_buffer: mov r0, #0 mcr p15, 0, r0, c7, c10, 4 bx lr _tlb_inval: mov r0, #0 mcr p15, 0, r0, c8, c7 bx lr