1 | /* |
2 | * Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. |
3 | * |
4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU Lesser General Public License as published by |
6 | * the Free Software Foundation; either version 2.1 of the License, or |
7 | * (at your option) any later version. |
8 | * |
9 | * This program is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU Lesser General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU Lesser General Public License |
15 | * along with this program; if not, write to the Free Software |
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
17 | */ |
18 | |
19 | #ifndef __GRU_H__ |
20 | #define __GRU_H__ |
21 | |
22 | /* |
23 | * GRU architectural definitions |
24 | */ |
25 | #define GRU_CACHE_LINE_BYTES 64 |
26 | #define GRU_HANDLE_STRIDE 256 |
27 | #define GRU_CB_BASE 0 |
28 | #define GRU_DS_BASE 0x20000 |
29 | |
30 | /* |
31 | * Size used to map GRU GSeg |
32 | */ |
33 | #if defined(CONFIG_X86_64) |
34 | #define GRU_GSEG_PAGESIZE (256 * 1024UL) /* ZZZ 2MB ??? */ |
35 | #else |
36 | #error "Unsupported architecture" |
37 | #endif |
38 | |
39 | /* |
40 | * Structure for obtaining GRU resource information |
41 | */ |
42 | struct gru_chiplet_info { |
43 | int node; |
44 | int chiplet; |
45 | int blade; |
46 | int total_dsr_bytes; |
47 | int total_cbr; |
48 | int total_user_dsr_bytes; |
49 | int total_user_cbr; |
50 | int free_user_dsr_bytes; |
51 | int free_user_cbr; |
52 | }; |
53 | |
54 | /* |
55 | * Statictics kept for each context. |
56 | */ |
57 | struct gru_gseg_statistics { |
58 | unsigned long fmm_tlbmiss; |
59 | unsigned long upm_tlbmiss; |
60 | unsigned long tlbdropin; |
61 | unsigned long context_stolen; |
62 | unsigned long reserved[10]; |
63 | }; |
64 | |
65 | /* Flags for GRU options on the gru_create_context() call */ |
66 | /* Select one of the follow 4 options to specify how TLB misses are handled */ |
67 | #define GRU_OPT_MISS_DEFAULT 0x0000 /* Use default mode */ |
68 | #define GRU_OPT_MISS_USER_POLL 0x0001 /* User will poll CB for faults */ |
69 | #define GRU_OPT_MISS_FMM_INTR 0x0002 /* Send interrupt to cpu to |
70 | handle fault */ |
71 | #define GRU_OPT_MISS_FMM_POLL 0x0003 /* Use system polling thread */ |
72 | #define GRU_OPT_MISS_MASK 0x0003 /* Mask for TLB MISS option */ |
73 | |
74 | |
75 | |
76 | #endif /* __GRU_H__ */ |
77 | |