GNU Linux-libre 6.8.7-gnu
[releases.git] / drivers / misc / sgi-gru / gru.h
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__ */