1*4fe996c2SAndrew Jeffery // SPDX-License-Identifier: Apache-2.0
2*4fe996c2SAndrew Jeffery // Copyright (C) 2018 IBM Corp.
3314929b4SCyril Bur #define _GNU_SOURCE
4314929b4SCyril Bur #include <stdarg.h>
5314929b4SCyril Bur #include <stdbool.h>
6314929b4SCyril Bur #include <stdio.h>
7314929b4SCyril Bur #include <stdint.h>
8314929b4SCyril Bur #include <string.h>
9314929b4SCyril Bur #include <sys/types.h>
10314929b4SCyril Bur #include <syslog.h>
11314929b4SCyril Bur #include <time.h>
12314929b4SCyril Bur
13314929b4SCyril Bur #include "common.h"
14314929b4SCyril Bur
1590b92fe4SRatan Gupta void (*mbox_vlog)(int p, const char *fmt, va_list args);
1690b92fe4SRatan Gupta
1790b92fe4SRatan Gupta enum verbose verbosity;
1890b92fe4SRatan Gupta
mbox_log_console(int p,const char * fmt,va_list args)19314929b4SCyril Bur void mbox_log_console(int p, const char *fmt, va_list args)
20314929b4SCyril Bur {
21314929b4SCyril Bur struct timespec time;
22314929b4SCyril Bur FILE *s = (p < LOG_WARNING) ? stdout : stderr;
23314929b4SCyril Bur
24314929b4SCyril Bur clock_gettime(CLOCK_REALTIME, &time);
25314929b4SCyril Bur
26314929b4SCyril Bur fprintf(s, "[%s %ld.%.9ld] ", PREFIX, time.tv_sec, time.tv_nsec);
27314929b4SCyril Bur
28314929b4SCyril Bur vfprintf(s, fmt, args);
29314929b4SCyril Bur }
30314929b4SCyril Bur
31314929b4SCyril Bur __attribute__((format(printf, 2, 3)))
mbox_log(int p,const char * fmt,...)32314929b4SCyril Bur void mbox_log(int p, const char *fmt, ...)
33314929b4SCyril Bur {
3444ac078bSAndrew Jeffery static bool warned = false;
35314929b4SCyril Bur va_list args;
36314929b4SCyril Bur
3744ac078bSAndrew Jeffery if (!mbox_vlog) {
3844ac078bSAndrew Jeffery if (!warned) {
3944ac078bSAndrew Jeffery fprintf(stderr, "Logging backend not configured, "
4044ac078bSAndrew Jeffery "log output disabled\n");
4144ac078bSAndrew Jeffery warned = true;
4244ac078bSAndrew Jeffery }
4344ac078bSAndrew Jeffery
4444ac078bSAndrew Jeffery return;
4544ac078bSAndrew Jeffery }
4644ac078bSAndrew Jeffery
47314929b4SCyril Bur va_start(args, fmt);
48314929b4SCyril Bur mbox_vlog(p, fmt, args);
49314929b4SCyril Bur va_end(args);
50314929b4SCyril Bur }
51314929b4SCyril Bur
get_u16(uint8_t * ptr)52314929b4SCyril Bur uint16_t get_u16(uint8_t *ptr)
53314929b4SCyril Bur {
547a3814b0SAndrew Jeffery return le16toh(*(uint16_t *)ptr);
55314929b4SCyril Bur }
56314929b4SCyril Bur
put_u16(uint8_t * ptr,uint16_t val)57314929b4SCyril Bur void put_u16(uint8_t *ptr, uint16_t val)
58314929b4SCyril Bur {
597a3814b0SAndrew Jeffery val = htole16(val);
60314929b4SCyril Bur memcpy(ptr, &val, sizeof(val));
61314929b4SCyril Bur }
62314929b4SCyril Bur
get_u32(uint8_t * ptr)63314929b4SCyril Bur uint32_t get_u32(uint8_t *ptr)
64314929b4SCyril Bur {
657a3814b0SAndrew Jeffery return le32toh(*(uint32_t *)ptr);
66314929b4SCyril Bur }
67314929b4SCyril Bur
put_u32(uint8_t * ptr,uint32_t val)68314929b4SCyril Bur void put_u32(uint8_t *ptr, uint32_t val)
69314929b4SCyril Bur {
707a3814b0SAndrew Jeffery val = htole32(val);
71314929b4SCyril Bur memcpy(ptr, &val, sizeof(val));
72314929b4SCyril Bur }
73314929b4SCyril Bur
74