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 28*90b92fe4SRatan Gupta enum verbose { 29314929b4SCyril Bur MBOX_LOG_NONE = 0, 3028519598SSuraj Jitindar Singh MBOX_LOG_INFO = 1, 31314929b4SCyril Bur MBOX_LOG_DEBUG = 2 32*90b92fe4SRatan Gupta }; 33*90b92fe4SRatan Gupta 34*90b92fe4SRatan Gupta extern enum verbose verbosity; 35314929b4SCyril Bur 3628519598SSuraj Jitindar Singh /* Error Messages */ 3728519598SSuraj Jitindar Singh #define MSG_ERR(f_, ...) mbox_log(LOG_ERR, f_, ##__VA_ARGS__) 3828519598SSuraj Jitindar Singh /* Informational Messages */ 3928519598SSuraj Jitindar Singh #define MSG_INFO(f_, ...) do { if (verbosity >= MBOX_LOG_INFO) { \ 40e39c9163SSuraj Jitindar Singh mbox_log(LOG_INFO, f_, ##__VA_ARGS__); \ 41e39c9163SSuraj Jitindar Singh } } while (0) 4228519598SSuraj Jitindar Singh /* Debug Messages */ 4328519598SSuraj Jitindar Singh #define MSG_DBG(f_, ...) do { if (verbosity >= MBOX_LOG_DEBUG) { \ 4428519598SSuraj Jitindar Singh mbox_log(LOG_DEBUG, f_, ##__VA_ARGS__); \ 45e39c9163SSuraj Jitindar Singh } } while(0) 46e39c9163SSuraj Jitindar Singh 47*90b92fe4SRatan Gupta extern void (*mbox_vlog)(int p, const char *fmt, va_list args); 48314929b4SCyril Bur 49314929b4SCyril Bur void mbox_log_console(int p, const char *fmt, va_list args); 50314929b4SCyril Bur 51314929b4SCyril Bur __attribute__((format(printf, 2, 3))) 52314929b4SCyril Bur void mbox_log(int p, const char *fmt, ...); 53314929b4SCyril Bur 54314929b4SCyril Bur uint16_t get_u16(uint8_t *ptr); 55314929b4SCyril Bur 56314929b4SCyril Bur void put_u16(uint8_t *ptr, uint16_t val); 57314929b4SCyril Bur 58314929b4SCyril Bur uint32_t get_u32(uint8_t *ptr); 59314929b4SCyril Bur 60314929b4SCyril Bur void put_u32(uint8_t *ptr, uint32_t val); 61314929b4SCyril Bur 62e39c9163SSuraj Jitindar Singh static inline uint32_t align_up(uint32_t val, uint32_t size) 63e39c9163SSuraj Jitindar Singh { 64e39c9163SSuraj Jitindar Singh return (((val) + (size) - 1) & ~((size) - 1)); 65e39c9163SSuraj Jitindar Singh } 66e39c9163SSuraj Jitindar Singh 67e39c9163SSuraj Jitindar Singh static inline uint32_t align_down(uint32_t val, uint32_t size) 68e39c9163SSuraj Jitindar Singh { 69e39c9163SSuraj Jitindar Singh return ((val) & ~(((size) - 1))); 70e39c9163SSuraj Jitindar Singh } 71e39c9163SSuraj Jitindar Singh 72e39c9163SSuraj Jitindar Singh static inline uint32_t min_u32(uint32_t a, uint32_t b) 73e39c9163SSuraj Jitindar Singh { 74e39c9163SSuraj Jitindar Singh if (a <= b) { 75e39c9163SSuraj Jitindar Singh return a; 76e39c9163SSuraj Jitindar Singh } 77e39c9163SSuraj Jitindar Singh 78e39c9163SSuraj Jitindar Singh return b; 79e39c9163SSuraj Jitindar Singh } 80e39c9163SSuraj Jitindar Singh 81e39c9163SSuraj Jitindar Singh static inline int log_2(int val) 82e39c9163SSuraj Jitindar Singh { 83e39c9163SSuraj Jitindar Singh int ret = 0; 84e39c9163SSuraj Jitindar Singh 85e39c9163SSuraj Jitindar Singh if (val <= 0) { 86e39c9163SSuraj Jitindar Singh return -1; 87e39c9163SSuraj Jitindar Singh } 88e39c9163SSuraj Jitindar Singh 89e39c9163SSuraj Jitindar Singh while (val >>= 1) { 90e39c9163SSuraj Jitindar Singh ret++; 91e39c9163SSuraj Jitindar Singh } 92e39c9163SSuraj Jitindar Singh 93e39c9163SSuraj Jitindar Singh return ret; 94e39c9163SSuraj Jitindar Singh } 95e39c9163SSuraj Jitindar Singh 960aff80c0SSuraj Jitindar Singh static inline bool is_power_of_2(unsigned val) 970aff80c0SSuraj Jitindar Singh { 980aff80c0SSuraj Jitindar Singh return __builtin_popcount(val) == 1; 990aff80c0SSuraj Jitindar Singh } 1000aff80c0SSuraj Jitindar Singh 101314929b4SCyril Bur char *get_dev_mtd(void); 102e39c9163SSuraj Jitindar Singh 103e39c9163SSuraj Jitindar Singh #endif /* COMMON_H */ 104