Skip to content

Commit

Permalink
libnvmm compiles
Browse files Browse the repository at this point in the history
  • Loading branch information
dalmemail committed May 30, 2024
1 parent 7beffb5 commit e4f51da
Show file tree
Hide file tree
Showing 12 changed files with 132 additions and 36 deletions.
2 changes: 1 addition & 1 deletion build/jam/images/definitions/regular
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ rule HaikuImageGetSystemLibs
libdevice.so
libgame.so libglut.so@mesa libgnu.so
libmail.so libmedia.so libmidi.so libmidi2.so
libnetwork.so
libnetwork.so libnvmm.so@x86_64
libpackage.so
libscreensaver.so
libtextencoding.so libtracker.so libtranslation.so
Expand Down
3 changes: 3 additions & 0 deletions src/add-ons/kernel/drivers/nvmm/Jamfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ UsePrivateHeaders kernel ;

SEARCH_SOURCE += [ FDirName $(SUBDIR) x86 ] ;

SubDirCcFlags [ FDefines _KERNEL=1 ] ;
SubDirC++Flags [ FDefines _KERNEL=1 ] ;

KernelAddon nvmm :
nvmm.c
nvmm_haiku.cpp
Expand Down
15 changes: 6 additions & 9 deletions src/add-ons/kernel/drivers/nvmm/nvmm.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@

#if defined(__HAIKU__)
#include <stdint.h>
#include <stdbool.h>
#endif

typedef uint64_t gpaddr_t;
Expand All @@ -49,19 +50,19 @@ typedef uint32_t nvmm_cpuid_t;
#undef CTASSERT
#define CTASSERT(x) NVMM_CTASSERT(x, __LINE__)
#define NVMM_CTASSERT(x, y) NVMM__CTASSERT(x, y)
#if defined(__HAIKU__)
#define NVMM__CTASSERT(x, y) STATIC_ASSERT(x)
#else
//#if defined(__HAIKU__)
//#define NVMM__CTASSERT(x, y) STATIC_ASSERT(x)
//#else
#define NVMM__CTASSERT(x, y) typedef char __assert ## y[(x) ? 1 : -1] __unused
#endif
//#endif

#if defined(__x86_64__)
#if defined(__NetBSD__)
#include <dev/nvmm/x86/nvmm_x86.h>
#elif defined(__DragonFly__)
#include <dev/virtual/nvmm/x86/nvmm_x86.h>
#elif defined(__HAIKU__)
//#include "x86/nvmm_x86.h"
#include "x86/nvmm_x86.h"
#endif
#endif /* __x86_64__ */

Expand Down Expand Up @@ -96,15 +97,11 @@ struct nvmm_comm_page {
uint64_t state_wanted;
uint64_t state_cached;
uint64_t state_commit;
#ifndef __HAIKU__ // Not supported yet
struct nvmm_vcpu_state state;
#endif

/* Event. */
bool event_commit;
#ifndef __HAIKU__ // Not supported yet
struct nvmm_vcpu_event event;
#endif
};

#endif
22 changes: 22 additions & 0 deletions src/add-ons/kernel/drivers/nvmm/nvmm_bitops.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
* Copyright 2024 Daniel Martin, dalmemail@gmail.com
* All rights reserved. Distributed under the terms of the MIT License.
*/

#ifndef NVMM_BITOPS
#define NVMM_BITOPS

// bitops macros taken from sys/cdefs.h (NetBSD)
#define NBBY 8 // (Number of Bits in a BYte)
#define __BIT(__n) \
(((uintmax_t)(__n) >= NBBY * sizeof(uintmax_t)) ? 0 : \
((uintmax_t)1 << (uintmax_t)((__n) & (NBBY * sizeof(uintmax_t) - 1))))

#define __BITS(__m, __n) \
((__BIT(max_c((__m), (__n)) + 1) - 1) ^ (__BIT(min_c((__m), (__n))) - 1))

#define __LOWEST_SET_BIT(__mask) ((((__mask) - 1) & (__mask)) ^ (__mask))
#define __SHIFTOUT(__x, __mask) (((__x) & (__mask)) / __LOWEST_SET_BIT(__mask))
#define __SHIFTIN(__x, __mask) ((__x) * __LOWEST_SET_BIT(__mask))

#endif /* NVMM_BITOPS */
6 changes: 0 additions & 6 deletions src/add-ons/kernel/drivers/nvmm/nvmm_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,6 @@
#ifndef _NVMM_INTERNAL_H_
#define _NVMM_INTERNAL_H_

#if defined(__HAIKU__)
#ifdef _KERNEL_MODE
#define _KERNEL
#endif
#endif

#ifndef _KERNEL
#error "This file should not be included by userland programs."
#endif
Expand Down
2 changes: 0 additions & 2 deletions src/add-ons/kernel/drivers/nvmm/nvmm_ioctl.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,7 @@ struct nvmm_ioc_vcpu_run {
nvmm_machid_t machid;
nvmm_cpuid_t cpuid;
/* output */
#ifndef __HAIKU__ // Not supported by our port yet
struct nvmm_vcpu_exit exit;
#endif
};

