MCPcopy Create free account
hub / github.com/F-Stack/f-stack / set_bios_selectors

Function set_bios_selectors

freebsd/i386/i386/bios.c:250–300  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

248} bioscall_vector; /* bios jump vector */
249
250void
251set_bios_selectors(struct bios_segments *seg, int flags)
252{
253 struct soft_segment_descriptor ssd = {
254 0, /* segment base address (overwritten) */
255 0, /* length (overwritten) */
256 SDT_MEMERA, /* segment type (overwritten) */
257 0, /* priority level */
258 1, /* descriptor present */
259 0, 0,
260 1, /* descriptor size (overwritten) */
261 0 /* granularity == byte units */
262 };
263 union descriptor *p_gdt;
264
265#ifdef SMP
266 p_gdt = &gdt[PCPU_GET(cpuid) * NGDT];
267#else
268 p_gdt = gdt;
269#endif
270
271 ssd.ssd_base = seg->code32.base;
272 ssd.ssd_limit = seg->code32.limit;
273 ssdtosd(&ssd, &p_gdt[GBIOSCODE32_SEL].sd);
274
275 ssd.ssd_def32 = 0;
276 if (flags & BIOSCODE_FLAG) {
277 ssd.ssd_base = seg->code16.base;
278 ssd.ssd_limit = seg->code16.limit;
279 ssdtosd(&ssd, &p_gdt[GBIOSCODE16_SEL].sd);
280 }
281
282 ssd.ssd_type = SDT_MEMRWA;
283 if (flags & BIOSDATA_FLAG) {
284 ssd.ssd_base = seg->data.base;
285 ssd.ssd_limit = seg->data.limit;
286 ssdtosd(&ssd, &p_gdt[GBIOSDATA_SEL].sd);
287 }
288
289 if (flags & BIOSUTIL_FLAG) {
290 ssd.ssd_base = seg->util.base;
291 ssd.ssd_limit = seg->util.limit;
292 ssdtosd(&ssd, &p_gdt[GBIOSUTIL_SEL].sd);
293 }
294
295 if (flags & BIOSARGS_FLAG) {
296 ssd.ssd_base = seg->args.base;
297 ssd.ssd_limit = seg->args.limit;
298 ssdtosd(&ssd, &p_gdt[GBIOSARGS_SEL].sd);
299 }
300}
301
302extern int vm86pa;
303extern u_long vm86phystk;

Callers 1

bios16Function · 0.85

Calls 1

ssdtosdFunction · 0.85

Tested by

no test coverage detected