Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | /* |
2 | * ========== Copyright Header Begin ========================================== | |
3 | * | |
4 | * OpenSPARC T2 Processor File: l2warm.h | |
5 | * Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved | |
6 | * 4150 Network Circle, Santa Clara, California 95054, U.S.A. | |
7 | * | |
8 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or modify | |
11 | * it under the terms of the GNU General Public License as published by | |
12 | * the Free Software Foundation; version 2 of the License. | |
13 | * | |
14 | * This program is distributed in the hope that it will be useful, | |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | * GNU General Public License for more details. | |
18 | * | |
19 | * You should have received a copy of the GNU General Public License | |
20 | * along with this program; if not, write to the Free Software | |
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
22 | * | |
23 | * For the avoidance of doubt, and except that if any non-GPL license | |
24 | * choice is available it will apply instead, Sun elects to use only | |
25 | * the General Public License version 2 (GPLv2) at this time for any | |
26 | * software where a choice of GPL license versions is made | |
27 | * available with the language indicating that GPLv2 or any later version | |
28 | * may be used, or where a choice of which version of the GPL is applied is | |
29 | * otherwise unspecified. | |
30 | * | |
31 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, | |
32 | * CA 95054 USA or visit www.sun.com if you need additional information or | |
33 | * have any questions. | |
34 | * | |
35 | * | |
36 | * ========== Copyright Header End ============================================ | |
37 | */ | |
38 | #ifndef _L2WARM_H_ | |
39 | #define _L2WARM_H_ | |
40 | #include "global.h" | |
41 | #include "b_ary.h" | |
42 | #include "list.h" | |
43 | #include "utility.h" | |
44 | ||
45 | //macro here. | |
46 | ||
47 | ||
48 | //========================================================================= | |
49 | // N2 L2 address map | |
50 | // 8 Banks 4 Banks 2 Banks | |
51 | // Tag : 39:18 38:17 37:16 | |
52 | // Set 17:9 16:8 15:7 | |
53 | // Bank 8:6 7:6 6 | |
54 | // DATA 5:0 5:0 5:0 | |
55 | // | |
56 | //DATA SECTION | |
57 | //top_left: top_right: bot_left: bot_right: | |
58 | // way07_00: | |
59 | // set_bot :32 | |
60 | // set_top :32 | |
61 | // way70_01: | |
62 | // set_bot :32 | |
63 | // set_top :32 | |
64 | // way158_00: | |
65 | // set_bot :32 | |
66 | // set_top :32 | |
67 | // way158_01: | |
68 | // set_bot :32 | |
69 | // set_top :32 | |
70 | static struct l2warm_variables l2warm_vars; | |
71 | //vuad temporay data. | |
72 | void l2warm_set_init(); | |
73 | void l2warm_slam_data(int row); | |
74 | void l2warm_parts(int row, int etc, char* unpk); | |
75 | //generate tag & data ecc. | |
76 | int l2warm_tecc(int tag); | |
77 | int l2warm_decc(int data); | |
78 | //slam tag, data, and vuad | |
79 | void l2warm_fillerOdd(char* aval, char*bval, int val, int num); | |
80 | void l2warm_fillerEven(char* aval, char*bval, int val, int add); | |
81 | void l2warm_filler13(char* aval, char*bval, int cval, int num); | |
82 | void l2warm_filler13o(char* aval, char*bval, int cval); | |
83 | void l2warm_slam_tag(); | |
84 | void l2warm_slam_real_data(char* data, int subbank); | |
85 | void l2warm_slam_vuad(); | |
86 | void l2warm_slam_value(int num); | |
87 | void l2warm_extract_vuad(int vuad_idx); | |
88 | void l2warm_integrate_vuad(int vuad_idx, int ecc); | |
89 | void l2warm_unpack(); | |
90 | void l2warm_pack(); | |
91 | void l2warm_adjust_data(int which_shift); | |
92 | void l2warm_updated_ua(int idx, int vuadarray, int vuad); | |
93 | void l2warm_updated_vd(int idx, int vuadarray, int vuad); | |
94 | void l2warm_get_Mode(KeyType* addr); | |
95 | void l2warm_setRdancy(int arg); | |
96 | ||
97 | void l2warm_replace(char* str); | |
98 | void l2warm_rmhexa(char* buf); | |
99 | //modify vuad bits | |
100 | int l2warm_percent(int* taken, int* not_taken); | |
101 | int l2warm_used(int vuad); | |
102 | int l2warm_alloc(int vuad); | |
103 | //modify vuad bits | |
104 | int l2warm_valid(int vuad); | |
105 | int l2warm_dirty(int vuad); | |
106 | int l2warm_even_parity(int data, int num); | |
107 | void l2warm_error_enject_three(char* data, int low, int high, int parity); | |
108 | void l2warm_error_enject_two(int* data, int low, int high); | |
109 | int l2warm_error_enject_one(int); | |
110 | long long l2warm_error_enject_long(long long bits); | |
111 | int l2warm_check_parity_two(long long bits, int num); | |
112 | int l2warm_check_parity(); | |
113 | int l2warm_range(int max); | |
114 | //do invalidate | |
115 | ||
116 | void l2warm_clean_reg(int loc); | |
117 | void l2warm_get_tag(); | |
118 | void l2warm_get_data(); | |
119 | void l2warm_gen_addr(); | |
120 | void l2warm_pack_data(char*); | |
121 | void l2warm_pack_4bytes(int idx, char* unpk); | |
122 | int l2warm_copy(char* buf, char* cbuf, int idx); | |
123 | long long l2warm_getEight(char *buf); | |
124 | void l2warm_l2_tag_update(int loc); | |
125 | void l2warm_slam_tag_error(); | |
126 | void l2warm_slam_data_error(); | |
127 | void l2warm_l2_data_update(int wren, int loc); | |
128 | long long l2warm_get_long(int loc); | |
129 | void l2warm_set(); | |
130 | //slam tag and data into memory. | |
131 | bool l2warm_slam(KeyType addr, char* data); | |
132 | void l2warm_l2_clear_vuad(int bank); | |
133 | void l2warm_warm_all_cache(b_tree_node_ptr* mem); | |
134 | //run time | |
135 | void l2warm_error_enject_void(); | |
136 | void l2warm_l2_invalidate(int bank); | |
137 | void l2warm_l1_invalidate(int ivld, int dvld, int cp_loc); | |
138 | //when bypass is deasserted, slam ramdom data into dram. | |
139 | void l2warm_stale_data(int loc); | |
140 | void l2warm_debug(); | |
141 | ||
142 | #endif |