Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 1 addition & 25 deletions hal/aarch64/arch/pmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define _PH_HAL_PMAP_AARCH64_H_

#include "hal/types.h"
#include "hal/page.h"

/* Predefined virtual addresses */
#define VADDR_KERNEL 0xffffffffc0000000 /* base virtual address of kernel space */
Expand All @@ -36,33 +37,8 @@
#define PGHD_READ 0x00
#define PGHD_MASK 0x1f


/* Page flags */
#define PAGE_FREE 0x00000001

#define PAGE_OWNER_BOOT (0 << 1)
#define PAGE_OWNER_KERNEL (1 << 1)
#define PAGE_OWNER_APP (2 << 1)

#define PAGE_KERNEL_SYSPAGE (1 << 4)
#define PAGE_KERNEL_CPU (2 << 4)
#define PAGE_KERNEL_PTABLE (3 << 4)
#define PAGE_KERNEL_PMAP (4 << 4)
#define PAGE_KERNEL_STACK (5 << 4)
#define PAGE_KERNEL_HEAP (6 << 4)

#ifndef __ASSEMBLY__

/* Structure describing page - its should be aligned to 2^N boundary */
typedef struct _page_t {
addr_t addr;
u8 idx;
u8 flags;
struct _page_t *next;
struct _page_t *prev;
} page_t;


