Date: Thu, 14 Dec 2006 18:47:14 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 111707 for review Message-ID: <200612141847.kBEIlEsn076718@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=111707 Change 111707 by jhb@jhb_mutex on 2006/12/14 18:46:22 IFC @111704. Affected files ... .. //depot/projects/smpng/sys/dev/mfi/mfi.c#14 integrate .. //depot/projects/smpng/sys/dev/mfi/mfi_ioctl.h#4 integrate .. //depot/projects/smpng/sys/dev/mfi/mfireg.h#6 integrate .. //depot/projects/smpng/sys/sun4v/sun4v/hcall.S#4 integrate Differences ... ==== //depot/projects/smpng/sys/dev/mfi/mfi.c#14 (text) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/mfi/mfi.c,v 1.23 2006/11/18 07:33:53 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/mfi/mfi.c,v 1.24 2006/12/14 18:29:08 ambrisko Exp $"); #include "opt_mfi.h" @@ -1586,7 +1586,7 @@ mfi_send_frame(struct mfi_softc *sc, struct mfi_command *cm) { struct mfi_frame_header *hdr; - int tm = MFI_POLL_TIMEOUT_SECS * 1000000; + int tm = MFI_POLL_TIMEOUT_SECS * 1000; hdr = &cm->cm_frame->header; @@ -1622,13 +1622,14 @@ /* This is a polled command, so busy-wait for it to complete. */ while (hdr->cmd_status == 0xff) { DELAY(1000); - tm -= 1000; + tm -= 1; if (tm <= 0) break; } if (hdr->cmd_status == 0xff) { - device_printf(sc->mfi_dev, "Frame %p timed out\n", hdr); + device_printf(sc->mfi_dev, "Frame %p timed out " + "command 0x%X\n", hdr, cm->cm_frame->dcmd.opcode); return (ETIMEDOUT); } @@ -1663,6 +1664,7 @@ { struct mfi_command *cm; struct mfi_abort_frame *abort; + int i = 0; mtx_assert(&sc->mfi_io_lock, MA_OWNED); @@ -1683,8 +1685,9 @@ mfi_mapcmd(sc, cm); mfi_release_command(cm); - while (sc->mfi_aen_cm != NULL) { + while (i < 5 && sc->mfi_aen_cm != NULL) { msleep(&sc->mfi_aen_cm, &sc->mfi_io_lock, 0, "mfiabort", 5 * hz); + i++; } return (0); @@ -1770,9 +1773,8 @@ struct mfi_ioc_packet *ioc; struct mfi_ioc_aen *aen; struct mfi_command *cm = NULL; - struct mfi_dcmd_frame *dcmd; uint32_t context; - uint32_t *sense_ptr; + uint8_t *sense_ptr; uint8_t *data = NULL, *temp; int i; int error; @@ -1812,45 +1814,41 @@ */ context = cm->cm_frame->header.context; - bcopy(ioc->mi_frame.raw, cm->cm_frame, - ioc->mi_sgl_off); /* Linux can do 2 frames ? */ - cm->cm_total_frame_size = ioc->mi_sgl_off; + bcopy(ioc->mfi_frame.raw, cm->cm_frame, + ioc->mfi_sgl_off); /* Linux can do 2 frames ? */ + cm->cm_total_frame_size = ioc->mfi_sgl_off; cm->cm_sg = - (union mfi_sgl *)&cm->cm_frame->bytes[ioc->mi_sgl_off]; + (union mfi_sgl *)&cm->cm_frame->bytes[ioc->mfi_sgl_off]; cm->cm_flags = MFI_CMD_DATAIN | MFI_CMD_DATAOUT | MFI_CMD_POLLED; cm->cm_len = cm->cm_frame->header.data_len; cm->cm_data = data = malloc(cm->cm_len, M_MFIBUF, M_WAITOK | M_ZERO); + if (cm->cm_data == NULL) { + device_printf(sc->mfi_dev, "Malloc failed\n"); + goto out; + } /* restore header context */ cm->cm_frame->header.context = context; - /* ioctl's are dcmd types */ - dcmd = &cm->cm_frame->dcmd; temp = data; - for (i = 0; i < ioc->mi_sge_count; i++) { - error = copyin(ioc->mi_sgl[i].iov_base, + for (i = 0; i < ioc->mfi_sge_count; i++) { + error = copyin(ioc->mfi_sgl[i].iov_base, temp, - ioc->mi_sgl[i].iov_len); + ioc->mfi_sgl[i].iov_len); if (error != 0) { device_printf(sc->mfi_dev, - "Copy in failed"); + "Copy in failed\n"); goto out; } - temp = &temp[ioc->mi_sgl[i].iov_len]; - } - - if (ioc->mi_sense_len) { - sense_ptr = - (void *)&cm->cm_frame->bytes[ioc->mi_sense_off]; - *sense_ptr = cm->cm_sense_busaddr; + temp = &temp[ioc->mfi_sgl[i].iov_len]; } mtx_lock(&sc->mfi_io_lock); if ((error = mfi_mapcmd(sc, cm)) != 0) { device_printf(sc->mfi_dev, - "Controller polled failed"); + "Controller polled failed\n"); mtx_unlock(&sc->mfi_io_lock); goto out; } @@ -1861,36 +1859,34 @@ mtx_unlock(&sc->mfi_io_lock); temp = data; - for (i = 0; i < ioc->mi_sge_count; i++) { + for (i = 0; i < ioc->mfi_sge_count; i++) { error = copyout(temp, - ioc->mi_sgl[i].iov_base, - ioc->mi_sgl[i].iov_len); + ioc->mfi_sgl[i].iov_base, + ioc->mfi_sgl[i].iov_len); if (error != 0) { device_printf(sc->mfi_dev, - "Copy out failed"); + "Copy out failed\n"); goto out; } - temp = &temp[ioc->mi_sgl[i].iov_len]; + temp = &temp[ioc->mfi_sgl[i].iov_len]; } - if (ioc->mi_sense_len) { + if (ioc->mfi_sense_len) { /* copy out sense */ - sense_ptr = (void *) - &ioc->mi_frame.raw[ioc->mi_sense_off]; - temp = 0; - temp += cm->cm_sense_busaddr; - error = copyout(temp, sense_ptr, - ioc->mi_sense_len); + sense_ptr = &((struct mfi_ioc_packet*)arg) + ->mfi_frame.raw[0]; + error = copyout(cm->cm_sense, sense_ptr, + ioc->mfi_sense_len); if (error != 0) { device_printf(sc->mfi_dev, - "Copy out failed"); + "Copy out failed\n"); goto out; } } - ioc->mi_frame.hdr.cmd_status = cm->cm_frame->header.cmd_status; + ioc->mfi_frame.hdr.cmd_status = cm->cm_frame->header.cmd_status; if (cm->cm_frame->header.cmd_status == MFI_STAT_OK) { - switch (dcmd->opcode) { + switch (cm->cm_frame->dcmd.opcode) { case MFI_DCMD_CFG_CLEAR: case MFI_DCMD_CFG_ADD: /* @@ -1974,7 +1970,7 @@ struct mfi_linux_ioc_aen l_aen; struct mfi_command *cm = NULL; struct mfi_aen *mfi_aen_entry; - uint32_t *sense_ptr; + uint8_t *sense_ptr; uint32_t context; uint8_t *data = NULL, *temp; void *temp_convert; @@ -2029,22 +2025,16 @@ l_ioc.lioc_sgl[i].iov_len); if (error != 0) { device_printf(sc->mfi_dev, - "Copy in failed"); + "Copy in failed\n"); goto out; } temp = &temp[l_ioc.lioc_sgl[i].iov_len]; } - if (l_ioc.lioc_sense_len) { - sense_ptr = - (void *)&cm->cm_frame->bytes[l_ioc.lioc_sense_off]; - *sense_ptr = cm->cm_sense_busaddr; - } - mtx_lock(&sc->mfi_io_lock); if ((error = mfi_mapcmd(sc, cm)) != 0) { device_printf(sc->mfi_dev, - "Controller polled failed"); + "Controller polled failed\n"); mtx_unlock(&sc->mfi_io_lock); goto out; } @@ -2063,7 +2053,7 @@ l_ioc.lioc_sgl[i].iov_len); if (error != 0) { device_printf(sc->mfi_dev, - "Copy out failed"); + "Copy out failed\n"); goto out; } temp = &temp[l_ioc.lioc_sgl[i].iov_len]; @@ -2071,15 +2061,13 @@ if (l_ioc.lioc_sense_len) { /* copy out sense */ - sense_ptr = (void *) - &l_ioc.lioc_frame.raw[l_ioc.lioc_sense_off]; - temp = 0; - temp += cm->cm_sense_busaddr; - error = copyout(temp, sense_ptr, + sense_ptr = &((struct mfi_linux_ioc_packet*)arg) + ->lioc_frame.raw[0]; + error = copyout(cm->cm_sense, sense_ptr, l_ioc.lioc_sense_len); if (error != 0) { device_printf(sc->mfi_dev, - "Copy out failed"); + "Copy out failed\n"); goto out; } } @@ -2090,7 +2078,7 @@ 1); if (error != 0) { device_printf(sc->mfi_dev, - "Copy out failed"); + "Copy out failed\n"); goto out; } ==== //depot/projects/smpng/sys/dev/mfi/mfi_ioctl.h#4 (text) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/mfi/mfi_ioctl.h,v 1.3 2006/11/14 16:48:00 ambrisko Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/mfi/mfi_ioctl.h,v 1.4 2006/12/14 18:29:08 ambrisko Exp $"); #if defined(__amd64__) /* Assume amd64 wants 32 bit Linux */ struct iovec32 { @@ -53,18 +53,18 @@ #define MAX_IOCTL_SGE 16 struct mfi_ioc_packet { - uint16_t mi_adapter_no; - uint16_t mi_pad1; - uint32_t mi_sgl_off; - uint32_t mi_sge_count; - uint32_t mi_sense_off; - uint32_t mi_sense_len; + uint16_t mfi_adapter_no; + uint16_t mfi_pad1; + uint32_t mfi_sgl_off; + uint32_t mfi_sge_count; + uint32_t mfi_sense_off; + uint32_t mfi_sense_len; union { uint8_t raw[128]; struct mfi_frame_header hdr; - } mi_frame; + } mfi_frame; - struct iovec mi_sgl[MAX_IOCTL_SGE]; + struct iovec mfi_sgl[MAX_IOCTL_SGE]; } __packed; struct mfi_ioc_aen { ==== //depot/projects/smpng/sys/dev/mfi/mfireg.h#6 (text) ==== @@ -28,7 +28,7 @@ #define _MFIREG_H #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/mfi/mfireg.h,v 1.6 2006/10/16 04:18:38 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/mfi/mfireg.h,v 1.7 2006/12/14 18:29:08 ambrisko Exp $"); /* * MegaRAID SAS MFI firmware definitions @@ -279,7 +279,8 @@ #define MFI_FRAME_SIZE 64 #define MFI_MBOX_SIZE 12 -#define MFI_POLL_TIMEOUT_SECS 10 +/* Firmware flashing can take 40s */ +#define MFI_POLL_TIMEOUT_SECS 50 /* Allow for speedier math calculations */ #define MFI_SECTOR_LEN 512 ==== //depot/projects/smpng/sys/sun4v/sun4v/hcall.S#4 (text+ko) ==== @@ -1,1433 +1,1850 @@ -/* - * CDDL HEADER START +/*- + * Copyright (c) 2006 Kip Macy <kmacy@FreeBSD.org> + * All rights reserved. * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END + * $FreeBSD: src/sys/sun4v/sun4v/hcall.S,v 1.17 2006/11/26 04:37:49 kmacy Exp $ */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ -#pragma ident "@(#)hcall.s 1.10 05/09/28 SMI" - -/* - * Hypervisor calls - */ -#define _ASM - +#include <sys/cdefs.h> + #include <machine/asm.h> -__FBSDID("$FreeBSD: src/sys/sun4v/sun4v/hcall.S,v 1.3 2006/11/08 22:16:05 kmacy Exp $") - #include <machine/asi.h> #include <machine/asmacros.h> -#include <machine/hypervisor_api.h> +#include <machine/hypervisorvar.h> #include <machine/pstate.h> #include "assym.s" +/* + * Section 9 API Versioning + * + */ -#if defined(lint) -#error lint -#endif -#if defined(__lint) -#error __lint -#endif -#if defined(lint) || defined(__lint) +/* + * request and check for a version of the hypervisor apis + * which may be compatible + * + * arg0 api_group (%o0) + * arg1 major_number (%o1) + * arg2 req_minor_number (%o2) + * + * ret0 status (%o0) + * ret1 act_minor_number (%o1) + * + */ +ENTRY(api_set_version) + mov API_SET_VERSION, %o5 + ta CORE_TRAP + retl + stx %o1, [%o3] +END(api_set_version) -/*ARGSUSED*/ -int64_t -hv_cnputchar(uint8_t ch) -{ return (0); } +/* + * retrieve the major and minor number of the most recently + * successfully negotiated API + * + * arg0 api_group (%o0) + * + * ret0 status (%o0) + * ret1 major_number (%o1) + * ret2 major_number (%o2) + * + */ +ENTRY(api_get_version) + mov %o2, %o4 + mov %o1, %o3 + mov API_GET_VERSION, %o5 + ta CORE_TRAP + retl + stx %o1, [%o4] + +END(api_get_version) + +/* + * Section 10 Domain Services + * + */ -/*ARGSUSED*/ -int64_t -hv_cngetchar(uint8_t *ch) -{ return (0); } +/* + * stop all CPUs in the virtual machine domain and place them + * in the stopped state + * + * arg0 exit_code (%o0) + * + */ +ENTRY(hv_mach_exit) + mov MACH_EXIT, %o5 + ta FAST_TRAP + retl + nop +END(hv_mach_exit) + +/* + * copy the most current machine description into buffer + * upon success or EINVAL the service returns the actual + * size of the machine description + * + * arg0 buffer (%o0) + * arg1 length (%o1) + * + * ret0 status (%o0) + * ret1 length (%o1) + * + */ +ENTRY(hv_mach_desc) + mov %o1, %o2 + ldx [%o1], %o1 + mov MACH_DESC, %o5 + ta FAST_TRAP + retl + stx %o1, [%o2] +END(hv_mach_desc) -/*ARGSUSED*/ -uint64_t -hv_tod_get(uint64_t *seconds) -{ return (0); } +/* + * execute a software initiated reset of a virtual machine domain + * + */ +ENTRY(hv_mach_sir) + mov MACH_SIR, %o5 + ta FAST_TRAP + retl + nop +END(hv_mach_sir) + +/* + * report the guests soft state to the hypervisor + * + * arg0 soft_state (%o0) + * arg1 soft_state_desc_ptr (%o1) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mach_set_soft_state) + mov MACH_SET_SOFT_STATE, %o5 + ta FAST_TRAP + retl + nop +END(hv_mach_set_soft_state) + +/* + * retrieve the current value of the guest's software state + * + * arg0 soft_desc_ptr (%o0) + * + * ret0 status (%o0) + * arg1 soft_state (%o1) + * + */ +ENTRY(hv_mach_get_soft_state) + mov %o1, %o2 + mov MACH_SET_SOFT_STATE, %o5 + ta FAST_TRAP + retl + stx %o1, [%o2] +END(hv_mach_get_soft_state) + +/* + * set a watchdog timer, 0 disables, upon success + * time_remaining contains the time previously remaining + * + * arg0 timeout (%o0) + * + * ret0 status (%o0) + * ret1 time_remaining (%o1) + * + */ +ENTRY(hv_mach_watchdog) + mov %o1, %o2 + mov MACH_WATCHDOG, %o5 + ta FAST_TRAP + brnz,pn %o0, 1f + nop + stx %o1, [%o2] +1: retl + nop +END(hv_mach_watchdog) + +/* + * Section 11 CPU Services + * + */ -/*ARGSUSED*/ -uint64_t -hv_tod_set(uint64_t seconds) -{ return (0);} +/* + * start CPU with id cpuid with pc in %pc and real trap base address + * of rtba + * + * arg0 cpuid (%o0) + * arg1 pc (%o1) + * arg2 rtba (%o2) + * arg3 target_arg0 (%o3) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_cpu_start) + mov CPU_START, %o5 + ta FAST_TRAP + retl + nop +END(hv_cpu_start) -/*ARGSUSED*/ -uint64_t -hv_mmu_map_perm_addr(void *vaddr, int ctx, uint64_t tte, int flags) -{ return (0); } +/* + * stop CPU with id cpuid + * + * arg0 cpuid (%o0) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_cpu_stop) + mov CPU_STOP, %o5 + ta FAST_TRAP + retl + nop +END(hv_cpu_stop) -/*ARGSUSED*/ -uint64_t -hv_mmu_unmap_perm_addr(void *vaddr, int ctx, int flags) -{ return (0); } +/* + * set the real trap base address of the local cpu to rtba + * upon success the previous_rtba contains the address of the + * old rtba + * + * arg0 rtba (%o0) + * + * ret0 status (%o0) + * ret1 previous_rtba(%o1) + * + */ +ENTRY(hv_cpu_set_rtba) + mov %o1, %o2 + mov CPU_SET_RTBA, %o5 + ta FAST_TRAP + retl + stx %o1, [%o2] + +END(hv_cpu_set_rtba) -/*ARGSUSED*/ -uint64_t -hv_set_ctx0(uint64_t ntsb_descriptor, uint64_t desc_ra) -{ return (0); } +/* + * return the current real trap base address + * + * ret0 status (%o0) + * ret1 rtba (%o1) + * + */ +ENTRY(hv_cpu_get_rtba) + mov CPU_GET_RTBA, %o5 + ta FAST_TRAP + retl + nop +END(hv_cpu_get_rtba) + +/* + * suspend execution on current cpu + * + * ret0 status (%o0) + * + */ +ENTRY(hv_cpu_yield) + mov CPU_YIELD, %o5 + ta FAST_TRAP + retl + nop +END(hv_cpu_yield) -/*ARGSUSED*/ -uint64_t -hv_set_ctxnon0(uint64_t ntsb_descriptor, uint64_t desc_ra) -{ return (0); } +/* + * configure queue of size nentries to be placed at base raddr + * + * arg0 queue (%o0) + * arg1 base raddr (%o1) + * arg2 nentries (%o2) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_cpu_qconf) + mov CPU_QCONF, %o5 + ta FAST_TRAP + retl + nop +END(hv_cpu_qconf) + +/* + * return configuration of queue queue + * + * arg0 queue (%o0) + * + * ret0 status (%o0) + * ret1 base raddr (%o1) + * ret2 nentries (%o2) + * + */ +ENTRY(hv_cpu_qinfo) +END(hv_cpu_qinfo) + +/* + * send cpu mondo interrupt to cpulist + * + * arg0 ncpus (%o0) + * arg1 cpu list ra (%o1) + * arg2 mondo data ra(%o2) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_cpu_mondo_send) + ldx [PCPU(MONDO_DATA_RA)], %o2 + mov CPU_MONDO_SEND, %o5 + ta FAST_TRAP + retl + membar #Sync +END(hv_cpu_mondo_send) -#ifdef SET_MMU_STATS -/*ARGSUSED*/ -uint64_t -hv_mmu_set_stat_area(uint64_t rstatarea, uint64_t size) -{ return (0); } -#endif /* SET_MMU_STATS */ +/* + * return the hypervisor id for the current cpu + * + * ret0 status (%o0) + * ret1 cpuid (%o1) + * + */ +ENTRY(hv_cpu_myid) + mov %o0, %o2 + mov CPU_MYID, %o5 + ta FAST_TRAP + stx %o1, [%o2] + retl + nop +END(hv_cpu_myid) -/*ARGSUSED*/ -uint64_t -hv_cpu_qconf(int queue, uint64_t paddr, int size) -{ return (0); } +/* + * retrieve the current state of cpu cpuid + * + * arg0 cpuid (%o0) + * + * ret0 status (%o0) + * ret1 state (%o1) + * + */ +ENTRY(hv_cpu_state) + mov %o1, %o2 + mov CPU_STATE, %o5 + ta FAST_TRAP + stx %o1, [%o2] + retl + nop +END(hv_cpu_state) + +/* + * Section 12 MMU Services + * + */ + +/* + * set the tsb(s) for the current cpu for context 0 + * + * arg0 ntsb (%o0) + * arg1 tsbdptr (%o1) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_tsb_ctx0) + mov MMU_TSB_CTX0, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_tsb_ctx0) -/*ARGSUSED*/ -uint64_t -hvio_config_get(devhandle_t dev_hdl, pci_device_t bdf, - pci_config_offset_t off, pci_config_size_t size, pci_cfg_data_t *data_p) -{ return (0); } +/* + * set the tsb(s) for the current cpu for non-zero contexts + * + * arg0 ntsb (%o0) + * arg1 tsbptr (%o1) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_tsb_ctxnon0) + mov MMU_TSB_CTXNON0, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_tsb_ctxnon0) -/*ARGSUSED*/ -uint64_t -hvio_config_put(devhandle_t dev_hdl, pci_device_t bdf, - pci_config_offset_t off, pci_config_size_t size, pci_cfg_data_t data) -{ return (0); } +/* + * demap any page mapping of virtual address vaddr in context ctx + * + * arg0 reserved (%o0) + * arg1 reserved (%o1) + * arg2 vaddr (%o2) + * arg3 ctx (%o3) + * arg4 flags (%o4) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_demap_page) + mov MMU_DEMAP_PAGE, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_demap_page) -/*ARGSUSED*/ -uint64_t -hvio_intr_devino_to_sysino(uint64_t dev_hdl, uint32_t devino, uint64_t *sysino) -{ return (0); } +/* + * demap all non-permanent virtual address mappings in context ctx + * + * arg0 reserved (%o0) + * arg1 reserved (%o1) + * arg2 ctx (%o2) + * arg3 flags (%o3) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_demap_ctx) + mov MMU_DEMAP_CTX, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_demap_ctx) -/*ARGSUSED*/ -uint64_t -hvio_intr_getvalid(uint64_t sysino, int *intr_valid_state) -{ return (0); } +/* + * demap all non-permanent virtual address mappings for the current + * virtual cpu + * + * arg0 reserved (%o0) + * arg1 reserved (%o1) + * arg2 flags (%o2) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_demap_all) + mov MMU_DEMAP_ALL, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_demap_all) -/*ARGSUSED*/ -uint64_t -hvio_intr_setvalid(uint64_t sysino, int intr_valid_state) -{ return (0); } +/* + * create a non-permanent mapping for the calling virtual cpu + * + * arg0 vaddr (%o0) + * arg1 context (%o1) + * arg2 TTE (%o2) + * arg3 flags (%o3) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_map_addr) + mov MMU_MAP_ADDR, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_map_addr) -/*ARGSUSED*/ -uint64_t -hvio_intr_getstate(uint64_t sysino, int *intr_state) -{ return (0); } +/* + * create a permanent mapping for the calling virtual cpu + * + * arg0 vaddr (%o0) + * arg1 reserved (%o1) + * arg2 TTE (%o2) + * arg3 flags (%o3) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_map_perm_addr) + mov MMU_MAP_PERM_ADDR, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_map_perm_addr) -/*ARGSUSED*/ -uint64_t -hvio_intr_setstate(uint64_t sysino, int intr_state) -{ return (0); } +/* + * demap virtual address vaddr in context ctx on current virtual cpu + * + * arg0 vaddr (%o0) + * arg1 ctx (%o1) + * arg2 flags (%o2) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_unmap_addr) + mov MMU_UNMAP_ADDR, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_unmap_addr) -/*ARGSUSED*/ -uint64_t -hvio_intr_gettarget(uint64_t sysino, uint32_t *cpuid) -{ return (0); } +/* + * demap any permanent mapping at virtual address vaddr on current virtual cpu + * + * arg0 vaddr (%o0) + * arg1 reserved (%o1) + * arg2 flags (%o2) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_unmap_perm_addr) + mov MMU_UNMAP_PERM_ADDR, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_unmap_perm_addr) -/*ARGSUSED*/ -uint64_t -hvio_intr_settarget(uint64_t sysino, uint32_t cpuid) -{ return (0); } +/* + * configure the MMU fault status area for the current virtual cpu + * + * arg0 raddr (%o0) + * + * ret0 status (%o0) + * ret1 prev_raddr (%o1) + * + */ +ENTRY(hv_mmu_fault_area_conf) + mov %o1, %o2 + mov MMU_FAULT_AREA_CONF, %o5 + ta FAST_TRAP + retl + stx %o1, [%o2] +END(hv_mmu_fault_area_conf) -/*ARGSUSED*/ -uint64_t -hvio_iommu_map(devhandle_t dev_hdl, tsbid_t tsbid, - pages_t pages, io_attributes_t io_attributes, - io_page_list_t *io_page_list_p, pages_t *pages_mapped) -{ return (0); } +/* + * enable or disable virtual address translation for the current virtual cpu + * + * arg0 enable_flag (%o0) + * arg1 return_target (%o1) + * + * ret0 status (%o0) + * + */ +ENTRY(hv_mmu_enable) + mov MMU_ENABLE, %o5 + ta FAST_TRAP + retl + nop +END(hv_mmu_enable) >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200612141847.kBEIlEsn076718>