haiku/headers/private/kernel/commpage_compat.h
Jérôme Duval db9b70ee54 kernel: add a compatibility commpage on x86_64.
* x86 uses a commpage with 32-bit addresses, incompatible with the one used for
x86_64. For this reason, a compatibility commpage is needed to support a 32-bit
userland on x86_64.
* define ADDRESS_TYPE as a macro for addr_t (default) or uint32 (for the 32-bit
commpage).
* team_create_thread_start_internal() will use clone_commpage_area() with
KERNEL_USER_DATA_BASE or clone_commpage_compat_area() with
KERNEL_USER32_DATA_BASE, to setup the correct commpage.
* real_time_clock (in compatibility mode) also updates the compatibility
commpage with real time data.

Change-Id: I61605077ce0beabab4439ef54edd1eae26f26fd2
2018-05-18 05:11:07 +00:00

40 lines
949 B
C

/*
* Copyright 2018 Haiku Inc. All Rights Reserved.
* Copyright 2007, Travis Geiselbrecht. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_COMMPAGE_COMPAT_H
#define _KERNEL_COMMPAGE_COMPAT_H
#include <image.h>
#include <SupportDefs.h>
#define COMMPAGE_COMPAT
#include <commpage_defs.h>
#ifdef __cplusplus
extern "C" {
#endif
status_t commpage_compat_init(void);
status_t commpage_compat_init_post_cpus(void);
void* allocate_commpage_compat_entry(int entry, size_t size);
addr_t fill_commpage_compat_entry(int entry, const void* copyFrom,
size_t size);
image_id get_commpage_compat_image();
area_id clone_commpage_compat_area(team_id team, void** address);
// implemented in the architecture specific part
status_t arch_commpage_compat_init(void);
status_t arch_commpage_compat_init_post_cpus(void);
#ifdef __cplusplus
} // extern "C"
#endif
#endif /* _KERNEL_COMMPAGE_COMPAT_H */