Deleted Added
full compact
bootinfo64.c (329145) bootinfo64.c (332154)
1/*-
2 * Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: stable/11/stand/userboot/userboot/bootinfo64.c 261504 2014-02-05 04:39:03Z jhb $");
28__FBSDID("$FreeBSD: stable/11/stand/userboot/userboot/bootinfo64.c 332154 2018-04-06 21:37:25Z kevans $");
29
30#include <stand.h>
31#include <sys/param.h>
32#include <sys/reboot.h>
33#include <sys/linker.h>
34#include <i386/include/bootinfo.h>
35#include <machine/cpufunc.h>
36#include <machine/psl.h>

--- 14 unchanged lines hidden (view full) ---

51 * MOD_NAME (variable) module name (string)
52 * MOD_TYPE (variable) module type (string)
53 * MOD_ARGS (variable) module parameters (string)
54 * MOD_ADDR sizeof(vm_offset_t) module load address
55 * MOD_SIZE sizeof(size_t) module size
56 * MOD_METADATA (variable) type-specific metadata
57 */
58#define COPY32(v, a, c) { \
29
30#include <stand.h>
31#include <sys/param.h>
32#include <sys/reboot.h>
33#include <sys/linker.h>
34#include <i386/include/bootinfo.h>
35#include <machine/cpufunc.h>
36#include <machine/psl.h>

--- 14 unchanged lines hidden (view full) ---

