blob: 0e6e3eea87d79feb62f04c5b83db32dc8006aa71 [file] [log] [blame]
Laurent Vivier04e7ca82019-10-26 18:45:45 +02001/*
2 * SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
3 *
4 * Bootinfo tags from linux bootinfo.h and bootinfo-mac.h:
5 * This is an easily parsable and extendable structure containing all
6 * information to be passed from the bootstrap to the kernel
7 *
8 * This structure is copied right after the kernel by the bootstrap
9 * routine.
10 */
11
12#ifndef HW_M68K_BOOTINFO_H
13#define HW_M68K_BOOTINFO_H
Laurent Vivier04e7ca82019-10-26 18:45:45 +020014
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020015#define BOOTINFO0(base, id) \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020016 do { \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020017 stw_p(base, id); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020018 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020019 stw_p(base, sizeof(struct bi_record)); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020020 base += 2; \
21 } while (0)
22
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020023#define BOOTINFO1(base, id, value) \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020024 do { \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020025 stw_p(base, id); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020026 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020027 stw_p(base, sizeof(struct bi_record) + 4); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020028 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020029 stl_p(base, value); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020030 base += 4; \
31 } while (0)
32
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020033#define BOOTINFO2(base, id, value1, value2) \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020034 do { \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020035 stw_p(base, id); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020036 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020037 stw_p(base, sizeof(struct bi_record) + 8); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020038 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020039 stl_p(base, value1); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020040 base += 4; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020041 stl_p(base, value2); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020042 base += 4; \
43 } while (0)
44
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020045#define BOOTINFOSTR(base, id, string) \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020046 do { \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020047 stw_p(base, id); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020048 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020049 stw_p(base, \
Jason A. Donenfeld2cfa9632022-09-26 13:39:00 +020050 (sizeof(struct bi_record) + strlen(string) + \
51 1 /* null termination */ + 3 /* padding */) & ~3); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020052 base += 2; \
Philippe Mathieu-Daudé5f87ddd2023-09-04 18:12:24 +020053 for (unsigned i_ = 0; string[i_]; i_++) { \
54 stb_p(base++, string[i_]); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020055 } \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020056 stb_p(base++, 0); \
57 base = QEMU_ALIGN_PTR_UP(base, 4); \
Laurent Vivier04e7ca82019-10-26 18:45:45 +020058 } while (0)
Jason A. Donenfelda9884652022-06-26 13:18:04 +020059
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020060#define BOOTINFODATA(base, id, data, len) \
Jason A. Donenfelda9884652022-06-26 13:18:04 +020061 do { \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020062 stw_p(base, id); \
Jason A. Donenfelda9884652022-06-26 13:18:04 +020063 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020064 stw_p(base, \
Jason A. Donenfeld2cfa9632022-09-26 13:39:00 +020065 (sizeof(struct bi_record) + len + \
66 2 /* length field */ + 3 /* padding */) & ~3); \
Jason A. Donenfelda9884652022-06-26 13:18:04 +020067 base += 2; \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020068 stw_p(base, len); \
Jason A. Donenfelda9884652022-06-26 13:18:04 +020069 base += 2; \
Philippe Mathieu-Daudé5f87ddd2023-09-04 18:12:24 +020070 for (unsigned i_ = 0; i_ < len; ++i_) { \
71 stb_p(base++, data[i_]); \
Jason A. Donenfelda9884652022-06-26 13:18:04 +020072 } \
Jason A. Donenfeld281ac132022-10-23 21:13:41 +020073 base = QEMU_ALIGN_PTR_UP(base, 4); \
Jason A. Donenfelda9884652022-06-26 13:18:04 +020074 } while (0)
Laurent Vivier04e7ca82019-10-26 18:45:45 +020075#endif