xref: /openbmc/hiomapd/common.h (revision 0aff80c0fc286b9ba386365c79088ccf156a7ab8)
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 
20314929b4SCyril Bur #ifndef PREFIX
21314929b4SCyril Bur #define PREFIX ""
22314929b4SCyril Bur #endif
23314929b4SCyril Bur 
24314929b4SCyril Bur enum {
25314929b4SCyril Bur    MBOX_LOG_NONE = 0,
26314929b4SCyril Bur    MBOX_LOG_VERBOSE = 1,
27314929b4SCyril Bur    MBOX_LOG_DEBUG = 2
28314929b4SCyril Bur } verbosity;
29314929b4SCyril Bur 
30e39c9163SSuraj Jitindar Singh #define MSG_OUT(f_, ...)	do { if (verbosity >= MBOX_LOG_DEBUG) { \
31e39c9163SSuraj Jitindar Singh 					mbox_log(LOG_INFO, f_, ##__VA_ARGS__); \
32e39c9163SSuraj Jitindar Singh 				} } while (0)
33e39c9163SSuraj Jitindar Singh #define MSG_ERR(f_, ...)	do { if (verbosity >= MBOX_LOG_VERBOSE) { \
34e39c9163SSuraj Jitindar Singh 					mbox_log(LOG_ERR, f_, ##__VA_ARGS__); \
35e39c9163SSuraj Jitindar Singh 				} } while (0)
36e39c9163SSuraj Jitindar Singh 
37314929b4SCyril Bur void (*mbox_vlog)(int p, const char *fmt, va_list args);
38314929b4SCyril Bur 
39314929b4SCyril Bur void mbox_log_console(int p, const char *fmt, va_list args);
40314929b4SCyril Bur 
41314929b4SCyril Bur __attribute__((format(printf, 2, 3)))
42314929b4SCyril Bur void mbox_log(int p, const char *fmt, ...);
43314929b4SCyril Bur 
44314929b4SCyril Bur uint16_t get_u16(uint8_t *ptr);
45314929b4SCyril Bur 
46314929b4SCyril Bur void put_u16(uint8_t *ptr, uint16_t val);
47314929b4SCyril Bur 
48314929b4SCyril Bur uint32_t get_u32(uint8_t *ptr);
49314929b4SCyril Bur 
50314929b4SCyril Bur void put_u32(uint8_t *ptr, uint32_t val);
51314929b4SCyril Bur 
52e39c9163SSuraj Jitindar Singh static inline uint32_t align_up(uint32_t val, uint32_t size)
53e39c9163SSuraj Jitindar Singh {
54e39c9163SSuraj Jitindar Singh 	return (((val) + (size) - 1) & ~((size) - 1));
55e39c9163SSuraj Jitindar Singh }
56e39c9163SSuraj Jitindar Singh 
57e39c9163SSuraj Jitindar Singh static inline uint32_t align_down(uint32_t val, uint32_t size)
58e39c9163SSuraj Jitindar Singh {
59e39c9163SSuraj Jitindar Singh 	return ((val) & ~(((size) - 1)));
60e39c9163SSuraj Jitindar Singh }
61e39c9163SSuraj Jitindar Singh 
62e39c9163SSuraj Jitindar Singh static inline uint32_t min_u32(uint32_t a, uint32_t b)
63e39c9163SSuraj Jitindar Singh {
64e39c9163SSuraj Jitindar Singh 	if (a <= b) {
65e39c9163SSuraj Jitindar Singh 		return a;
66e39c9163SSuraj Jitindar Singh 	}
67e39c9163SSuraj Jitindar Singh 
68e39c9163SSuraj Jitindar Singh 	return b;
69e39c9163SSuraj Jitindar Singh }
70e39c9163SSuraj Jitindar Singh 
71e39c9163SSuraj Jitindar Singh static inline int log_2(int val)
72e39c9163SSuraj Jitindar Singh {
73e39c9163SSuraj Jitindar Singh 	int ret = 0;
74e39c9163SSuraj Jitindar Singh 
75e39c9163SSuraj Jitindar Singh 	if (val <= 0) {
76e39c9163SSuraj Jitindar Singh 		return -1;
77e39c9163SSuraj Jitindar Singh 	}
78e39c9163SSuraj Jitindar Singh 
79e39c9163SSuraj Jitindar Singh 	while (val >>= 1) {
80e39c9163SSuraj Jitindar Singh 		ret++;
81e39c9163SSuraj Jitindar Singh 	}
82e39c9163SSuraj Jitindar Singh 
83e39c9163SSuraj Jitindar Singh 	return ret;
84e39c9163SSuraj Jitindar Singh }
85e39c9163SSuraj Jitindar Singh 
86*0aff80c0SSuraj Jitindar Singh static inline bool is_power_of_2(unsigned val)
87*0aff80c0SSuraj Jitindar Singh {
88*0aff80c0SSuraj Jitindar Singh 	return __builtin_popcount(val) == 1;
89*0aff80c0SSuraj Jitindar Singh }
90*0aff80c0SSuraj Jitindar Singh 
91314929b4SCyril Bur char *get_dev_mtd(void);
92e39c9163SSuraj Jitindar Singh 
93e39c9163SSuraj Jitindar Singh #endif /* COMMON_H */
94