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