the-darwin-kernel.h revision a4d7fc6f54717c342281099fe14f5666be9b7921
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* $Id$ */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/** @file
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * innotek Portable Runtime - Include all necessary headers for the Darwing kernel.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/*
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Copyright (C) 2006-2007 innotek GmbH
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync *
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * available from http://www.virtualbox.org. This file is free software;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * you can redistribute it and/or modify it under the terms of the GNU
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * General Public License as published by the Free Software Foundation,
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync *
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * If you received this file as part of a commercial VirtualBox
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * distribution, then only the terms of your commercial VirtualBox
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * license agreement apply instead of the previous paragraph.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#ifndef __the_darwin_kernel_h__
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#define __the_darwin_kernel_h__
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* Problematic header(s) containing conflicts with IPRT first. */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#define __STDC_CONSTANT_MACROS
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#define __STDC_LIMIT_MACROS
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <sys/param.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <mach/vm_param.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#undef ALIGN
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#undef MIN
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#undef MAX
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#undef PAGE_SIZE
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#undef PAGE_SHIFT
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* Include the IPRT definitions of the conflicting #defines & typedefs. */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <iprt/cdefs.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <iprt/types.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <iprt/param.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* After including cdefs, we can check that this really is Darwin. */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#ifndef RT_OS_DARWIN
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync# error "RT_OS_DARWIN must be defined!"
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#endif
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* now we're ready for including the rest of the Darwin headers. */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <kern/thread.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync#include <kern/clock.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <kern/sched_prim.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync#include <kern/locks.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <libkern/libkern.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <mach/thread_act.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync#include <mach/vm_map.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync#include <pexpert/pexpert.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync#include <sys/conf.h>
80626cd34607c5dbf3f0af51b32396ce58bf493bvboxsync#include <sys/errno.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <sys/ioccom.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <sys/malloc.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync#include <sys/proc.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <IOKit/IOTypes.h>
710a6316a22868b04400caf79719f96c18163cd3vboxsync#include <IOKit/IOLib.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <IOKit/IOMemoryDescriptor.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync#include <IOKit/IOMapper.h>
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
41b3442e21c3a79f3bc61ce67e3445757a83f281vboxsync__BEGIN_DECLS
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* mach/vm_types.h */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsynctypedef struct pmap *pmap_t;
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync/* vm/vm_kern.h */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncextern vm_map_t kernel_map;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* vm/pmap.h */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncextern pmap_t kernel_pmap;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
ba05e6aeed3cd14961a36e0162c29a267b66d7f7vboxsync/* kern/task.h */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncextern vm_map_t get_task_map(task_t);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync/* osfmk/i386/pmap.h */
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsyncextern ppnum_t pmap_find_phys(pmap_t, addr64_t);
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* vm/vm_map.h */
1dc37bff2fb26897f5892d8330fe2bc0c9859aecvboxsyncextern kern_return_t vm_map_wire(vm_map_t, vm_map_offset_t, vm_map_offset_t, vm_prot_t, boolean_t);
fb1975a6972d89de9e515bed0248db93f04ec9d8vboxsyncextern kern_return_t vm_map_unwire(vm_map_t, vm_map_offset_t, vm_map_offset_t, boolean_t);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync/* mach/i386/thread_act.h */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncextern kern_return_t thread_terminate(thread_t);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync__END_DECLS
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync/*
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Internals of the Darwin Ring-0 IPRT.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync */
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync__BEGIN_DECLS
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncextern lck_grp_t *g_pDarwinLockGroup;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync__END_DECLS
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync/**
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Converts from nanoseconds to Darwin absolute time units.
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * @returns Darwin absolute time.
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync * @param u64Nano Time interval in nanoseconds
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync */
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsyncDECLINLINE(uint64_t) rtDarwinAbsTimeFromNano(const uint64_t u64Nano)
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync{
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync uint64_t u64AbsTime;
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync nanoseconds_to_absolutetime(u64Nano, &u64AbsTime);
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync return u64AbsTime;
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync}
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#include <iprt/err.h>
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync/**
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * Convert from mach kernel return code to IPRT status code.
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync * @todo put this where it belongs! (i.e. in a separate file and prototype in iprt/err.h)
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync */
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsyncDECLINLINE(int) RTErrConvertFromMachKernReturn(kern_return_t rc)
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync{
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync switch (rc)
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync {
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync case KERN_SUCCESS: return VINF_SUCCESS;
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync default: return VERR_GENERAL_FAILURE;
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync }
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync}
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync#endif
bddad5eeab93a98d4ea571ccdf016531bb4318advboxsync
a425b5e790c27d6a1a2cf738802e9034f0764a00vboxsync