/*
 * SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note
 *
 * Bootinfo tags from linux bootinfo.h and bootinfo-mac.h:
 * This is an easily parsable and extendable structure containing all
 * information to be passed from the bootstrap to the kernel
 *
 * This structure is copied right after the kernel by the bootstrap
 * routine.
 */

#ifndef HW_M68K_BOOTINFO_H
#define HW_M68K_BOOTINFO_H

#define BOOTINFO0(base, id) \
    do { \
        stw_p(base, id); \
        base += 2; \
        stw_p(base, sizeof(struct bi_record)); \
        base += 2; \
    } while (0)

#define BOOTINFO1(base, id, value) \
    do { \
        stw_p(base, id); \
        base += 2; \
        stw_p(base, sizeof(struct bi_record) + 4); \
        base += 2; \
        stl_p(base, value); \
        base += 4; \
    } while (0)

#define BOOTINFO2(base, id, value1, value2) \
    do { \
        stw_p(base, id); \
        base += 2; \
        stw_p(base, sizeof(struct bi_record) + 8); \
        base += 2; \
        stl_p(base, value1); \
        base += 4; \
        stl_p(base, value2); \
        base += 4; \
    } while (0)

#define BOOTINFOSTR(base, id, string) \
    do { \
        stw_p(base, id); \
        base += 2; \
        stw_p(base, \
                 (sizeof(struct bi_record) + strlen(string) + \
                  1 /* null termination */ + 3 /* padding */) & ~3); \
        base += 2; \
        for (unsigned i_ = 0; string[i_]; i_++) { \
            stb_p(base++, string[i_]); \
        } \
        stb_p(base++, 0); \
        base = QEMU_ALIGN_PTR_UP(base, 4); \
    } while (0)

#define BOOTINFODATA(base, id, data, len) \
    do { \
        stw_p(base, id); \
        base += 2; \
        stw_p(base, \
                 (sizeof(struct bi_record) + len + \
                  2 /* length field */ + 3 /* padding */) & ~3); \
        base += 2; \
        stw_p(base, len); \
        base += 2; \
        for (unsigned i_ = 0; i_ < len; ++i_) { \
            stb_p(base++, data[i_]); \
        } \
        base = QEMU_ALIGN_PTR_UP(base, 4); \
    } while (0)
#endif
