]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blame - arch/metag/include/asm/core_reg.h
Merge tag 'batadv-net-for-davem-20161202' of git://git.open-mesh.org/linux-merge
[mirror_ubuntu-focal-kernel.git] / arch / metag / include / asm / core_reg.h
CommitLineData
42682c6c
JH
1#ifndef __ASM_METAG_CORE_REG_H_
2#define __ASM_METAG_CORE_REG_H_
3
4#include <asm/metag_regs.h>
5
6extern void core_reg_write(int unit, int reg, int thread, unsigned int val);
7extern unsigned int core_reg_read(int unit, int reg, int thread);
8
9/*
10 * These macros allow direct access from C to any register known to the
11 * assembler. Example candidates are TXTACTCYC, TXIDLECYC, and TXPRIVEXT.
12 */
13
14#define __core_reg_get(reg) ({ \
15 unsigned int __grvalue; \
16 asm volatile("MOV %0," #reg \
17 : "=r" (__grvalue)); \
18 __grvalue; \
19})
20
21#define __core_reg_set(reg, value) do { \
22 unsigned int __srvalue = (value); \
23 asm volatile("MOV " #reg ",%0" \
24 : \
25 : "r" (__srvalue)); \
26} while (0)
27
28#define __core_reg_swap(reg, value) do { \
29 unsigned int __srvalue = (value); \
30 asm volatile("SWAP " #reg ",%0" \
31 : "+r" (__srvalue)); \
32 (value) = __srvalue; \
33} while (0)
34
35#endif