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