1/* @title: TLB */
2#include <acpi/lapic.h>
3#include <mem/page.h>
4#include <stdatomic.h>
5#include <stdint.h>
6#include <types/types.h>
7
8/* per-cpu */
9#define TLB_QUEUE_SIZE 64
10
11struct tlb_shootdown_cpu {
12 _Atomic uintptr_t queue[TLB_QUEUE_SIZE];
13 _Atomic uint32_t head;
14 _Atomic uint32_t tail;
15 atomic_bool in_tlb_shootdown;
16 _Atomic uint8_t flush_all;
17 _Atomic uint64_t req_gen; /* last requested generation */
18 _Atomic uint64_t done_gen; /* last completed generation */
19};
20
21void tlb_init(void);
22enum irq_result tlb_shootdown_isr(void *ctx, irq_t irq,
23 struct irq_context *rsp);
24void tlb_shootdown(uintptr_t addr, bool synchronous);
25