param.h revision a5e542632108d84ba1777c44a9c0bcbb689288c9
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * innotek Portable Runtime - Parameter Definitions.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2006-2007 innotek GmbH
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * General Public License as published by the Free Software Foundation,
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync */
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync#ifndef ___iprt_param_h
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync#define ___iprt_param_h
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @todo Much of the PAGE_* stuff here is obsolete and highly risky to have around.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * As for component configs (MM_*), either we gather all in here or we move those bits away! */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @defgroup grp_rt_param System Parameter Definitions
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @ingroup grp_rt_cdefs
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* Undefine PAGE_SIZE and PAGE_SHIFT to avoid unnecessary noice when clashing
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync with system headers. Include system headers before / after iprt depending
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync on which you wish to take precedence. */
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync#undef PAGE_SIZE
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#undef PAGE_SHIFT
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * i386 Page size.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync#define PAGE_SIZE 4096
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * i386 Page shift.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This is used to convert between size (in bytes) and page count.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define PAGE_SHIFT 12
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * i386 Page offset mask.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync * Do NOT one-complement this for whatever purpose. You may get a 32-bit const when you want a 64-bit one.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Use PAGE_BASE_MASK, PAGE_BASE_GC_MASK, PAGE_BASE_HC_MASK, PAGE_ADDRESS() or X86_PTE_PAE_PG_MASK.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#define PAGE_OFFSET_MASK 0xfff
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Page address mask for the guest context POINTERS.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK!
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define PAGE_BASE_GC_MASK (~(RTGCUINTPTR)0xfff)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Page address mask for the host context POINTERS.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define PAGE_BASE_HC_MASK (~(RTHCUINTPTR)0xfff)
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync/**
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync * Page address mask for the both context POINTERS.
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync *
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync * Be careful when using this since it may be a size too big!
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync * @remark Physical addresses are always masked using X86_PTE_PAE_PG_MASK!
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync */
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync#define PAGE_BASE_MASK (~(RTUINTPTR)0xfff)
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync/**
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync * Get the page aligned address of a POINTER in the CURRENT context.
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync *
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsync * @returns Page aligned address (it's an uintptr_t).
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pv The address to align.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @remarks Physical addresses are always masked using X86_PTE_PAE_PG_MASK!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @remarks This only works with POINTERS in the current context.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Do NOT use on guest address or physical address!
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define PAGE_ADDRESS(pv) ((uintptr_t)(pv) & ~(uintptr_t)0xfff)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Host max path (the reasonable value).
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define RTPATH_MAX (4096 + 4) /* (PATH_MAX + 1) on linux w/ some alignment */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @} */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync