Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / devices / common / include / csr_common.h
CommitLineData
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
30typedef int csr_reg_type_t;
31
32typedef enum {
33 NO_ACCESS_T,
34 READ_ACCESS_T,
35 FULL_ACCESS_T
36} csr_access_type_t;
37
38typedef struct {
39 short l;
40 short r;
41 const char *name;
42} csr_field_t;
43
44
45typedef 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
66typedef 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
85class 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