xref: /openbmc/phosphor-mboxd/common.h (revision 44ac078b2a310cb4f18ed2d885c0d4edd2ee0f14)
1 /* Copyright 2016 IBM
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  *
15  */
16 
17 #ifndef COMMON_H
18 #define COMMON_H
19 
20 #include <stdarg.h>
21 #include <stdbool.h>
22 #include <stdint.h>
23 
24 #ifndef PREFIX
25 #define PREFIX ""
26 #endif
27 
28 enum verbose {
29 	MBOX_LOG_NONE = 0,
30 	MBOX_LOG_INFO = 1,
31 	MBOX_LOG_DEBUG = 2
32 };
33 
34 extern enum verbose verbosity;
35 
36 /* Error Messages */
37 #define MSG_ERR(f_, ...)						\
38 do {									\
39 	mbox_log(LOG_ERR, f_, ##__VA_ARGS__);				\
40 } while (0)
41 
42 /* Informational Messages */
43 #define MSG_INFO(f_, ...) 						\
44 do { 									\
45 	if (verbosity >= MBOX_LOG_INFO) { 				\
46 		mbox_log(LOG_INFO, f_, ##__VA_ARGS__);			\
47 	}								\
48 } while (0)
49 
50 /* Debug Messages */
51 #define MSG_DBG(f_, ...)						\
52 do { 									\
53 	if (verbosity >= MBOX_LOG_DEBUG) {				\
54 		mbox_log(LOG_DEBUG, f_, ##__VA_ARGS__);			\
55 	}								\
56 } while(0)
57 
58 extern void (*mbox_vlog)(int p, const char *fmt, va_list args);
59 
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63 
64 void mbox_log_console(int p, const char *fmt, va_list args);
65 
66 __attribute__((format(printf, 2, 3)))
67 void mbox_log(int p, const char *fmt, ...);
68 
69 uint16_t get_u16(uint8_t *ptr);
70 
71 void put_u16(uint8_t *ptr, uint16_t val);
72 
73 uint32_t get_u32(uint8_t *ptr);
74 
75 void put_u32(uint8_t *ptr, uint32_t val);
76 
77 static inline uint32_t align_up(uint32_t val, uint32_t size)
78 {
79 	return (((val) + (size) - 1) & ~((size) - 1));
80 }
81 
82 static inline uint32_t align_down(uint32_t val, uint32_t size)
83 {
84 	return ((val) & ~(((size) - 1)));
85 }
86 
87 static inline uint32_t min_u32(uint32_t a, uint32_t b)
88 {
89 	if (a <= b) {
90 		return a;
91 	}
92 
93 	return b;
94 }
95 
96 static inline int log_2(int val)
97 {
98 	int ret = 0;
99 
100 	if (val <= 0) {
101 		return -1;
102 	}
103 
104 	while (val >>= 1) {
105 		ret++;
106 	}
107 
108 	return ret;
109 }
110 
111 static inline bool is_power_of_2(unsigned val)
112 {
113 	return __builtin_popcount(val) == 1;
114 }
115 
116 char *get_dev_mtd(void);
117 
118 #ifdef __cplusplus
119 }
120 #endif
121 
122 #endif /* COMMON_H */
123