diff options
Diffstat (limited to 'arch/mips/cavium-octeon/executive/cvmx-sysinfo.c')
-rw-r--r-- | arch/mips/cavium-octeon/executive/cvmx-sysinfo.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/arch/mips/cavium-octeon/executive/cvmx-sysinfo.c b/arch/mips/cavium-octeon/executive/cvmx-sysinfo.c new file mode 100644 index 000000000000..4812370706a1 --- /dev/null +++ b/arch/mips/cavium-octeon/executive/cvmx-sysinfo.c | |||
@@ -0,0 +1,116 @@ | |||
1 | /***********************license start*************** | ||
2 | * Author: Cavium Networks | ||
3 | * | ||
4 | * Contact: support@caviumnetworks.com | ||
5 | * This file is part of the OCTEON SDK | ||
6 | * | ||
7 | * Copyright (c) 2003-2008 Cavium Networks | ||
8 | * | ||
9 | * This file is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License, Version 2, as | ||
11 | * published by the Free Software Foundation. | ||
12 | * | ||
13 | * This file is distributed in the hope that it will be useful, but | ||
14 | * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty | ||
15 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or | ||
16 | * NONINFRINGEMENT. See the GNU General Public License for more | ||
17 | * details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this file; if not, write to the Free Software | ||
21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
22 | * or visit http://www.gnu.org/licenses/. | ||
23 | * | ||
24 | * This file may also be available under a different license from Cavium. | ||
25 | * Contact Cavium Networks for more information | ||
26 | ***********************license end**************************************/ | ||
27 | |||
28 | /* | ||
29 | * This module provides system/board/application information obtained | ||
30 | * by the bootloader. | ||
31 | */ | ||
32 | |||
33 | #include <asm/octeon/cvmx.h> | ||
34 | #include <asm/octeon/cvmx-spinlock.h> | ||
35 | #include <asm/octeon/cvmx-sysinfo.h> | ||
36 | |||
37 | /** | ||
38 | * This structure defines the private state maintained by sysinfo module. | ||
39 | * | ||
40 | */ | ||
41 | static struct { | ||
42 | struct cvmx_sysinfo sysinfo; /* system information */ | ||
43 | cvmx_spinlock_t lock; /* mutex spinlock */ | ||
44 | |||
45 | } state = { | ||
46 | .lock = CVMX_SPINLOCK_UNLOCKED_INITIALIZER | ||
47 | }; | ||
48 | |||
49 | |||
50 | /* | ||
51 | * Global variables that define the min/max of the memory region set | ||
52 | * up for 32 bit userspace access. | ||
53 | */ | ||
54 | uint64_t linux_mem32_min; | ||
55 | uint64_t linux_mem32_max; | ||
56 | uint64_t linux_mem32_wired; | ||
57 | uint64_t linux_mem32_offset; | ||
58 | |||
59 | /** | ||
60 | * This function returns the application information as obtained | ||
61 | * by the bootloader. This provides the core mask of the cores | ||
62 | * running the same application image, as well as the physical | ||
63 | * memory regions available to the core. | ||
64 | * | ||
65 | * Returns Pointer to the boot information structure | ||
66 | * | ||
67 | */ | ||
68 | struct cvmx_sysinfo *cvmx_sysinfo_get(void) | ||
69 | { | ||
70 | return &(state.sysinfo); | ||
71 | } | ||
72 | |||
73 | /** | ||
74 | * This function is used in non-simple executive environments (such as | ||
75 | * Linux kernel, u-boot, etc.) to configure the minimal fields that | ||
76 | * are required to use simple executive files directly. | ||
77 | * | ||
78 | * Locking (if required) must be handled outside of this | ||
79 | * function | ||
80 | * | ||
81 | * @phy_mem_desc_ptr: | ||
82 | * Pointer to global physical memory descriptor | ||
83 | * (bootmem descriptor) @board_type: Octeon board | ||
84 | * type enumeration | ||
85 | * | ||
86 | * @board_rev_major: | ||
87 | * Board major revision | ||
88 | * @board_rev_minor: | ||
89 | * Board minor revision | ||
90 | * @cpu_clock_hz: | ||
91 | * CPU clock freqency in hertz | ||
92 | * | ||
93 | * Returns 0: Failure | ||
94 | * 1: success | ||
95 | */ | ||
96 | int cvmx_sysinfo_minimal_initialize(void *phy_mem_desc_ptr, | ||
97 | uint16_t board_type, | ||
98 | uint8_t board_rev_major, | ||
99 | uint8_t board_rev_minor, | ||
100 | uint32_t cpu_clock_hz) | ||
101 | { | ||
102 | |||
103 | /* The sysinfo structure was already initialized */ | ||
104 | if (state.sysinfo.board_type) | ||
105 | return 0; | ||
106 | |||
107 | memset(&(state.sysinfo), 0x0, sizeof(state.sysinfo)); | ||
108 | state.sysinfo.phy_mem_desc_ptr = phy_mem_desc_ptr; | ||
109 | state.sysinfo.board_type = board_type; | ||
110 | state.sysinfo.board_rev_major = board_rev_major; | ||
111 | state.sysinfo.board_rev_minor = board_rev_minor; | ||
112 | state.sysinfo.cpu_clock_hz = cpu_clock_hz; | ||
113 | |||
114 | return 1; | ||
115 | } | ||
116 | |||