svn commit: r209708 - in user/nwhitehorn/ps3: conf powerpc/ps3
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Mon Jul 5 01:14:32 UTC 2010
Author: nwhitehorn
Date: Mon Jul 5 01:14:32 2010
New Revision: 209708
URL: http://svn.freebsd.org/changeset/base/209708
Log:
Add support for the LV1 hypervisor MMU routines. This gets the PS3 to boot
to the point of complaining about the lack of a PIC driver (and to print
cpu0: IBM Cell Broadband Engine revision 0.0 to the console on the way).
Added:
user/nwhitehorn/ps3/powerpc/ps3/mmu_ps3.c
Modified:
user/nwhitehorn/ps3/conf/files.powerpc64
user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c
user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.S
user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.h
user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.master
Modified: user/nwhitehorn/ps3/conf/files.powerpc64
==============================================================================
--- user/nwhitehorn/ps3/conf/files.powerpc64 Mon Jul 5 01:12:41 2010 (r209707)
+++ user/nwhitehorn/ps3/conf/files.powerpc64 Mon Jul 5 01:14:32 2010 (r209708)
@@ -137,8 +137,9 @@ powerpc/powerpc/suswintr.c standard
powerpc/powerpc/syncicache.c standard
powerpc/powerpc/sys_machdep.c standard
powerpc/powerpc/uio_machdep.c standard
+powerpc/ps3/mmu_ps3.c optional ps3
powerpc/ps3/platform_ps3.c optional ps3
-powerpc/ps3/ps3_syscons.c optional ps3
+powerpc/ps3/ps3_syscons.c optional ps3 sc
powerpc/ps3/ps3-hvcall.S optional ps3
compat/freebsd32/freebsd32_ioctl.c optional compat_freebsd32
Added: user/nwhitehorn/ps3/powerpc/ps3/mmu_ps3.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/nwhitehorn/ps3/powerpc/ps3/mmu_ps3.c Mon Jul 5 01:14:32 2010 (r209708)
@@ -0,0 +1,333 @@
+/*-
+ * Copyright (C) 2010 Nathan Whitehorn
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 TOOLS GMBH 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.
+ */
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/ktr.h>
+#include <sys/lock.h>
+#include <sys/msgbuf.h>
+#include <sys/mutex.h>
+#include <sys/proc.h>
+#include <sys/sysctl.h>
+#include <sys/systm.h>
+#include <sys/vmmeter.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/vm_kern.h>
+#include <vm/vm_page.h>
+#include <vm/vm_map.h>
+#include <vm/vm_object.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_pageout.h>
+#include <vm/vm_pager.h>
+#include <vm/uma.h>
+
+#include <powerpc/aim/mmu_oea64.h>
+
+#include "mmu_if.h"
+#include "ps3-hvcall.h"
+
+#define VSID_HASH_MASK 0x0000007fffffffffULL
+
+extern int ps3fb_remap(void);
+
+static uint64_t mps3_vas_id;
+
+/*
+ * Kernel MMU interface
+ */
+
+static void mps3_bootstrap(mmu_t mmup, vm_offset_t kernelstart,
+ vm_offset_t kernelend);
+static void mps3_cpu_bootstrap(mmu_t mmup, int ap);
+static void mps3_pte_synch(struct lpte *pt, struct lpte *pvo_pt);
+static void mps3_pte_clear(struct lpte *pt, struct lpte *pvo_pt,
+ uint64_t vpn, u_int64_t ptebit);
+static void mps3_pte_unset(struct lpte *pt, struct lpte *pvo_pt,
+ uint64_t vpn);
+static void mps3_pte_change(struct lpte *pt, struct lpte *pvo_pt,
+ uint64_t vpn);
+static int mps3_pte_insert(u_int ptegidx, struct lpte *pvo_pt);
+static struct lpte *mps3_pvo_to_pte(const struct pvo_entry *pvo);
+
+
+static mmu_method_t mps3_methods[] = {
+ MMUMETHOD(mmu_change_wiring, moea64_change_wiring),
+ MMUMETHOD(mmu_clear_modify, moea64_clear_modify),
+ MMUMETHOD(mmu_clear_reference, moea64_clear_reference),
+ MMUMETHOD(mmu_copy_page, moea64_copy_page),
+ MMUMETHOD(mmu_enter, moea64_enter),
+ MMUMETHOD(mmu_enter_object, moea64_enter_object),
+ MMUMETHOD(mmu_enter_quick, moea64_enter_quick),
+ MMUMETHOD(mmu_extract, moea64_extract),
+ MMUMETHOD(mmu_extract_and_hold, moea64_extract_and_hold),
+ MMUMETHOD(mmu_init, moea64_init),
+ MMUMETHOD(mmu_is_modified, moea64_is_modified),
+ MMUMETHOD(mmu_is_referenced, moea64_is_referenced),
+ MMUMETHOD(mmu_ts_referenced, moea64_ts_referenced),
+ MMUMETHOD(mmu_map, moea64_map),
+ MMUMETHOD(mmu_page_exists_quick,moea64_page_exists_quick),
+ MMUMETHOD(mmu_page_wired_mappings,moea64_page_wired_mappings),
+ MMUMETHOD(mmu_pinit, moea64_pinit),
+ MMUMETHOD(mmu_pinit0, moea64_pinit0),
+ MMUMETHOD(mmu_protect, moea64_protect),
+ MMUMETHOD(mmu_qenter, moea64_qenter),
+ MMUMETHOD(mmu_qremove, moea64_qremove),
+ MMUMETHOD(mmu_release, moea64_release),
+ MMUMETHOD(mmu_remove, moea64_remove),
+ MMUMETHOD(mmu_remove_all, moea64_remove_all),
+ MMUMETHOD(mmu_remove_write, moea64_remove_write),
+ MMUMETHOD(mmu_sync_icache, moea64_sync_icache),
+ MMUMETHOD(mmu_zero_page, moea64_zero_page),
+ MMUMETHOD(mmu_zero_page_area, moea64_zero_page_area),
+ MMUMETHOD(mmu_zero_page_idle, moea64_zero_page_idle),
+ MMUMETHOD(mmu_activate, moea64_activate),
+ MMUMETHOD(mmu_deactivate, moea64_deactivate),
+
+ /* Internal interfaces */
+ MMUMETHOD(mmu_bootstrap, mps3_bootstrap),
+ MMUMETHOD(mmu_cpu_bootstrap, mps3_cpu_bootstrap),
+ MMUMETHOD(mmu_mapdev, moea64_mapdev),
+ MMUMETHOD(mmu_unmapdev, moea64_unmapdev),
+ MMUMETHOD(mmu_kextract, moea64_kextract),
+ MMUMETHOD(mmu_kenter, moea64_kenter),
+ MMUMETHOD(mmu_dev_direct_mapped,moea64_dev_direct_mapped),
+
+ { 0, 0 }
+};
+
+static mmu_def_t ps3_mmu = {
+ "mmu_ps3",
+ mps3_methods,
+ 0
+};
+MMU_DEF(ps3_mmu);
+
+static void
+mps3_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend)
+{
+ uint64_t final_pteg_count;
+
+ /*
+ * Set our page table override functions
+ */
+ moea64_pte_synch_hook = mps3_pte_synch;
+ moea64_pte_clear_hook = mps3_pte_clear;
+ moea64_pte_unset_hook = mps3_pte_unset;
+ moea64_pte_change_hook = mps3_pte_change;
+ moea64_pte_insert_hook = mps3_pte_insert;
+ moea64_pvo_to_pte_hook = mps3_pvo_to_pte;
+
+ moea64_early_bootstrap(mmup, kernelstart, kernelend);
+
+ lv1_construct_virtual_address_space(
+ 20 /* log_2(moea64_pteg_count) */, 2 /* n page sizes */,
+ (24UL << 56) | (16UL << 48) /* page sizes 16 MB + 64 KB */,
+ &mps3_vas_id, &final_pteg_count
+ );
+
+ moea64_pteg_count = final_pteg_count / sizeof(struct lpteg);
+
+ moea64_late_bootstrap(mmup, kernelstart, kernelend);
+}
+
+static void
+mps3_cpu_bootstrap(mmu_t mmup, int ap)
+{
+ struct slb *slb = PCPU_GET(slb);
+ register_t seg0;
+ int i;
+
+ mtmsr(mfmsr() & ~PSL_DR & ~PSL_IR);
+
+ /*
+ * Destroy the loader's address space if we are coming up for
+ * the first time, and redo the FB mapping so we can continue
+ * having a console.
+ */
+
+ if (!ap)
+ lv1_destruct_virtual_address_space(0);
+
+ lv1_select_virtual_address_space(mps3_vas_id);
+ mps3_vas_id = 0; /* Now this is the current mapping */
+
+ if (!ap)
+ ps3fb_remap();
+
+ /*
+ * Install kernel SLB entries
+ */
+
+ __asm __volatile ("slbia");
+ __asm __volatile ("slbmfee %0,%1; slbie %0;" : "=r"(seg0) : "r"(0));
+ for (i = 0; i < 64; i++) {
+ if (!(slb[i].slbe & SLBE_VALID))
+ continue;
+
+ __asm __volatile ("slbmte %0, %1" ::
+ "r"(slb[i].slbv), "r"(slb[i].slbe));
+ }
+}
+
+static void
+mps3_pte_synch(struct lpte *pt, struct lpte *pvo_pt)
+{
+ uint64_t halfbucket[4], rcbits;
+ uint64_t slot = (uint64_t)(pt)-1;
+
+ lv1_read_htab_entries(mps3_vas_id, slot & ~0x3UL, &halfbucket[0],
+ &halfbucket[1], &halfbucket[2], &halfbucket[3], &rcbits);
+
+ pvo_pt->pte_lo |= ((rcbits >> (slot & 0x3)) & 0x3) << 7;
+}
+
+static void
+mps3_pte_clear(struct lpte *pt, struct lpte *pvo_pt, uint64_t vpn,
+ u_int64_t ptebit)
+{
+ uint64_t slot = (uint64_t)(pt)-1;
+
+ lv1_write_htab_entry(mps3_vas_id, slot, pvo_pt->pte_hi,
+ pvo_pt->pte_lo & ~ptebit);
+}
+
+static void
+mps3_pte_unset(struct lpte *pt, struct lpte *pvo_pt, uint64_t vpn)
+{
+ uint64_t slot = (uint64_t)(pt)-1;
+
+ pvo_pt->pte_hi &= ~LPTE_VALID;
+ lv1_write_htab_entry(mps3_vas_id, slot, 0, 0);
+ moea64_pte_valid--;
+}
+
+static void
+mps3_pte_change(struct lpte *pt, struct lpte *pvo_pt, uint64_t vpn)
+{
+ uint64_t slot = (uint64_t)(pt)-1;
+
+ pvo_pt->pte_hi |= LPTE_VALID;
+ lv1_write_htab_entry(mps3_vas_id, slot & ~0x3UL, pvo_pt->pte_hi,
+ pvo_pt->pte_lo);
+}
+
+static int
+mps3_pte_insert(u_int ptegidx, struct lpte *pvo_pt)
+{
+ int result;
+ struct lpte evicted;
+ struct pvo_entry *pvo;
+ uint64_t index;
+
+ pvo_pt->pte_hi |= LPTE_VALID;
+ pvo_pt->pte_hi &= ~LPTE_HID;
+ evicted.pte_hi = 0;
+ result = lv1_insert_htab_entry(mps3_vas_id, ptegidx << 3,
+ pvo_pt->pte_hi, pvo_pt->pte_lo, LPTE_LOCKED | LPTE_WIRED, 0,
+ &index, &evicted.pte_hi, &evicted.pte_lo);
+
+ if (result != 0) {
+ /* No freeable slots in either PTEG? We're hosed. */
+ mtmsr(mfmsr() | PSL_DR); panic("moea64_pte_insert: overflow");
+ return (-1);
+ }
+
+ /*
+ * See where we ended up.
+ */
+ if (index >> 3 != ptegidx)
+ pvo_pt->pte_hi |= LPTE_HID;
+
+ moea64_pte_valid++;
+
+ if (!evicted.pte_hi)
+ return (index & 0x7);
+
+ /*
+ * Synchronize the sacrifice PTE with its PVO, then mark both
+ * invalid. The PVO will be reused when/if the VM system comes
+ * here after a fault.
+ */
+
+ if (evicted.pte_hi & LPTE_HID)
+ ptegidx ^= moea64_pteg_mask; /* PTEs indexed by primary */
+
+ LIST_FOREACH(pvo, &moea64_pvo_table[ptegidx], pvo_olink) {
+ if (pvo->pvo_pte.lpte.pte_hi == evicted.pte_hi) {
+ KASSERT(pvo->pvo_pte.lpte.pte_hi & LPTE_VALID,
+ ("Invalid PVO for valid PTE!"));
+ pvo->pvo_pte.lpte.pte_hi &= ~LPTE_VALID;
+ pvo->pvo_pte.lpte.pte_lo |=
+ evicted.pte_lo & (LPTE_REF | LPTE_CHG);
+ PVO_PTEGIDX_CLR(pvo);
+ moea64_pte_valid--;
+ moea64_pte_overflow++;
+ break;
+ }
+ }
+
+ return (index & 0x7);
+}
+
+static __inline u_int
+va_to_pteg(uint64_t vsid, vm_offset_t addr, int large)
+{
+ uint64_t hash;
+ int shift;
+
+ shift = large ? moea64_large_page_shift : ADDR_PIDX_SHFT;
+ hash = (vsid & VSID_HASH_MASK) ^ (((uint64_t)addr & ADDR_PIDX) >>
+ shift);
+ return (hash & moea64_pteg_mask);
+}
+
+static struct lpte *
+mps3_pvo_to_pte(const struct pvo_entry *pvo)
+{
+ uint64_t slot, vsid;
+ u_int ptegidx;
+
+ /* If the PTEG index is not set, then there is no page table entry */
+ if (!PVO_PTEGIDX_ISSET(pvo))
+ return (NULL);
+
+ vsid = PVO_VSID(pvo);
+ ptegidx = va_to_pteg(vsid, PVO_VADDR(pvo), pvo->pvo_vaddr & PVO_LARGE);
+
+ /*
+ * We can find the actual pte entry without searching by grabbing
+ * the PTEG index from 3 unused bits in pvo_vaddr and by
+ * noticing the HID bit.
+ */
+ if (pvo->pvo_pte.lpte.pte_hi & LPTE_HID)
+ ptegidx ^= moea64_pteg_mask;
+
+ slot = (ptegidx << 3) | PVO_PTEGIDX_GET(pvo);
+
+ return ((struct lpte *)(slot + 1));
+}
+
Modified: user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c
==============================================================================
--- user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c Mon Jul 5 01:12:41 2010 (r209707)
+++ user/nwhitehorn/ps3/powerpc/ps3/platform_ps3.c Mon Jul 5 01:14:32 2010 (r209708)
@@ -36,12 +36,16 @@ __FBSDID("$FreeBSD: user/nwhitehorn/ps3/
#include <sys/reboot.h>
#include <sys/smp.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+
#include <machine/bootinfo.h>
#include <machine/bus.h>
#include <machine/cpu.h>
#include <machine/hid.h>
#include <machine/platform.h>
#include <machine/platformvar.h>
+#include <machine/pmap.h>
#include <machine/smp.h>
#include <machine/spr.h>
#include <machine/vmparam.h>
@@ -107,7 +111,8 @@ ps3_probe(platform_t plat)
static int
ps3_attach(platform_t plat)
{
- boothowto |= RB_VERBOSE;
+
+ pmap_mmu_install("mmu_ps3", BUS_PROBE_SPECIFIC);
return (0);
}
Modified: user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.S
==============================================================================
--- user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.S Mon Jul 5 01:12:41 2010 (r209707)
+++ user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.S Mon Jul 5 01:14:32 2010 (r209708)
@@ -2,11 +2,6 @@
#define hc .long 0x44000022
-/*
- * Playstation 3 LV1 hypercall interface
- *
- * $FreeBSD: user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.master 209631 2010-07-01 15:23:29Z nwhitehorn $
- */
ASENTRY(lv1_allocate_memory)
mflr %r0
std %r0,16(%r1)
@@ -321,15 +316,15 @@ ASENTRY(lv1_construct_logical_spe)
std %r0,16(%r1)
stdu %r1,-96(%r1)
std %r10,48(%r1)
- ld %r11,152(%r1)
+ ld %r11,208(%r1)
std %r11,56(%r1)
- ld %r11,160(%r1)
+ ld %r11,216(%r1)
std %r11,64(%r1)
- ld %r11,168(%r1)
+ ld %r11,224(%r1)
std %r11,72(%r1)
- ld %r11,176(%r1)
+ ld %r11,232(%r1)
std %r11,80(%r1)
- ld %r11,184(%r1)
+ ld %r11,240(%r1)
std %r11,88(%r1)
li %r11,57
hc
@@ -477,6 +472,33 @@ ASENTRY(lv1_get_repository_node_value)
mtlr %r0
blr
+ASENTRY(lv1_read_htab_entries)
+ mflr %r0
+ std %r0,16(%r1)
+ stdu %r1,-88(%r1)
+ std %r5,48(%r1)
+ std %r6,56(%r1)
+ std %r7,64(%r1)
+ std %r8,72(%r1)
+ std %r9,80(%r1)
+ li %r11,95
+ hc
+ extsw %r3,%r3
+ ld %r11,48(%r1)
+ std %r4,0(%r11)
+ ld %r11,56(%r1)
+ std %r5,0(%r11)
+ ld %r11,64(%r1)
+ std %r6,0(%r11)
+ ld %r11,72(%r1)
+ std %r7,0(%r11)
+ ld %r11,80(%r1)
+ std %r8,0(%r11)
+ ld %r1,0(%r1)
+ ld %r0,16(%r1)
+ mtlr %r0
+ blr
+
ASENTRY(lv1_set_dabr)
mflr %r0
std %r0,16(%r1)
@@ -585,6 +607,28 @@ ASENTRY(lv1_get_version_info)
mtlr %r0
blr
+ASENTRY(lv1_insert_htab_entry)
+ mflr %r0
+ std %r0,16(%r1)
+ stdu %r1,-72(%r1)
+ std %r9,48(%r1)
+ std %r10,56(%r1)
+ ld %r11,184(%r1)
+ std %r11,64(%r1)
+ li %r11,158
+ hc
+ extsw %r3,%r3
+ ld %r11,48(%r1)
+ std %r4,0(%r11)
+ ld %r11,56(%r1)
+ std %r5,0(%r11)
+ ld %r11,64(%r1)
+ std %r6,0(%r11)
+ ld %r1,0(%r1)
+ ld %r0,16(%r1)
+ mtlr %r0
+ blr
+
ASENTRY(lv1_read_virtual_uart)
mflr %r0
std %r0,16(%r1)
Modified: user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.h
==============================================================================
--- user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.h Mon Jul 5 01:12:41 2010 (r209707)
+++ user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.h Mon Jul 5 01:14:32 2010 (r209708)
@@ -1,7 +1,7 @@
/*
* Playstation 3 LV1 hypercall interface
*
- * $FreeBSD: user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.master 209631 2010-07-01 15:23:29Z nwhitehorn $
+ * $FreeBSD: user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.master 209679 2010-07-04 02:40:31Z nwhitehorn $
*/
#include <sys/types.h>
@@ -52,6 +52,7 @@ int lv1_get_logical_partition_id(uint64_
int lv1_get_spe_irq_outlet(uint64_t spe_id, uint64_t class, uint64_t *outlet);
int lv1_set_spe_privilege_state_area_1_register(uint64_t spe_id, uint64_t offset, uint64_t value);
int lv1_get_repository_node_value(uint64_t lpar_id, uint64_t n1, uint64_t n2, uint64_t n3, uint64_t n4, uint64_t *v1, uint64_t *v2);
+int lv1_read_htab_entries(uint64_t vas_id, uint64_t slot, uint64_t *hi1, uint64_t *hi2, uint64_t *hi3, uint64_t *hi4, uint64_t *rcbits);
int lv1_set_dabr(uint64_t dabr, uint64_t flags);
int lv1_allocate_io_segment(uint64_t ioas_id, uint64_t seg_size, uint64_t io_pagesize, uint64_t *ioif_addr);
int lv1_release_io_segment(uint64_t ioas_id, uint64_t ioif_addr);
@@ -60,6 +61,7 @@ int lv1_destruct_io_irq_outlet(uint64_t
int lv1_map_htab(uint64_t lpar_id, uint64_t *htab_addr);
int lv1_unmap_htab(uint64_t htab_addr);
int lv1_get_version_info(uint64_t *firm_vers);
+int lv1_insert_htab_entry(uint64_t vas_id, uint64_t pteg, uint64_t pte_hi, uint64_t pte_lo, uint64_t lockflags, uint64_t flags, uint64_t *index, uint64_t *evicted_hi, uint64_t *evicted_lo);
int lv1_read_virtual_uart(uint64_t port, uint64_t buffer, uint64_t bytes, uint64_t *bytes_read);
int lv1_write_virtual_uart(uint64_t port, uint64_t buffer, uint64_t bytes, uint64_t *bytes_written);
int lv1_set_virtual_uart_param(uint64_t port, uint64_t param, uint64_t value);
Modified: user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.master
==============================================================================
--- user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.master Mon Jul 5 01:12:41 2010 (r209707)
+++ user/nwhitehorn/ps3/powerpc/ps3/ps3-hvcall.master Mon Jul 5 01:14:32 2010 (r209708)
@@ -53,6 +53,7 @@ HVCALL 74 lv1_get_logical_partition_id
HVCALL 78 lv1_get_spe_irq_outlet spe_id,class outlet
HVCALL 79 lv1_set_spe_privilege_state_area_1_register spe_id,offset,value
HVCALL 91 lv1_get_repository_node_value lpar_id,n1,n2,n3,n4 v1,v2
+HVCALL 95 lv1_read_htab_entries vas_id,slot hi1,hi2,hi3,hi4,rcbits
HVCALL 96 lv1_set_dabr dabr,flags
HVCALL 116 lv1_allocate_io_segment ioas_id,seg_size,io_pagesize ioif_addr
HVCALL 117 lv1_release_io_segment ioas_id,ioif_addr
@@ -61,6 +62,7 @@ HVCALL 121 lv1_destruct_io_irq_outlet o
HVCALL 122 lv1_map_htab lpar_id htab_addr
HVCALL 123 lv1_unmap_htab htab_addr
HVCALL 127 lv1_get_version_info UNUSED firm_vers
+HVCALL 158 lv1_insert_htab_entry vas_id,pteg,pte_hi,pte_lo,lockflags,flags index,evicted_hi,evicted_lo
HVCALL 162 lv1_read_virtual_uart port,buffer,bytes bytes_read
HVCALL 163 lv1_write_virtual_uart port,buffer,bytes bytes_written
HVCALL 164 lv1_set_virtual_uart_param port,param,value
More information about the svn-src-user
mailing list