bootinfo.c (39178) | bootinfo.c (39441) |
---|---|
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 --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * | 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 --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * $Id: bootinfo.c,v 1.2 1998/09/03 02:10:09 msmith Exp $ | 26 * $Id: bootinfo.c,v 1.3 1998/09/14 18:27:05 msmith Exp $ |
27 */ 28 29#include <sys/reboot.h> 30#include <stand.h> 31#include "bootstrap.h" 32 33 34/* --- 80 unchanged lines hidden (view full) --- 115 */ 116vm_offset_t 117bi_copyenv(vm_offset_t addr) 118{ 119 struct env_var *ep; 120 121 /* traverse the environment */ 122 for (ep = environ; ep != NULL; ep = ep->ev_next) { | 27 */ 28 29#include <sys/reboot.h> 30#include <stand.h> 31#include "bootstrap.h" 32 33 34/* --- 80 unchanged lines hidden (view full) --- 115 */ 116vm_offset_t 117bi_copyenv(vm_offset_t addr) 118{ 119 struct env_var *ep; 120 121 /* traverse the environment */ 122 for (ep = environ; ep != NULL; ep = ep->ev_next) { |
123 vpbcopy(ep->ev_name, addr, strlen(ep->ev_name)); | 123 i386_copyin(ep->ev_name, addr, strlen(ep->ev_name)); |
124 addr += strlen(ep->ev_name); | 124 addr += strlen(ep->ev_name); |
125 vpbcopy("=", addr, 1); | 125 i386_copyin("=", addr, 1); |
126 addr++; 127 if (ep->ev_value != NULL) { | 126 addr++; 127 if (ep->ev_value != NULL) { |
128 vpbcopy(ep->ev_value, addr, strlen(ep->ev_value)); | 128 i386_copyin(ep->ev_value, addr, strlen(ep->ev_value)); |
129 addr += strlen(ep->ev_value); 130 } | 129 addr += strlen(ep->ev_value); 130 } |
131 vpbcopy("", addr, 1); | 131 i386_copyin("", addr, 1); |
132 addr++; 133 } | 132 addr++; 133 } |
134 vpbcopy("", addr, 1); | 134 i386_copyin("", addr, 1); |
135 addr++; 136} 137 138/* 139 * Copy module-related data into the load area, where it can be 140 * used as a directory for loaded modules. 141 * 142 * Module data is presented in a self-describing format. Each datum --- 4 unchanged lines hidden (view full) --- 147 * MOD_NAME (variable) module name (string) 148 * MOD_TYPE (variable) module type (string) 149 * MOD_ADDR sizeof(vm_offset_t) module load address 150 * MOD_SIZE sizeof(size_t) module size 151 * MOD_METADATA (variable) type-specific metadata 152 */ 153#define MOD_STR(t, a, s) { \ 154 u_int32_t ident = (t << 16) + strlen(s) + 1; \ | 135 addr++; 136} 137 138/* 139 * Copy module-related data into the load area, where it can be 140 * used as a directory for loaded modules. 141 * 142 * Module data is presented in a self-describing format. Each datum --- 4 unchanged lines hidden (view full) --- 147 * MOD_NAME (variable) module name (string) 148 * MOD_TYPE (variable) module type (string) 149 * MOD_ADDR sizeof(vm_offset_t) module load address 150 * MOD_SIZE sizeof(size_t) module size 151 * MOD_METADATA (variable) type-specific metadata 152 */ 153#define MOD_STR(t, a, s) { \ 154 u_int32_t ident = (t << 16) + strlen(s) + 1; \ |
155 vpbcopy(&ident, a, sizeof(ident)); \ | 155 i386_copyin(&ident, a, sizeof(ident)); \ |
156 a += sizeof(ident); \ | 156 a += sizeof(ident); \ |
157 vpbcopy(s, a, strlen(s) + 1); \ | 157 i386_copyin(s, a, strlen(s) + 1); \ |
158 a += strlen(s) + 1; \ 159} 160 161#define MOD_NAME(a, s) MOD_STR(MODINFO_NAME, a, s) 162#define MOD_TYPE(a, s) MOD_STR(MODINFO_TYPE, a, s) 163 164#define MOD_VAR(t, a, s) { \ 165 u_int32_t ident = (t << 16) + sizeof(s); \ | 158 a += strlen(s) + 1; \ 159} 160 161#define MOD_NAME(a, s) MOD_STR(MODINFO_NAME, a, s) 162#define MOD_TYPE(a, s) MOD_STR(MODINFO_TYPE, a, s) 163 164#define MOD_VAR(t, a, s) { \ 165 u_int32_t ident = (t << 16) + sizeof(s); \ |
166 vpbcopy(&ident, a, sizeof(ident)); \ | 166 i386_copyin(&ident, a, sizeof(ident)); \ |
167 a += sizeof(ident); \ | 167 a += sizeof(ident); \ |
168 vpbcopy(&s, a, sizeof(s)); \ | 168 i386_copyin(&s, a, sizeof(s)); \ |
169 a += sizeof(s); \ 170} 171 172#define MOD_ADDR(a, s) MOD_VAR(MODINFO_ADDR, a, s) 173#define MOD_SIZE(a, s) MOD_VAR(MODINFO_SIZE, a, s) 174 175#define MOD_METADATA(a, mm) { \ 176 u_int32_t ident = ((MODINFO_METADATA | mm->md_type) << 16) + mm->md_size; \ | 169 a += sizeof(s); \ 170} 171 172#define MOD_ADDR(a, s) MOD_VAR(MODINFO_ADDR, a, s) 173#define MOD_SIZE(a, s) MOD_VAR(MODINFO_SIZE, a, s) 174 175#define MOD_METADATA(a, mm) { \ 176 u_int32_t ident = ((MODINFO_METADATA | mm->md_type) << 16) + mm->md_size; \ |
177 vpbcopy(&ident, a, sizeof(ident)); \ | 177 i386_copyin(&ident, a, sizeof(ident)); \ |
178 a += sizeof(ident); \ | 178 a += sizeof(ident); \ |
179 vpbcopy(mm->md_data, a, mm->md_size); \ | 179 i386_copyin(mm->md_data, a, mm->md_size); \ |
180 a += mm->md_size; \ 181} 182 | 180 a += mm->md_size; \ 181} 182 |
183#define MOD_END(a) { \ 184 u_int32_t ident = 0; \ 185 vpbcopy(&ident, a, sizeof(ident)); \ 186 a += sizeof(ident); \ 187 vpbcopy(&ident, a, sizeof(ident)); \ 188 a += sizeof(ident); \ | 183#define MOD_END(a) { \ 184 u_int32_t ident = 0; \ 185 i386_copyin(&ident, a, sizeof(ident)); \ 186 a += sizeof(ident); \ 187 i386_copyin(&ident, a, sizeof(ident)); \ 188 a += sizeof(ident); \ |
189} 190 191vm_offset_t 192bi_copymodules(vm_offset_t addr) 193{ 194 struct loaded_module *mp; 195 struct module_metadata *md; 196 --- 14 unchanged lines hidden --- | 189} 190 191vm_offset_t 192bi_copymodules(vm_offset_t addr) 193{ 194 struct loaded_module *mp; 195 struct module_metadata *md; 196 --- 14 unchanged lines hidden --- |