1/*
2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Copyright 2005-2009, Axel D��rfler, axeld@pinc-software.de.
4 * Distributed under the terms of the MIT License.
5 *
6 * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
7 * Distributed under the terms of the NewOS License.
8 */
9#ifndef KERNEL_ARCH_X86_PAGING_X86_PAGING_STRUCTURES_H
10#define KERNEL_ARCH_X86_PAGING_X86_PAGING_STRUCTURES_H
11
12
13#include <SupportDefs.h>
14
15#include <heap.h>
16
17#include <smp.h>
18
19
20struct X86PagingStructures : DeferredDeletable {
21	phys_addr_t					pgdir_phys;
22	int32						ref_count;
23	CPUSet						active_on_cpus;
24		// mask indicating on which CPUs the map is currently used
25
26								X86PagingStructures();
27	virtual						~X86PagingStructures();
28
29	inline	void				AddReference();
30	inline	void				RemoveReference();
31
32	virtual	void				Delete() = 0;
33};
34
35
36inline void
37X86PagingStructures::AddReference()
38{
39	atomic_add(&ref_count, 1);
40}
41
42
43inline void
44X86PagingStructures::RemoveReference()
45{
46	if (atomic_add(&ref_count, -1) == 1)
47		Delete();
48}
49
50
51#endif	// KERNEL_ARCH_X86_PAGING_X86_PAGING_STRUCTURES_H
52