struct nvmm_ioc_hva_map {
Expand Down
20 changes: 2 additions & 18 deletions src/add-ons/kernel/drivers/nvmm/nvmm_os.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,6 @@
#ifndef _NVMM_OS_H_
#define _NVMM_OS_H_

#if defined(__HAIKU__)
#ifdef _KERNEL_MODE
#define _KERNEL
#endif
#endif

#ifndef _KERNEL
#error "This file should not be included by userland programs."
#endif
Expand Down Expand Up @@ -113,18 +107,8 @@ typedef mutex os_mtx_t;
// roundup() taken from headers/private/firewire/fwglue.h
#define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */
#define __aligned(bytes) __attribute__((__aligned__(bytes)))
// bitops macros taken from sys/cdefs.h (NetBSD)
#define NBBY 8 // (Number of Bits in a BYte)
#define __BIT(__n) \
(((uintmax_t)(__n) >= NBBY * sizeof(uintmax_t)) ? 0 : \
((uintmax_t)1 << (uintmax_t)((__n) & (NBBY * sizeof(uintmax_t) - 1))))

#define __BITS(__m, __n) \
((__BIT(max_c((__m), (__n)) + 1) - 1) ^ (__BIT(min_c((__m), (__n))) - 1))

#define __LOWEST_SET_BIT(__mask) ((((__mask) - 1) & (__mask)) ^ (__mask))
#define __SHIFTOUT(__x, __mask) (((__x) & (__mask)) / __LOWEST_SET_BIT(__mask))
#define __SHIFTIN(__x, __mask) ((__x) * __LOWEST_SET_BIT(__mask))

#include "nvmm_bitops.h"

#define PAGE_SIZE B_PAGE_SIZE
#endif
Expand Down
1 change: 1 addition & 0 deletions src/libs/Jamfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ SubInclude HAIKU_TOP src libs stdc++ ;
SubInclude HAIKU_TOP src libs udis86 ;
SubInclude HAIKU_TOP src libs uuid ;
SubInclude HAIKU_TOP src libs util ;
SubInclude HAIKU_TOP src libs libnvmm ;
10 changes: 10 additions & 0 deletions src/libs/libnvmm/Jamfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
SubDir HAIKU_TOP src libs libnvmm ;

UseHeaders [ FDirName $(HAIKU_TOP) headers compatibility bsd ] : true ;
UseHeaders [ FDirName $(HAIKU_TOP) src add-ons kernel drivers nvmm ] : true ;
UseHeaders [ FDirName $(HAIKU_TOP) src add-ons kernel drivers nvmm include ] : true ;
UseHeaders [ FDirName $(SUBDIR) include ] : true ;

SharedLibrary [ MultiArchDefaultGristFiles libnvmm.so ] :
libnvmm.c
;
78 changes: 78 additions & 0 deletions src/libs/libnvmm/include/machine/psl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/* $NetBSD: psl.h,v 1.10 2017/08/12 12:33:31 maxv Exp $ */

/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* William Jolitz.
*
* 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.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
*
* @(#)psl.h 5.2 (Berkeley) 1/18/91
*/

#ifndef _X86_PSL_H_
#define _X86_PSL_H_

/*
* 386 processor status longword.
*/
#define PSL_C 0x00000001 /* carry flag */
#define PSL_PF 0x00000004 /* parity flag */
#define PSL_AF 0x00000010 /* auxiliary carry flag */
#define PSL_Z 0x00000040 /* zero flag */
#define PSL_N 0x00000080 /* sign flag */
#define PSL_T 0x00000100 /* trap flag */
#define PSL_I 0x00000200 /* interrupt enable flag */
#define PSL_D 0x00000400 /* direction flag */
#define PSL_V 0x00000800 /* overflow flag */
#define PSL_IOPL 0x00003000 /* i/o privilege level */
#define PSL_NT 0x00004000 /* nested task */
#define PSL_RF 0x00010000 /* resume flag */
#define PSL_VM 0x00020000 /* virtual 8086 mode */
#define PSL_AC 0x00040000 /* alignment check flag */
#define PSL_VIF 0x00080000 /* virtual interrupt enable flag */
#define PSL_VIP 0x00100000 /* virtual interrupt pending flag */
#define PSL_ID 0x00200000 /* identification flag */

#define PSL_MBO 0x00000002 /* must be one bits */
#define PSL_MBZ 0xffc08028 /* must be zero bits */

#define PSL_USERSET (PSL_MBO | PSL_I)
#define PSL_USERSTATIC (PSL_MBO | PSL_MBZ | PSL_I | PSL_IOPL | PSL_NT | PSL_VM | PSL_VIF | PSL_VIP)
#define PSL_USER (PSL_C | PSL_PF | PSL_AF | PSL_Z | PSL_N | \
PSL_T | PSL_V | PSL_D | PSL_AC)
#define PSL_CLEARSIG (PSL_T | PSL_VM | PSL_AC | PSL_D)


/*
* ???
*/
#ifdef _KERNEL
#include <machine/intr.h>
#endif

#endif /* !_X86_PSL_H_ */
6 changes: 6 additions & 0 deletions src/libs/libnvmm/libnvmm.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@
#include <fcntl.h>
#include <errno.h>

#if defined(__HAIKU__)
#define __aligned(bytes) __attribute__((__aligned__(bytes)))
#include <machine/specialreg.h>
#include <nvmm_bitops.h>
#endif

#include "nvmm.h"

static struct nvmm_capability __capability;
Expand Down
3 changes: 3 additions & 0 deletions src/libs/libnvmm/nvmm.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
#elif defined(__DragonFly__)
#include <dev/virtual/nvmm/nvmm.h>
#include <dev/virtual/nvmm/nvmm_ioctl.h>
#elif defined(__HAIKU__)
#include <nvmm.h>
#include <nvmm_ioctl.h>
#else
#error "Unsupported OS."
#endif
Expand Down

0 comments on commit e4f51da

Please sign in to comment.