Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | /* |
2 | * ========== Copyright Header Begin ========================================== | |
3 | * | |
4 | * OpenSPARC T2 Processor File: csr_common.h | |
5 | * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. | |
6 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES. | |
7 | * | |
8 | * The above named program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public | |
10 | * License version 2 as published by the Free Software Foundation. | |
11 | * | |
12 | * The above named program is distributed in the hope that it will be | |
13 | * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public | |
18 | * License along with this work; if not, write to the Free Software | |
19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | |
20 | * | |
21 | * ========== Copyright Header End ============================================ | |
22 | */ | |
23 | ||
24 | #ifndef _CSR_COMMON_H | |
25 | #define _CSR_COMMON_H | |
26 | #include <iostream> | |
27 | #include "types.h" | |
28 | #include "module.h" | |
29 | ||
30 | typedef int csr_reg_type_t; | |
31 | ||
32 | typedef enum { | |
33 | NO_ACCESS_T, | |
34 | READ_ACCESS_T, | |
35 | FULL_ACCESS_T | |
36 | } csr_access_type_t; | |
37 | ||
38 | typedef struct { | |
39 | short l; | |
40 | short r; | |
41 | const char *name; | |
42 | } csr_field_t; | |
43 | ||
44 | ||
45 | typedef struct { | |
46 | csr_reg_type_t reg_type; | |
47 | const char *name; | |
48 | uint64_t offset; | |
49 | uint64_t read_mask; | |
50 | uint64_t read_only_mask; | |
51 | uint64_t write_mask; | |
52 | uint64_t write_only_mask; | |
53 | uint64_t set_mask; | |
54 | uint64_t clear_mask; | |
55 | uint64_t power_on_reset; | |
56 | uint64_t *value; | |
57 | csr_access_type_t sp_access; | |
58 | csr_access_type_t jtag_access; | |
59 | csr_access_type_t domain_access; | |
60 | int depth; | |
61 | int num_fields; | |
62 | csr_field_t *fields; | |
63 | void *next; | |
64 | } csr_reg_t; | |
65 | ||
66 | typedef struct csrtab { | |
67 | const char *name; | |
68 | csr_reg_type_t type; | |
69 | uint64_t offset; | |
70 | uint64_t read_mask; | |
71 | uint64_t read_only_mask; | |
72 | uint64_t write_mask; | |
73 | uint64_t write_only_mask; | |
74 | uint64_t clear_mask; | |
75 | uint64_t set_mask; | |
76 | uint64_t power_on_reset; | |
77 | int depth; | |
78 | int num_fields; | |
79 | csr_access_type_t sp_access; | |
80 | csr_access_type_t jtag_access; | |
81 | csr_access_type_t domain_access; | |
82 | } csrtab_t; | |
83 | ||
84 | ||
85 | class common_csr{ | |
86 | ||
87 | protected: | |
88 | ||
89 | virtual csr_reg_type_t csr_offset2reg (uint64_t offset)=0; | |
90 | ||
91 | public: | |
92 | void init_csr_reg (csr_reg_t *csr_reg, csr_reg_type_t reg_type,csrtab_t *csrtab ,csr_field_t *csr_fields,uint64_t *cumsum); | |
93 | ||
94 | csr_reg_t *csr_get_reg (csr_reg_t **csr_list, uint64_t offset,csrtab_t *csrtab ,csr_field_t *csr_fields,uint64_t *cumsum); | |
95 | ||
96 | csr_reg_type_t csr_get_reg_by_name (char *regname,csrtab_t *csr_tab,uint64_t ncsrtab); | |
97 | ||
98 | csr_reg_t *csr_get_regtype (csr_reg_t **csr_list, csr_reg_type_t reg_type,csrtab_t *csrtab ,csr_field_t *csr_fields,uint64_t *cumsum); | |
99 | ||
100 | uint64_t csr_get_field (Module *csr_obj, csr_reg_t *csr_reg, const char *field_name, uint64_t offset); | |
101 | ||
102 | uint64_t csr_set_field (Module *csr_obj, csr_reg_t *csr_reg, const char *field_name, uint64_t field_value, uint64_t offset); | |
103 | ||
104 | int csr_read_reg (Module *csr_obj, csr_reg_t *csr_reg, uint64_t offset,uint64_t *value); | |
105 | ||
106 | int csr_write_reg (Module *csr_obj, csr_reg_t *csr_reg, uint64_t offset,uint64_t reg_value); | |
107 | ||
108 | uint64_t csr_value_get_field(Module *err_log, csr_reg_t *csr_reg, | |
109 | const char *field_name, uint64_t reg_value); | |
110 | ||
111 | int csr_field_changed(Module *err_log, csr_reg_t *csr_reg, const char *field_name, uint64_t reg_value1, uint64_t reg_value2); | |
112 | ||
113 | const char *csr_get_field_name(Module *csr_obj, csr_reg_t *csr_reg, int bit, uint64_t reg_value); | |
114 | bool csr_reset_reg(Module *csr_obj, csr_reg_t **csr_list,uint64_t value, csr_reg_type_t type,csrtab_t *csrtab ,csr_field_t *csr_fields,uint64_t *cumsum, uint64_t offset); | |
115 | ||
116 | bool csr_set_mask_field(Module *csr_obj,csr_reg_t **csr_list,csrtab_t *csrtab,csr_field_t *csr_fields,uint64_t *cumsum,csr_reg_t *csr_reg,const char *field_name,uint64_t field_value, csr_reg_type_t rw1c, csr_reg_type_t rw, uint64_t offset); | |
117 | ||
118 | bool csr_write_mask_reg(Module *csr_obj, csr_reg_t **csr_list,csr_reg_type_t type,csrtab_t *csrtab,csr_field_t *csr_fields,uint64_t *cumsum ,uint64_t old_value, uint64_t *new_value, csr_reg_type_t rw1c, csr_reg_type_t rw1s, csr_reg_type_t rw, uint64_t offset); | |
119 | }; | |
120 | #endif | |
121 |