typedef struct _pmap_t {
asid_t asid;
u64 *ttl1; /* Translation table at level 1 */
Expand Down
26 changes: 1 addition & 25 deletions hal/armv7a/arch/pmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define _PH_HAL_PMAP_ARMV7A_H_

#include "hal/types.h"
#include "hal/page.h"

/* Predefined virtual addresses */
#define VADDR_KERNEL 0xc0000000 /* base virtual address of kernel space */
Expand All @@ -38,33 +39,8 @@
#define PGHD_READ 0x00
#define PGHD_MASK 0x1f


/* Page flags */
#define PAGE_FREE 0x00000001

#define PAGE_OWNER_BOOT (0 << 1)
#define PAGE_OWNER_KERNEL (1 << 1)
#define PAGE_OWNER_APP (2 << 1)

#define PAGE_KERNEL_SYSPAGE (1 << 4)
#define PAGE_KERNEL_CPU (2 << 4)
#define PAGE_KERNEL_PTABLE (3 << 4)
#define PAGE_KERNEL_PMAP (4 << 4)
#define PAGE_KERNEL_STACK (5 << 4)
#define PAGE_KERNEL_HEAP (6 << 4)

#ifndef __ASSEMBLY__

/* Structure describing page - its should be aligned to 2^N boundary */
typedef struct _page_t {
addr_t addr;
u8 idx;
u8 flags;
struct _page_t *next;
struct _page_t *prev;
} page_t;


typedef struct _pmap_t {
u8 asid_ix;
u32 *pdir;
Expand Down
24 changes: 1 addition & 23 deletions hal/armv7m/arch/pmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define _PH_HAL_PMAP_ARMV7M_H_

#include "hal/types.h"
#include "hal/page.h"

/* Architecture dependent page attributes - used for mapping */
#define PGHD_PRESENT 0x01
Expand All @@ -27,31 +28,8 @@
#define PGHD_NOT_CACHED 0x00
#define PGHD_READ 0x00

/* Page flags */
#define PAGE_FREE 0x00000001

#define PAGE_OWNER_BOOT (0 << 1)
#define PAGE_OWNER_KERNEL (1 << 1)
#define PAGE_OWNER_APP (2 << 1)

#define PAGE_KERNEL_SYSPAGE (1 << 4)
#define PAGE_KERNEL_CPU (2 << 4)
#define PAGE_KERNEL_PTABLE (3 << 4)
#define PAGE_KERNEL_PMAP (4 << 4)
#define PAGE_KERNEL_STACK (5 << 4)
#define PAGE_KERNEL_HEAP (6 << 4)


#ifndef __ASSEMBLY__

typedef struct _page_t {
addr_t addr;
u8 idx;
u16 flags;
struct _page_t *next;
} page_t;


typedef struct _pmap_t {
void *start;
void *end;
Expand Down
24 changes: 1 addition & 23 deletions hal/armv7r/arch/pmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define _PH_HAL_PMAP_ARMV7R_H_

#include "hal/types.h"
#include "hal/page.h"

#define PGHD_PRESENT 0x01U
#define PGHD_USER 0x04U
Expand All @@ -26,31 +27,8 @@
#define PGHD_NOT_CACHED 0x00U
#define PGHD_READ 0x00U

/* Page flags */
#define PAGE_FREE 0x00000001U

#define PAGE_OWNER_BOOT (0U << 1)
#define PAGE_OWNER_KERNEL (1U << 1)
#define PAGE_OWNER_APP (2U << 1)

#define PAGE_KERNEL_SYSPAGE (1U << 4)
#define PAGE_KERNEL_CPU (2U << 4)
#define PAGE_KERNEL_PTABLE (3U << 4)
#define PAGE_KERNEL_PMAP (4U << 4)
#define PAGE_KERNEL_STACK (5U << 4)
#define PAGE_KERNEL_HEAP (6U << 4)


#ifndef __ASSEMBLY__

typedef struct _page_t {
addr_t addr;
u8 idx;
u16 flags;
struct _page_t *next;
} page_t;


typedef struct _pmap_t {
void *start;
void *end;
Expand Down
24 changes: 1 addition & 23 deletions hal/armv8m/arch/pmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define _PH_HAL_PMAP_ARMV8M_H_

#include "hal/types.h"
#include "hal/page.h"

#define PGHD_PRESENT 0x01U
#define PGHD_USER 0x04U
Expand All @@ -26,31 +27,8 @@
#define PGHD_NOT_CACHED 0x00U
#define PGHD_READ 0x00U

/* Page flags */
#define PAGE_FREE 0x00000001U

#define PAGE_OWNER_BOOT (0U << 1)
#define PAGE_OWNER_KERNEL (1U << 1)
#define PAGE_OWNER_APP (2U << 1)

#define PAGE_KERNEL_SYSPAGE (1U << 4)
#define PAGE_KERNEL_CPU (2U << 4)
#define PAGE_KERNEL_PTABLE (3U << 4)
#define PAGE_KERNEL_PMAP (4U << 4)
#define PAGE_KERNEL_STACK (5U << 4)
#define PAGE_KERNEL_HEAP (6U << 4)


#ifndef __ASSEMBLY__

typedef struct _page_t {
addr_t addr;
u8 idx;
u16 flags;
struct _page_t *next;
} page_t;


typedef struct _pmap_t {
void *start;
void *end;
Expand Down
25 changes: 1 addition & 24 deletions hal/armv8r/arch/pmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#define _PH_HAL_PMAP_ARMV8M_H_

#include "hal/types.h"
#include "hal/page.h"

#define PGHD_PRESENT 0x01U
#define PGHD_USER 0x04U
Expand All @@ -26,33 +27,9 @@
#define PGHD_NOT_CACHED 0x00U
#define PGHD_READ 0x00U

/* Page flags */
#define PAGE_FREE 0x00000001U

#define PAGE_OWNER_BOOT (0U << 1)
#define PAGE_OWNER_KERNEL (1U << 1)
#define PAGE_OWNER_APP (2U << 1)

#define PAGE_KERNEL_SYSPAGE (1U << 4)
#define PAGE_KERNEL_CPU (2U << 4)
#define PAGE_KERNEL_PTABLE (3U << 4)
#define PAGE_KERNEL_PMAP (4U << 4)
#define PAGE_KERNEL_STACK (5U << 4)
#define PAGE_KERNEL_HEAP (6U << 4)


#ifndef __ASSEMBLY__

typedef struct _page_t {
addr_t addr;
u8 idx;
u16 flags;
struct _page_t *next;
} page_t;


typedef struct _pmap_t {
u32 mpr;
void *start;
void *end;
} pmap_t;
Expand Down
30 changes: 2 additions & 28 deletions hal/ia32/arch/pmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#ifndef _PH_HAL_IA32_PMAP_H_
#define _PH_HAL_IA32_PMAP_H_

#include "hal/page.h"

/* Predefined virtual addresses */
#define VADDR_KERNEL 0xc0000000 /* base virtual address of kernel space */
#define VADDR_MIN 0x00000000
Expand Down Expand Up @@ -49,41 +51,13 @@
#define PTHD_USER 0x04
#define PTHD_WRITE 0x02


/* Page flags */
#define PAGE_FREE 0x00000001

#define PAGE_OWNER_BOOT (0 << 1)
#define PAGE_OWNER_KERNEL (1 << 1)
#define PAGE_OWNER_APP (2 << 1)

#define PAGE_KERNEL_SYSPAGE (1 << 4)
#define PAGE_KERNEL_CPU (2 << 4)
#define PAGE_KERNEL_PTABLE (3 << 4)
#define PAGE_KERNEL_PMAP (4 << 4)
#define PAGE_KERNEL_STACK (5 << 4)
#define PAGE_KERNEL_HEAP (6 << 4)


#ifndef __ASSEMBLY__

#include "cpu.h"
#include "vm/types.h"


#define SIZE_PDIR SIZE_PAGE


/* Structure describing page - its should be aligned to 2^N boundary */
typedef struct _page_t {
addr_t addr;
struct _page_t *next;
struct _page_t *prev;
u8 idx;
u8 flags;
} page_t;


typedef struct _pmap_t {
u32 *pdir;
addr_t cr3;
Expand Down
53 changes: 53 additions & 0 deletions hal/page.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Phoenix-RTOS
*
* Operating system kernel
*
* shared page definitions used in pmap
*
* Copyright 2025 Phoenix Systems
* Author: Jan Wiśniewski
*
* This file is part of Phoenix-RTOS.
*
* %LICENSE%
*/

#ifndef _HAL_PAGE_H_
#define _HAL_PAGE_H_

#include "hal/types.h"

/* Page flags */
#define PAGE_FREE (0x00000001U)

#define PAGE_OWNER_BOOT (0U << 1)
#define PAGE_OWNER_KERNEL (1U << 1)
#define PAGE_OWNER_APP (2U << 1)

#define PAGE_KERNEL_SYSPAGE (1U << 4)
#define PAGE_KERNEL_CPU (2U << 4)
#define PAGE_KERNEL_PTABLE (3U << 4)
#define PAGE_KERNEL_PMAP (4U << 4)
#define PAGE_KERNEL_STACK (5U << 4)
#define PAGE_KERNEL_HEAP (6U << 4)

#define PAGE_ALIGN(addr) (((addr_t)addr) & ~(SIZE_PAGE - 1))
#define PAGE_OFFS(addr) (((addr_t)addr) & (SIZE_PAGE - 1))

#ifndef __ASSEMBLY__

/* Structure describing page - its should be aligned to 2^N boundary */
typedef struct _page_t {
addr_t addr;
u8 idx;
u8 flags;
struct _page_t *next;
#ifndef NOMMU
struct _page_t *prev;
#endif
} page_t;

#endif

#endif
Loading
Loading