1190620Skib/*- 2190620Skib * Copyright (c) 2009 Konstantin Belousov 3190620Skib * All rights reserved. 4190620Skib * 5190620Skib * Redistribution and use in source and binary forms, with or without 6190620Skib * modification, are permitted provided that the following conditions 7190620Skib * are met: 8190620Skib * 1. Redistributions of source code must retain the above copyright 9190620Skib * notice, this list of conditions and the following disclaimer. 10190620Skib * 2. Redistributions in binary form must reproduce the above copyright 11190620Skib * notice, this list of conditions and the following disclaimer in the 12190620Skib * documentation and/or other materials provided with the distribution. 13190620Skib * 14190620Skib * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15190620Skib * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16190620Skib * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17190620Skib * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18190620Skib * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19190620Skib * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20190620Skib * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21190620Skib * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22190620Skib * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23190620Skib * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24190620Skib * SUCH DAMAGE. 25190620Skib */ 26190620Skib 27190620Skib#include <sys/cdefs.h> 28190620Skib__FBSDID("$FreeBSD: releng/11.0/sys/amd64/ia32/ia32_misc.c 220238 2011-04-01 11:16:29Z kib $"); 29190620Skib 30190620Skib#include "opt_compat.h" 31190620Skib 32190620Skib#include <sys/param.h> 33190620Skib#include <sys/mount.h> 34190620Skib#include <sys/proc.h> 35190620Skib#include <sys/socket.h> 36190620Skib#include <sys/sysent.h> 37190620Skib#include <sys/sysproto.h> 38190620Skib#include <sys/systm.h> 39190620Skib#include <sys/uio.h> 40190620Skib 41190620Skib#include <machine/cpu.h> 42190620Skib#include <machine/sysarch.h> 43190620Skib 44190620Skib#include <compat/freebsd32/freebsd32_util.h> 45190620Skib#include <compat/freebsd32/freebsd32.h> 46190620Skib#include <compat/freebsd32/freebsd32_proto.h> 47190620Skib 48190620Skibint 49190620Skibfreebsd32_sysarch(struct thread *td, struct freebsd32_sysarch_args *uap) 50190620Skib{ 51190620Skib struct sysarch_args uap1; 52190620Skib struct i386_ldt_args uapl; 53190620Skib struct i386_ldt_args32 uapl32; 54190620Skib int error; 55190620Skib 56190620Skib if (uap->op == I386_SET_LDT || uap->op == I386_GET_LDT) { 57190620Skib if ((error = copyin(uap->parms, &uapl32, sizeof(uapl32))) != 0) 58190620Skib return (error); 59190620Skib uap1.op = uap->op; 60190620Skib uap1.parms = (char *)&uapl; 61190620Skib uapl.start = uapl32.start; 62190620Skib uapl.descs = (struct user_segment_descriptor *)(uintptr_t) 63190620Skib uapl32.descs; 64190620Skib uapl.num = uapl32.num; 65190620Skib return (sysarch_ldt(td, &uap1, UIO_SYSSPACE)); 66190620Skib } else { 67190620Skib uap1.op = uap->op; 68190620Skib uap1.parms = uap->parms; 69190620Skib return (sysarch(td, &uap1)); 70190620Skib } 71190620Skib} 72220238Skib 73220238Skib#ifdef COMPAT_43 74220238Skibint 75220238Skibofreebsd32_getpagesize(struct thread *td, 76220238Skib struct ofreebsd32_getpagesize_args *uap) 77220238Skib{ 78220238Skib 79220238Skib td->td_retval[0] = IA32_PAGE_SIZE; 80220238Skib return (0); 81220238Skib} 82220238Skib#endif 83