xref: /openbmc/hiomapd/common.h (revision 44ac078b2a310cb4f18ed2d885c0d4edd2ee0f14)
1314929b4SCyril Bur /* Copyright 2016 IBM
2314929b4SCyril Bur  *
3314929b4SCyril Bur  * Licensed under the Apache License, Version 2.0 (the "License");
4314929b4SCyril Bur  * you may not use this file except in compliance with the License.
5314929b4SCyril Bur  * You may obtain a copy of the License at
6314929b4SCyril Bur  *
7314929b4SCyril Bur  * http://www.apache.org/licenses/LICENSE-2.0
8314929b4SCyril Bur  *
9314929b4SCyril Bur  * Unless required by applicable law or agreed to in writing, software
10314929b4SCyril Bur  * distributed under the License is distributed on an "AS IS" BASIS,
11314929b4SCyril Bur  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12314929b4SCyril Bur  * See the License for the specific language governing permissions and
13314929b4SCyril Bur  * limitations under the License.
14314929b4SCyril Bur  *
15314929b4SCyril Bur  */
16314929b4SCyril Bur 
17e39c9163SSuraj Jitindar Singh #ifndef COMMON_H
18e39c9163SSuraj Jitindar Singh #define COMMON_H
19e39c9163SSuraj Jitindar Singh 
2036a39f6bSAndrew Jeffery #include <stdarg.h>
2136a39f6bSAndrew Jeffery #include <stdbool.h>
2236a39f6bSAndrew Jeffery #include <stdint.h>
2336a39f6bSAndrew Jeffery 
24314929b4SCyril Bur #ifndef PREFIX
25314929b4SCyril Bur #define PREFIX ""
26314929b4SCyril Bur #endif
27314929b4SCyril Bur 
2890b92fe4SRatan Gupta enum verbose {
29314929b4SCyril Bur 	MBOX_LOG_NONE = 0,
3028519598SSuraj Jitindar Singh 	MBOX_LOG_INFO = 1,
31314929b4SCyril Bur 	MBOX_LOG_DEBUG = 2
3290b92fe4SRatan Gupta };
3390b92fe4SRatan Gupta 
3490b92fe4SRatan Gupta extern enum verbose verbosity;
35314929b4SCyril Bur 
3628519598SSuraj Jitindar Singh /* Error Messages */
37*44ac078bSAndrew Jeffery #define MSG_ERR(f_, ...)						\
38*44ac078bSAndrew Jeffery do {									\
39*44ac078bSAndrew Jeffery 	mbox_log(LOG_ERR, f_, ##__VA_ARGS__);				\
40*44ac078bSAndrew Jeffery } while (0)
41*44ac078bSAndrew Jeffery 
4228519598SSuraj Jitindar Singh /* Informational Messages */
43*44ac078bSAndrew Jeffery #define MSG_INFO(f_, ...) 						\
44*44ac078bSAndrew Jeffery do { 									\
45*44ac078bSAndrew Jeffery 	if (verbosity >= MBOX_LOG_INFO) { 				\
46e39c9163SSuraj Jitindar Singh 		mbox_log(LOG_INFO, f_, ##__VA_ARGS__);			\
47*44ac078bSAndrew Jeffery 	}								\
48*44ac078bSAndrew Jeffery } while (0)
49*44ac078bSAndrew Jeffery 
5028519598SSuraj Jitindar Singh /* Debug Messages */
51*44ac078bSAndrew Jeffery #define MSG_DBG(f_, ...)						\
52*44ac078bSAndrew Jeffery do { 									\
53*44ac078bSAndrew Jeffery 	if (verbosity >= MBOX_LOG_DEBUG) {				\
5428519598SSuraj Jitindar Singh 		mbox_log(LOG_DEBUG, f_, ##__VA_ARGS__);			\
55*44ac078bSAndrew Jeffery 	}								\
56*44ac078bSAndrew Jeffery } while(0)
57e39c9163SSuraj Jitindar Singh 
5890b92fe4SRatan Gupta extern void (*mbox_vlog)(int p, const char *fmt, va_list args);
59314929b4SCyril Bur 
60393821ddSDeepak Kodihalli #ifdef __cplusplus
61393821ddSDeepak Kodihalli extern "C" {
62393821ddSDeepak Kodihalli #endif
63393821ddSDeepak Kodihalli 
64314929b4SCyril Bur void mbox_log_console(int p, const char *fmt, va_list args);
65314929b4SCyril Bur 
66314929b4SCyril Bur __attribute__((format(printf, 2, 3)))
67314929b4SCyril Bur void mbox_log(int p, const char *fmt, ...);
68314929b4SCyril Bur 
69314929b4SCyril Bur uint16_t get_u16(uint8_t *ptr);
70314929b4SCyril Bur 
71314929b4SCyril Bur void put_u16(uint8_t *ptr, uint16_t val);
72314929b4SCyril Bur 
73314929b4SCyril Bur uint32_t get_u32(uint8_t *ptr);
74314929b4SCyril Bur 
75314929b4SCyril Bur void put_u32(uint8_t *ptr, uint32_t val);
76314929b4SCyril Bur 
77e39c9163SSuraj Jitindar Singh static inline uint32_t align_up(uint32_t val, uint32_t size)
78e39c9163SSuraj Jitindar Singh {
79e39c9163SSuraj Jitindar Singh 	return (((val) + (size) - 1) & ~((size) - 1));
80e39c9163SSuraj Jitindar Singh }
81e39c9163SSuraj Jitindar Singh 
82e39c9163SSuraj Jitindar Singh static inline uint32_t align_down(uint32_t val, uint32_t size)
83e39c9163SSuraj Jitindar Singh {
84e39c9163SSuraj Jitindar Singh 	return ((val) & ~(((size) - 1)));
85e39c9163SSuraj Jitindar Singh }
86e39c9163SSuraj Jitindar Singh 
87e39c9163SSuraj Jitindar Singh static inline uint32_t min_u32(uint32_t a, uint32_t b)
88e39c9163SSuraj Jitindar Singh {
89e39c9163SSuraj Jitindar Singh 	if (a <= b) {
90e39c9163SSuraj Jitindar Singh 		return a;
91e39c9163SSuraj Jitindar Singh 	}
92e39c9163SSuraj Jitindar Singh 
93e39c9163SSuraj Jitindar Singh 	return b;
94e39c9163SSuraj Jitindar Singh }
95e39c9163SSuraj Jitindar Singh 
96e39c9163SSuraj Jitindar Singh static inline int log_2(int val)
97e39c9163SSuraj Jitindar Singh {
98e39c9163SSuraj Jitindar Singh 	int ret = 0;
99e39c9163SSuraj Jitindar Singh 
100e39c9163SSuraj Jitindar Singh 	if (val <= 0) {
101e39c9163SSuraj Jitindar Singh 		return -1;
102e39c9163SSuraj Jitindar Singh 	}
103e39c9163SSuraj Jitindar Singh 
104e39c9163SSuraj Jitindar Singh 	while (val >>= 1) {
105e39c9163SSuraj Jitindar Singh 		ret++;
106e39c9163SSuraj Jitindar Singh 	}
107e39c9163SSuraj Jitindar Singh 
108e39c9163SSuraj Jitindar Singh 	return ret;
109e39c9163SSuraj Jitindar Singh }
110e39c9163SSuraj Jitindar Singh 
1110aff80c0SSuraj Jitindar Singh static inline bool is_power_of_2(unsigned val)
1120aff80c0SSuraj Jitindar Singh {
1130aff80c0SSuraj Jitindar Singh 	return __builtin_popcount(val) == 1;
1140aff80c0SSuraj Jitindar Singh }
1150aff80c0SSuraj Jitindar Singh 
116314929b4SCyril Bur char *get_dev_mtd(void);
117e39c9163SSuraj Jitindar Singh 
118393821ddSDeepak Kodihalli #ifdef __cplusplus
119393821ddSDeepak Kodihalli }
120393821ddSDeepak Kodihalli #endif
121393821ddSDeepak Kodihalli 
122e39c9163SSuraj Jitindar Singh #endif /* COMMON_H */
123