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