xref: /openbmc/hiomapd/common.h (revision 25863af3)
14fe996c2SAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 */
24fe996c2SAndrew Jeffery /* Copyright (C) 2018 IBM Corp. */
3e39c9163SSuraj Jitindar Singh #ifndef COMMON_H
4e39c9163SSuraj Jitindar Singh #define COMMON_H
5e39c9163SSuraj Jitindar Singh 
636a39f6bSAndrew Jeffery #include <stdarg.h>
736a39f6bSAndrew Jeffery #include <stdbool.h>
836a39f6bSAndrew Jeffery #include <stdint.h>
9*25863af3SAndrew Jeffery #include <syslog.h>
1036a39f6bSAndrew Jeffery 
11314929b4SCyril Bur #ifndef PREFIX
12314929b4SCyril Bur #define PREFIX ""
13314929b4SCyril Bur #endif
14314929b4SCyril Bur 
1590b92fe4SRatan Gupta enum verbose {
16314929b4SCyril Bur 	MBOX_LOG_NONE = 0,
1728519598SSuraj Jitindar Singh 	MBOX_LOG_INFO = 1,
18314929b4SCyril Bur 	MBOX_LOG_DEBUG = 2
1990b92fe4SRatan Gupta };
2090b92fe4SRatan Gupta 
2190b92fe4SRatan Gupta extern enum verbose verbosity;
22314929b4SCyril Bur 
2328519598SSuraj Jitindar Singh /* Error Messages */
2444ac078bSAndrew Jeffery #define MSG_ERR(f_, ...)						\
2544ac078bSAndrew Jeffery do {									\
2644ac078bSAndrew Jeffery 	mbox_log(LOG_ERR, f_, ##__VA_ARGS__);				\
2744ac078bSAndrew Jeffery } while (0)
2844ac078bSAndrew Jeffery 
2928519598SSuraj Jitindar Singh /* Informational Messages */
3044ac078bSAndrew Jeffery #define MSG_INFO(f_, ...) 						\
3144ac078bSAndrew Jeffery do { 									\
3244ac078bSAndrew Jeffery 	if (verbosity >= MBOX_LOG_INFO) { 				\
33e39c9163SSuraj Jitindar Singh 		mbox_log(LOG_INFO, f_, ##__VA_ARGS__);			\
3444ac078bSAndrew Jeffery 	}								\
3544ac078bSAndrew Jeffery } while (0)
3644ac078bSAndrew Jeffery 
3728519598SSuraj Jitindar Singh /* Debug Messages */
3844ac078bSAndrew Jeffery #define MSG_DBG(f_, ...)						\
3944ac078bSAndrew Jeffery do { 									\
4044ac078bSAndrew Jeffery 	if (verbosity >= MBOX_LOG_DEBUG) {				\
4128519598SSuraj Jitindar Singh 		mbox_log(LOG_DEBUG, f_, ##__VA_ARGS__);			\
4244ac078bSAndrew Jeffery 	}								\
4344ac078bSAndrew Jeffery } while(0)
44e39c9163SSuraj Jitindar Singh 
4590b92fe4SRatan Gupta extern void (*mbox_vlog)(int p, const char *fmt, va_list args);
46314929b4SCyril Bur 
47393821ddSDeepak Kodihalli #ifdef __cplusplus
48393821ddSDeepak Kodihalli extern "C" {
49393821ddSDeepak Kodihalli #endif
50393821ddSDeepak Kodihalli 
51314929b4SCyril Bur void mbox_log_console(int p, const char *fmt, va_list args);
52314929b4SCyril Bur 
53314929b4SCyril Bur __attribute__((format(printf, 2, 3)))
54314929b4SCyril Bur void mbox_log(int p, const char *fmt, ...);
55314929b4SCyril Bur 
56314929b4SCyril Bur uint16_t get_u16(uint8_t *ptr);
57314929b4SCyril Bur 
58314929b4SCyril Bur void put_u16(uint8_t *ptr, uint16_t val);
59314929b4SCyril Bur 
60314929b4SCyril Bur uint32_t get_u32(uint8_t *ptr);
61314929b4SCyril Bur 
62314929b4SCyril Bur void put_u32(uint8_t *ptr, uint32_t val);
63314929b4SCyril Bur 
align_up(uint32_t val,uint32_t size)64e39c9163SSuraj Jitindar Singh static inline uint32_t align_up(uint32_t val, uint32_t size)
65e39c9163SSuraj Jitindar Singh {
66e39c9163SSuraj Jitindar Singh 	return (((val) + (size) - 1) & ~((size) - 1));
67e39c9163SSuraj Jitindar Singh }
68e39c9163SSuraj Jitindar Singh 
align_down(uint32_t val,uint32_t size)69e39c9163SSuraj Jitindar Singh static inline uint32_t align_down(uint32_t val, uint32_t size)
70e39c9163SSuraj Jitindar Singh {
71e39c9163SSuraj Jitindar Singh 	return ((val) & ~(((size) - 1)));
72e39c9163SSuraj Jitindar Singh }
73e39c9163SSuraj Jitindar Singh 
min_u32(uint32_t a,uint32_t b)74e39c9163SSuraj Jitindar Singh static inline uint32_t min_u32(uint32_t a, uint32_t b)
75e39c9163SSuraj Jitindar Singh {
76e39c9163SSuraj Jitindar Singh 	if (a <= b) {
77e39c9163SSuraj Jitindar Singh 		return a;
78e39c9163SSuraj Jitindar Singh 	}
79e39c9163SSuraj Jitindar Singh 
80e39c9163SSuraj Jitindar Singh 	return b;
81e39c9163SSuraj Jitindar Singh }
82e39c9163SSuraj Jitindar Singh 
log_2(int val)83e39c9163SSuraj Jitindar Singh static inline int log_2(int val)
84e39c9163SSuraj Jitindar Singh {
85e39c9163SSuraj Jitindar Singh 	int ret = 0;
86e39c9163SSuraj Jitindar Singh 
87e39c9163SSuraj Jitindar Singh 	if (val <= 0) {
88e39c9163SSuraj Jitindar Singh 		return -1;
89e39c9163SSuraj Jitindar Singh 	}
90e39c9163SSuraj Jitindar Singh 
91e39c9163SSuraj Jitindar Singh 	while (val >>= 1) {
92e39c9163SSuraj Jitindar Singh 		ret++;
93e39c9163SSuraj Jitindar Singh 	}
94e39c9163SSuraj Jitindar Singh 
95e39c9163SSuraj Jitindar Singh 	return ret;
96e39c9163SSuraj Jitindar Singh }
97e39c9163SSuraj Jitindar Singh 
is_power_of_2(unsigned val)980aff80c0SSuraj Jitindar Singh static inline bool is_power_of_2(unsigned val)
990aff80c0SSuraj Jitindar Singh {
1000aff80c0SSuraj Jitindar Singh 	return __builtin_popcount(val) == 1;
1010aff80c0SSuraj Jitindar Singh }
1020aff80c0SSuraj Jitindar Singh 
103314929b4SCyril Bur char *get_dev_mtd(void);
104e39c9163SSuraj Jitindar Singh 
105393821ddSDeepak Kodihalli #ifdef __cplusplus
106393821ddSDeepak Kodihalli }
107393821ddSDeepak Kodihalli #endif
108393821ddSDeepak Kodihalli 
109e39c9163SSuraj Jitindar Singh #endif /* COMMON_H */
110