| /* |
| * This file is subject to the terms and conditions of the GNU General Public |
| * License. See the file "COPYING" in the main directory of this archive |
| * for more details. |
| * |
| * Copyright (C) 2003 Ralf Baechle |
| */ |
| #ifndef _ASM_ASMMACRO_H |
| #define _ASM_ASMMACRO_H |
| |
| #include <asm/hazards.h> |
| |
| #ifdef CONFIG_32BIT |
| #include <asm/asmmacro-32.h> |
| #endif |
| #ifdef CONFIG_64BIT |
| #include <asm/asmmacro-64.h> |
| #endif |
| #ifdef CONFIG_MIPS_MT_SMTC |
| #include <asm/mipsmtregs.h> |
| #endif |
| |
| #ifdef CONFIG_MIPS_MT_SMTC |
| .macro local_irq_enable reg=t0 |
| mfc0 \reg, CP0_TCSTATUS |
| ori \reg, \reg, TCSTATUS_IXMT |
| xori \reg, \reg, TCSTATUS_IXMT |
| mtc0 \reg, CP0_TCSTATUS |
| _ehb |
| .endm |
| |
| .macro local_irq_disable reg=t0 |
| mfc0 \reg, CP0_TCSTATUS |
| ori \reg, \reg, TCSTATUS_IXMT |
| mtc0 \reg, CP0_TCSTATUS |
| _ehb |
| .endm |
| #else |
| .macro local_irq_enable reg=t0 |
| mfc0 \reg, CP0_STATUS |
| ori \reg, \reg, 1 |
| mtc0 \reg, CP0_STATUS |
| irq_enable_hazard |
| .endm |
| |
| .macro local_irq_disable reg=t0 |
| mfc0 \reg, CP0_STATUS |
| ori \reg, \reg, 1 |
| xori \reg, \reg, 1 |
| mtc0 \reg, CP0_STATUS |
| irq_disable_hazard |
| .endm |
| #endif /* CONFIG_MIPS_MT_SMTC */ |
| |
| /* |
| * Temporary until all gas have MT ASE support |
| */ |
| .macro DMT reg=0 |
| .word (0x41600bc1 | (\reg << 16)) |
| .endm |
| |
| .macro EMT reg=0 |
| .word (0x41600be1 | (\reg << 16)) |
| .endm |
| |
| .macro DVPE reg=0 |
| .word (0x41600001 | (\reg << 16)) |
| .endm |
| |
| .macro EVPE reg=0 |
| .word (0x41600021 | (\reg << 16)) |
| .endm |
| |
| .macro MFTR rt=0, rd=0, u=0, sel=0 |
| .word (0x41000000 | (\rt << 16) | (\rd << 11) | (\u << 5) | (\sel)) |
| .endm |
| |
| .macro MTTR rt=0, rd=0, u=0, sel=0 |
| .word (0x41800000 | (\rt << 16) | (\rd << 11) | (\u << 5) | (\sel)) |
| .endm |
| |
| #endif /* _ASM_ASMMACRO_H */ |