39 lines
1.1 KiB
C
39 lines
1.1 KiB
C
/*
|
|
* Copyright (c) 2020 Nuvoton Technology Corporation.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef _NUVOTON_NPCX_REG_ACCESS_H
|
|
#define _NUVOTON_NPCX_REG_ACCESS_H
|
|
|
|
/*
|
|
* NPCX register bit/field access operations
|
|
*/
|
|
#define IS_BIT_SET(reg, bit) (((reg >> bit) & (0x1)) != 0)
|
|
|
|
#define GET_POS_FIELD(pos, size) pos
|
|
#define GET_SIZE_FIELD(pos, size) size
|
|
#define FIELD_POS(field) GET_POS_##field
|
|
#define FIELD_SIZE(field) GET_SIZE_##field
|
|
|
|
#define GET_FIELD(reg, field) \
|
|
_GET_FIELD_(reg, FIELD_POS(field), FIELD_SIZE(field))
|
|
#define _GET_FIELD_(reg, f_pos, f_size) (((reg)>>(f_pos)) & ((1<<(f_size))-1))
|
|
|
|
#define SET_FIELD(reg, field, value) \
|
|
_SET_FIELD_(reg, FIELD_POS(field), FIELD_SIZE(field), value)
|
|
#define _SET_FIELD_(reg, f_pos, f_size, value) \
|
|
((reg) = ((reg) & (~(((1 << (f_size))-1) << (f_pos)))) \
|
|
| ((value) << (f_pos)))
|
|
|
|
#define GET_FIELD_POS(field) \
|
|
_GET_FIELD_POS_(FIELD_POS(field))
|
|
#define _GET_FIELD_POS_(f_ops) f_ops
|
|
|
|
#define GET_FIELD_SZ(field) \
|
|
_GET_FIELD_SZ_(FIELD_SIZE(field))
|
|
#define _GET_FIELD_SZ_(f_ops) f_ops
|
|
|
|
#endif /* _NUVOTON_NPCX_REG_ACCESS_H */
|