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