1 /* 2 * Copyright (c) 2020 Nuvoton Technology Corporation. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef _NUVOTON_NPCX_REG_ACCESS_H 8 #define _NUVOTON_NPCX_REG_ACCESS_H 9 10 /* 11 * NPCX register bit/field access operations 12 */ 13 14 #define GET_POS_FIELD(pos, size) pos 15 #define GET_SIZE_FIELD(pos, size) size 16 #define FIELD_POS(field) GET_POS_##field 17 #define FIELD_SIZE(field) GET_SIZE_##field 18 19 #define GET_FIELD(reg, field) \ 20 _GET_FIELD_(reg, FIELD_POS(field), FIELD_SIZE(field)) 21 #define _GET_FIELD_(reg, f_pos, f_size) (((reg)>>(f_pos)) & ((1<<(f_size))-1)) 22 23 #define SET_FIELD(reg, field, value) \ 24 _SET_FIELD_(reg, FIELD_POS(field), FIELD_SIZE(field), value) 25 #define _SET_FIELD_(reg, f_pos, f_size, value) \ 26 ((reg) = ((reg) & (~(((1 << (f_size))-1) << (f_pos)))) \ 27 | ((value) << (f_pos))) 28 29 #define GET_FIELD_POS(field) \ 30 _GET_FIELD_POS_(FIELD_POS(field)) 31 #define _GET_FIELD_POS_(f_ops) f_ops 32 33 #define GET_FIELD_SZ(field) \ 34 _GET_FIELD_SZ_(FIELD_SIZE(field)) 35 #define _GET_FIELD_SZ_(f_ops) f_ops 36 37 #endif /* _NUVOTON_NPCX_REG_ACCESS_H */ 38