37 lines
983 B
C
37 lines
983 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __ASM_METAG_CORE_REG_H_
|
|
#define __ASM_METAG_CORE_REG_H_
|
|
|
|
#include <asm/metag_regs.h>
|
|
|
|
extern void core_reg_write(int unit, int reg, int thread, unsigned int val);
|
|
extern unsigned int core_reg_read(int unit, int reg, int thread);
|
|
|
|
/*
|
|
* These macros allow direct access from C to any register known to the
|
|
* assembler. Example candidates are TXTACTCYC, TXIDLECYC, and TXPRIVEXT.
|
|
*/
|
|
|
|
#define __core_reg_get(reg) ({ \
|
|
unsigned int __grvalue; \
|
|
asm volatile("MOV %0," #reg \
|
|
: "=r" (__grvalue)); \
|
|
__grvalue; \
|
|
})
|
|
|
|
#define __core_reg_set(reg, value) do { \
|
|
unsigned int __srvalue = (value); \
|
|
asm volatile("MOV " #reg ",%0" \
|
|
: \
|
|
: "r" (__srvalue)); \
|
|
} while (0)
|
|
|
|
#define __core_reg_swap(reg, value) do { \
|
|
unsigned int __srvalue = (value); \
|
|
asm volatile("SWAP " #reg ",%0" \
|
|
: "+r" (__srvalue)); \
|
|
(value) = __srvalue; \
|
|
} while (0)
|
|
|
|
#endif
|