import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / arch / ia64 / sn / fakeprom / fpmem.h
1 /* 
2  *
3  * This file is subject to the terms and conditions of the GNU General Public
4  * License.  See the file "COPYING" in the main directory of this archive
5  * for more details.
6  *
7  * Copyright (C) 2000-2003 Silicon Graphics, Inc.  All rights reserved.
8  */
9
10 #include <linux/config.h>
11
12 /*
13  * Structure of the mem config of the node as a SN MI reg
14  * Medusa supports this reg config.
15  *
16  * BankSize nibble to bank size mapping
17  *
18  *      1 - 64 MB
19  *      2 - 128 MB
20  *      3 - 256 MB
21  *      4 - 512 MB
22  *      5 - 1024 MB (1GB)
23  */
24
25 #define MBSHIFT                         20
26
27 #ifdef SGI_SN2
28 typedef struct node_memmap_s
29 {
30         unsigned int    b0size  :3,     /* 0-2   bank 0 size */
31                         b0dou   :1,     /* 3     bank 0 is 2-sided */
32                         hack0   :4,     /* 4-7   bank 0 hack */
33                         b1size  :3,     /* 8-10  bank 1 size */
34                         b1dou   :1,     /* 11    bank 1 is 2-sided */
35                         hack1   :4,     /* 12-15 bank 1 hack */
36                         b2size  :3,     /* 16-18 bank 2 size */
37                         b2dou   :1,     /* 19    bank 1 is 2-sided */
38                         hack2   :4,     /* 20-23 bank 2 hack */
39                         b3size  :3,     /* 24-26 bank 3 size */
40                         b3dou   :1,     /* 27    bank 3 is 2-sided */
41                         hack3   :4;     /* 28-31 bank 3 hack */
42 } node_memmap_t ;
43
44 #define PROXIMITY_DOMAIN(nasid) (((nasid)>>1) & 255)
45 #define SN2_BANK_SIZE_SHIFT             (MBSHIFT+6)     /* 64 MB */
46 #define MD_BANKS_PER_NODE 4
47 #define MD_BANKSIZE                     (1UL << 34)
48
49 #define MAX_SN_NODES            256
50 #define MAX_LSAPICS             512
51 #define MAX_CPUS_NODE           4
52 #define MAX_CPUS                (MAX_CPUS_NODE*MAX_SN_NODES)
53 #define CPUS_PER_FSB            2
54 #define CPUS_PER_FSB_MASK       (CPUS_PER_FSB-1)
55 #define MAX_NASID               2048
56
57 #endif
58
59 #define FPROM_BUG()             do {while (1);} while (0)
60
61 typedef struct sn_memmap_s
62 {
63         short           nasid ;
64         short           cpuconfig;
65         node_memmap_t   node_memmap ;
66 } sn_memmap_t ;
67
68 typedef struct sn_config_s
69 {
70         int             cpus;
71         int             nodes;
72         sn_memmap_t     memmap[1];              /* start of array */
73 } sn_config_t;
74
75 struct acpi_table_memory_affinity;
76
77 extern long base_nasid;
78
79 extern void build_init(unsigned long);
80 extern int build_efi_memmap(void *, int);
81 extern int GetNumNodes(void);
82 extern int GetNumCpus(void);
83 extern int IsCpuPresent(int, int);
84 extern int GetNasid(int);
85 extern void* build_memory_srat(struct acpi_table_memory_affinity *);
86 extern void GetLogicalCpu(int, int *, int *);