843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER START
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * The contents of this file are subject to the terms of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Common Development and Distribution License (the "License").
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You may not use this file except in compliance with the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
843e19887f64dde75055cf8842fc4db2171eff45johnlev * or http://www.opensolaris.org/os/licensing.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * See the License for the specific language governing permissions
843e19887f64dde75055cf8842fc4db2171eff45johnlev * and limitations under the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * When distributing Covered Code, include this CDDL HEADER in each
843e19887f64dde75055cf8842fc4db2171eff45johnlev * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * If applicable, add the following below this CDDL HEADER, with the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * fields enclosed by brackets "[]" replaced with your own identifying
843e19887f64dde75055cf8842fc4db2171eff45johnlev * information: Portions Copyright [yyyy] [name of copyright owner]
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER END
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Use is subject to license terms.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/asm_linkage.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/asm_misc.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#if defined(__lint)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include "dboot_asm.h"
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/* ARGSUSED */
843e19887f64dde75055cf8842fc4db2171eff45johnlevuint32_t
843e19887f64dde75055cf8842fc4db2171eff45johnlevget_cpuid_edx(uint32_t *eax)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{ return (0); }
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/* ARGSUSED */
843e19887f64dde75055cf8842fc4db2171eff45johnlevvoid
843e19887f64dde75055cf8842fc4db2171eff45johnlevoutb(int port, uint8_t value)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{}
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/* ARGSUSED */
843e19887f64dde75055cf8842fc4db2171eff45johnlevuint8_t
843e19887f64dde75055cf8842fc4db2171eff45johnlevinb(int port)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{ return (0); }
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#else /* __lint */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#if defined(__amd64)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * do a cpuid instruction, returning the eax/edx values
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * uint32_t get_cpuid_edx(uint32_t *eax)
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(get_cpuid_edx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushq %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl (%rdi), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev cpuid
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %eax, (%rdi)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %edx, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev popq %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(get_cpuid_edx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * void outb(int port, uint8_t value)
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY(outb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %di, %dx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movb %sil, %al
843e19887f64dde75055cf8842fc4db2171eff45johnlev outb (%dx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(outb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * uint8_t inb(int port)
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY(inb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev xorl %eax, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %di, %dx
843e19887f64dde75055cf8842fc4db2171eff45johnlev inb (%dx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(inb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski ENTRY(htonl)
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski movl %edi, %eax
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski bswap %eax
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski ret
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski SET_SIZE(htonl)
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski
843e19887f64dde75055cf8842fc4db2171eff45johnlev#elif defined(__i386)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev .code32
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * do a cpuid instruction, returning the eax/edx values
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * uint32_t get_cpuid_edx(uint32_t *eax)
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(get_cpuid_edx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %ecx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl (%ecx), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev cpuid
843e19887f64dde75055cf8842fc4db2171eff45johnlev popl %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %ecx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %eax, (%ecx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %edx, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(get_cpuid_edx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * void outb(int port, uint8_t value)
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(outb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %edx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 8(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev outb (%dx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(outb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * uint8_t inb(int port)
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(inb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %edx
843e19887f64dde75055cf8842fc4db2171eff45johnlev inb (%dx)
843e19887f64dde75055cf8842fc4db2171eff45johnlev andl $0xff, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(inb)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski ENTRY(htonl)
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski movl 4(%esp), %eax
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski bswap %eax
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski ret
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski SET_SIZE(htonl)
e65d07ee00fa1bfa9e59aee139779af01e5bb432Keith Wesolowski
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif /* __i386 */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif /* __lint */