51 * MOD_NAME (variable) module name (string)
52 * MOD_TYPE (variable) module type (string)
53 * MOD_ARGS (variable) module parameters (string)
54 * MOD_ADDR sizeof(vm_offset_t) module load address
55 * MOD_SIZE sizeof(size_t) module size
56 * MOD_METADATA (variable) type-specific metadata
57 */
58#define COPY32(v, a, c) { \
59 u_int32_t x = (v); \
59 uint32_t x = (v); \
60 if (c) \
61 CALLBACK(copyin, &x, a, sizeof(x)); \
62 a += sizeof(x); \
63}
64
65#define MOD_STR(t, a, s, c) { \
66 COPY32(t, a, c); \
67 COPY32(strlen(s) + 1, a, c); \
68 if (c) \
69 CALLBACK(copyin, s, a, strlen(s) + 1); \
60 if (c) \
61 CALLBACK(copyin, &x, a, sizeof(x)); \
62 a += sizeof(x); \
63}
64
65#define MOD_STR(t, a, s, c) { \
66 COPY32(t, a, c); \
67 COPY32(strlen(s) + 1, a, c); \
68 if (c) \
69 CALLBACK(copyin, s, a, strlen(s) + 1); \
70 a += roundup(strlen(s) + 1, sizeof(u_int64_t));\
70 a += roundup(strlen(s) + 1, sizeof(uint64_t));\
71}
72
73#define MOD_NAME(a, s, c) MOD_STR(MODINFO_NAME, a, s, c)
74#define MOD_TYPE(a, s, c) MOD_STR(MODINFO_TYPE, a, s, c)
75#define MOD_ARGS(a, s, c) MOD_STR(MODINFO_ARGS, a, s, c)
76
77#define MOD_VAR(t, a, s, c) { \
78 COPY32(t, a, c); \
79 COPY32(sizeof(s), a, c); \
80 if (c) \
81 CALLBACK(copyin, &s, a, sizeof(s)); \
71}
72
73#define MOD_NAME(a, s, c) MOD_STR(MODINFO_NAME, a, s, c)
74#define MOD_TYPE(a, s, c) MOD_STR(MODINFO_TYPE, a, s, c)
75#define MOD_ARGS(a, s, c) MOD_STR(MODINFO_ARGS, a, s, c)
76
77#define MOD_VAR(t, a, s, c) { \
78 COPY32(t, a, c); \
79 COPY32(sizeof(s), a, c); \
80 if (c) \
81 CALLBACK(copyin, &s, a, sizeof(s)); \
82 a += roundup(sizeof(s), sizeof(u_int64_t)); \
82 a += roundup(sizeof(s), sizeof(uint64_t)); \
83}
84
85#define MOD_ADDR(a, s, c) MOD_VAR(MODINFO_ADDR, a, s, c)
86#define MOD_SIZE(a, s, c) MOD_VAR(MODINFO_SIZE, a, s, c)
87
88#define MOD_METADATA(a, mm, c) { \
89 COPY32(MODINFO_METADATA | mm->md_type, a, c); \
90 COPY32(mm->md_size, a, c); \
91 if (c) \
92 CALLBACK(copyin, mm->md_data, a, mm->md_size); \
83}
84
85#define MOD_ADDR(a, s, c) MOD_VAR(MODINFO_ADDR, a, s, c)
86#define MOD_SIZE(a, s, c) MOD_VAR(MODINFO_SIZE, a, s, c)
87
88#define MOD_METADATA(a, mm, c) { \
89 COPY32(MODINFO_METADATA | mm->md_type, a, c); \
90 COPY32(mm->md_size, a, c); \
91 if (c) \
92 CALLBACK(copyin, mm->md_data, a, mm->md_size); \
93 a += roundup(mm->md_size, sizeof(u_int64_t));\
93 a += roundup(mm->md_size, sizeof(uint64_t));\
94}
95
96#define MOD_END(a, c) { \
97 COPY32(MODINFO_END, a, c); \
98 COPY32(0, a, c); \
99}
100
101static vm_offset_t
102bi_copymodules64(vm_offset_t addr)
103{
104 struct preloaded_file *fp;
105 struct file_metadata *md;
106 int c;
94}
95
96#define MOD_END(a, c) { \
97 COPY32(MODINFO_END, a, c); \
98 COPY32(0, a, c); \
99}
100
101static vm_offset_t
102bi_copymodules64(vm_offset_t addr)
103{
104 struct preloaded_file *fp;
105 struct file_metadata *md;
106 int c;
107 u_int64_t v;
107 uint64_t v;
108
109 c = addr != 0;
110 /* start with the first module on the list, should be the kernel */
111 for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) {
112
113 MOD_NAME(addr, fp->f_name, c); /* this field must come first */
114 MOD_TYPE(addr, fp->f_type, c);
115 if (fp->f_args)

--- 64 unchanged lines hidden (view full) ---

180 */
181int
182bi_load64(char *args, vm_offset_t *modulep, vm_offset_t *kernendp)
183{
184 struct preloaded_file *xp, *kfp;
185 struct userboot_devdesc *rootdev;
186 struct file_metadata *md;
187 vm_offset_t addr;
108
109 c = addr != 0;
110 /* start with the first module on the list, should be the kernel */
111 for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) {
112
113 MOD_NAME(addr, fp->f_name, c); /* this field must come first */
114 MOD_TYPE(addr, fp->f_type, c);
115 if (fp->f_args)

--- 64 unchanged lines hidden (view full) ---

180 */
181int
182bi_load64(char *args, vm_offset_t *modulep, vm_offset_t *kernendp)
183{
184 struct preloaded_file *xp, *kfp;
185 struct userboot_devdesc *rootdev;
186 struct file_metadata *md;
187 vm_offset_t addr;
188 u_int64_t kernend;
189 u_int64_t envp;
188 uint64_t kernend;
189 uint64_t envp;
190 vm_offset_t size;
191 char *rootdevname;
192 int howto;
193
194 if (!bi_checkcpu()) {
195 printf("CPU doesn't support long mode\n");
196 return (EINVAL);
197 }

--- 60 unchanged lines hidden ---
190 vm_offset_t size;
191 char *rootdevname;
192 int howto;
193
194 if (!bi_checkcpu()) {
195 printf("CPU doesn't support long mode\n");
196 return (EINVAL);
197 }

--- 60 unchanged lines hidden ---