9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/* $Id$ */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/** @file
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * IPRT - Include all necessary headers for the Haiku kernel.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/*
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Copyright (C) 2012 Oracle Corporation
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync *
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * available from http://www.virtualbox.org. This file is free software;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * General Public License (GPL) as published by the Free Software
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync *
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * The contents of this file may alternatively be used under the terms
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * of the Common Development and Distribution License Version 1.0
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * VirtualBox OSE distribution, in which case the provisions of the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * CDDL are applicable instead of those of the GPL.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync *
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * You may elect to license modified versions of this file under the
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * terms and conditions of either the GPL or the CDDL or both.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#ifndef ___the_haiku_kernel_h
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#define ___the_haiku_kernel_h
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <sys/types.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <sys/mman.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <sys/time.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <stdlib.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <OS.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <KernelExport.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <iprt/cdefs.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <iprt/err.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#include <iprt/types.h>
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncRT_C_DECLS_BEGIN
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/* headers/private/kernel/smp.h */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncextern int32 smp_get_num_cpus(void);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncextern int32 smp_get_current_cpu(void);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/* headers/private/kernel/vm/vm.h */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncextern status_t vm_unreserve_address_range(team_id team, void *address, addr_t size);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncextern status_t vm_reserve_address_range(team_id team, void **_address, uint32 addressSpec, addr_t size, uint32 flags);
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsyncextern area_id vm_clone_area(team_id team, const char *name, void **address, uint32 addressSpec, uint32 protection,
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync uint32 mapping, area_id sourceArea, bool kernel);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/* headers/private/kernel/thread_type.h */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncextern spinlock gThreadSpinlock;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#define GRAB_THREAD_LOCK() acquire_spinlock(&gThreadSpinlock)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#define RELEASE_THREAD_LOCK() release_spinlock(&gThreadSpinlock)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsynctypedef struct
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync{
62b8247e4970b835e263b4c18a2748bf651fabd0vboxsync int32 flags; /* summary of events relevant in interrupt handlers (signals pending, user debugging
62b8247e4970b835e263b4c18a2748bf651fabd0vboxsync enabled, etc.) */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#if 0
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync Thread *all_next;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync Thread *team_next;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync Thread *queue_next; /* i.e. run queue, release queue, etc. */
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync timer alarm;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync thread_id id;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync char name[B_OS_NAME_LENGTH];
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync int32 priority;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync int32 next_priority;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync int32 io_priority;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync int32 state;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync int32 next_state;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#endif
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync // and a lot more...
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync} Thread;
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/* headers/private/kernel/thread.h */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsyncextern Thread* thread_get_thread_struct(thread_id id);
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsyncextern Thread* thread_get_thread_struct_locked(thread_id id);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncextern void thread_yield(bool force);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncRT_C_DECLS_END
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync/**
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Convert from Haiku kernel return code to IPRT status code.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * @todo put this where it belongs! (i.e. in a separate file and prototype in iprt/err.h)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync * Or as generic call since it's not r0 specific.
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsyncDECLINLINE(int) RTErrConvertFromHaikuKernReturn(status_t rc)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync{
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync switch (rc)
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync {
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync case B_OK: return VINF_SUCCESS;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync case B_BAD_SEM_ID: return VERR_SEM_ERROR;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync case B_NO_MORE_SEMS: return VERR_TOO_MANY_SEMAPHORES;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync case B_BAD_THREAD_ID: return VERR_INVALID_PARAMETER;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync case B_NO_MORE_THREADS: return VERR_MAX_THRDS_REACHED;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync case B_BAD_TEAM_ID: return VERR_INVALID_PARAMETER;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync case B_NO_MORE_TEAMS: return VERR_MAX_PROCS_REACHED;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync //default: return VERR_GENERAL_FAILURE;
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync /** POSIX Errors are defined as a subset of system errors. */
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync default: return RTErrConvertFromErrno(rc);
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync }
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync}
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync
9fc464631dc4a68fbb5eb6419d61fbe91b6b16bdvboxsync#endif /* ___the_haiku_kernel_h */
2b3dc93fedb4e72ac5b3cbaa89a9fc2f559be550vboxsync