hc
2024-03-22 619f0f87159c5dbd2755b1b0a0eb35784be84e7a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
 * SPDX-License-Identifier: BSD-2-Clause
 *
 * Copyright (c) 2019 Western Digital Corporation or its affiliates.
 *
 * Authors:
 *   Atish Patra <atish.patra@wdc.com>
 *   Anup Patel <anup.patel@wdc.com>
 */
 
#ifndef __SBI_TLB_H__
#define __SBI_TLB_H__
 
#include <sbi/sbi_types.h>
#include <sbi/sbi_hartmask.h>
 
/* clang-format off */
 
#define SBI_TLB_FLUSH_ALL            ((unsigned long)-1)
 
/* clang-format on */
 
#define SBI_TLB_FIFO_NUM_ENTRIES        8
 
enum sbi_tlb_info_types {
   SBI_TLB_FLUSH_VMA,
   SBI_TLB_FLUSH_VMA_ASID,
   SBI_TLB_FLUSH_GVMA,
   SBI_TLB_FLUSH_GVMA_VMID,
   SBI_TLB_FLUSH_VVMA,
   SBI_TLB_FLUSH_VVMA_ASID,
   SBI_ITLB_FLUSH
};
 
struct sbi_scratch;
 
struct sbi_tlb_info {
   unsigned long start;
   unsigned long size;
   unsigned long asid;
   unsigned long vmid;
   unsigned long type;
   struct sbi_hartmask smask;
};
 
#define SBI_TLB_INFO_INIT(__p, __start, __size, __asid, __vmid, __type, __src) \
do { \
   (__p)->start = (__start); \
   (__p)->size = (__size); \
   (__p)->asid = (__asid); \
   (__p)->vmid = (__vmid); \
   (__p)->type = (__type); \
   SBI_HARTMASK_INIT_EXCEPT(&(__p)->smask, (__src)); \
} while (0)
 
#define SBI_TLB_INFO_SIZE        sizeof(struct sbi_tlb_info)
 
int sbi_tlb_request(ulong hmask, ulong hbase, struct sbi_tlb_info *tinfo);
 
int sbi_tlb_init(struct sbi_scratch *scratch, bool cold_boot);
 
#endif