cvmx-sysinfo.h revision 210284
1210284Sjmallett/***********************license start***************
2210284Sjmallett *  Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights
3210284Sjmallett *  reserved.
4210284Sjmallett *
5210284Sjmallett *
6210284Sjmallett *  Redistribution and use in source and binary forms, with or without
7210284Sjmallett *  modification, are permitted provided that the following conditions are
8210284Sjmallett *  met:
9210284Sjmallett *
10210284Sjmallett *      * Redistributions of source code must retain the above copyright
11210284Sjmallett *        notice, this list of conditions and the following disclaimer.
12210284Sjmallett *
13210284Sjmallett *      * Redistributions in binary form must reproduce the above
14210284Sjmallett *        copyright notice, this list of conditions and the following
15210284Sjmallett *        disclaimer in the documentation and/or other materials provided
16210284Sjmallett *        with the distribution.
17210284Sjmallett *
18210284Sjmallett *      * Neither the name of Cavium Networks nor the names of
19210284Sjmallett *        its contributors may be used to endorse or promote products
20210284Sjmallett *        derived from this software without specific prior written
21210284Sjmallett *        permission.
22210284Sjmallett *
23210284Sjmallett *  TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
24210284Sjmallett *  AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS
25210284Sjmallett *  OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH
26210284Sjmallett *  RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
27210284Sjmallett *  REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
28210284Sjmallett *  DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES
29210284Sjmallett *  OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR
30210284Sjmallett *  PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET
31210284Sjmallett *  POSSESSION OR CORRESPONDENCE TO DESCRIPTION.  THE ENTIRE RISK ARISING OUT
32210284Sjmallett *  OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
33210284Sjmallett *
34210284Sjmallett *
35210284Sjmallett *  For any questions regarding licensing please contact marketing@caviumnetworks.com
36210284Sjmallett *
37210284Sjmallett ***********************license end**************************************/
38210284Sjmallett
39210284Sjmallett
40210284Sjmallett
41210284Sjmallett
42210284Sjmallett
43210284Sjmallett
44210284Sjmallett/**
45210284Sjmallett * @file
46210284Sjmallett *
47210284Sjmallett * This module provides system/board information obtained by the bootloader.
48210284Sjmallett *
49210284Sjmallett * <hr>$Revision: 41586 $<hr>
50210284Sjmallett *
51210284Sjmallett */
52210284Sjmallett
53210284Sjmallett
54210284Sjmallett#ifndef __CVMX_SYSINFO_H__
55210284Sjmallett#define __CVMX_SYSINFO_H__
56210284Sjmallett
57210284Sjmallett#include "cvmx-app-init.h"
58210284Sjmallett
59210284Sjmallett#ifdef	__cplusplus
60210284Sjmallettextern "C" {
61210284Sjmallett#endif
62210284Sjmallett
63210284Sjmallett#define OCTEON_SERIAL_LEN 20
64210284Sjmallett/**
65210284Sjmallett * Structure describing application specific information.
66210284Sjmallett * __cvmx_app_init() populates this from the cvmx boot descriptor.
67210284Sjmallett * This structure is private to simple executive applications, so
68210284Sjmallett * no versioning is required.
69210284Sjmallett *
70210284Sjmallett * This structure must be provided with some fields set in order to use
71210284Sjmallett * simple executive functions in other applications (Linux kernel, u-boot, etc.)
72210284Sjmallett * The cvmx_sysinfo_minimal_initialize() function is provided to set the required values
73210284Sjmallett * in these cases.
74210284Sjmallett *
75210284Sjmallett *
76210284Sjmallett */
77210284Sjmalletttypedef struct {
78210284Sjmallett    /* System wide variables */
79210284Sjmallett    uint64_t system_dram_size;  /**< installed DRAM in system, in bytes */
80210284Sjmallett    void *phy_mem_desc_ptr;  /**< ptr to memory descriptor block */
81210284Sjmallett
82210284Sjmallett    /* Application image specific variables */
83210284Sjmallett    uint64_t stack_top;  /**< stack top address (virtual) */
84210284Sjmallett    uint64_t heap_base;  /**< heap base address (virtual) */
85210284Sjmallett    uint32_t stack_size; /**< stack size in bytes */
86210284Sjmallett    uint32_t heap_size;  /**< heap size in bytes */
87210284Sjmallett    uint32_t core_mask;  /**< coremask defining cores running application */
88210284Sjmallett    uint32_t init_core;  /**< Deprecated, use cvmx_coremask_first_core() to select init core */
89210284Sjmallett    uint64_t exception_base_addr;  /**< exception base address, as set by bootloader */
90210284Sjmallett    uint32_t cpu_clock_hz;     /**< cpu clock speed in hz */
91210284Sjmallett    uint32_t dram_data_rate_hz;  /**< dram data rate in hz (data rate = 2 * clock rate */
92210284Sjmallett
93210284Sjmallett    uint16_t board_type;
94210284Sjmallett    uint8_t  board_rev_major;
95210284Sjmallett    uint8_t  board_rev_minor;
96210284Sjmallett    uint8_t  mac_addr_base[6];
97210284Sjmallett    uint8_t  mac_addr_count;
98210284Sjmallett    char     board_serial_number[OCTEON_SERIAL_LEN];
99210284Sjmallett    /* Several boards support compact flash on the Octeon boot bus.  The CF
100210284Sjmallett    ** memory spaces may be mapped to different addresses on different boards.
101210284Sjmallett    ** These values will be 0 if CF is not present.
102210284Sjmallett    ** Note that these addresses are physical addresses, and it is up to the application
103210284Sjmallett    ** to use the proper addressing mode (XKPHYS, KSEG0, etc.)*/
104210284Sjmallett    uint64_t compact_flash_common_base_addr;
105210284Sjmallett    uint64_t compact_flash_attribute_base_addr;
106210284Sjmallett    /* Base address of the LED display (as on EBT3000 board)
107210284Sjmallett    ** This will be 0 if LED display not present.
108210284Sjmallett    ** Note that this address is a physical address, and it is up to the application
109210284Sjmallett    ** to use the proper addressing mode (XKPHYS, KSEG0, etc.)*/
110210284Sjmallett    uint64_t led_display_base_addr;
111210284Sjmallett    uint32_t dfa_ref_clock_hz;  /**< DFA reference clock in hz (if applicable)*/
112210284Sjmallett    uint32_t bootloader_config_flags;  /**< configuration flags from bootloader */
113210284Sjmallett    uint8_t  console_uart_num;         /** < Uart number used for console */
114210284Sjmallett} cvmx_sysinfo_t;
115210284Sjmallett
116210284Sjmallett
117210284Sjmallett/**
118210284Sjmallett * This function returns the system/board information as obtained
119210284Sjmallett * by the bootloader.
120210284Sjmallett *
121210284Sjmallett *
122210284Sjmallett * @return  Pointer to the boot information structure
123210284Sjmallett *
124210284Sjmallett */
125210284Sjmallett
126210284Sjmallettextern cvmx_sysinfo_t * cvmx_sysinfo_get(void);
127210284Sjmallett
128210284Sjmallett
129210284Sjmallett/**
130210284Sjmallett * This function is used in non-simple executive environments (such as Linux kernel, u-boot, etc.)
131210284Sjmallett * to configure the minimal fields that are required to use
132210284Sjmallett * simple executive files directly.
133210284Sjmallett *
134210284Sjmallett * Locking (if required) must be handled outside of this
135210284Sjmallett * function
136210284Sjmallett *
137210284Sjmallett * @param phy_mem_desc_ptr
138210284Sjmallett *                   Pointer to global physical memory descriptor (bootmem descriptor)
139210284Sjmallett * @param board_type Octeon board type enumeration
140210284Sjmallett *
141210284Sjmallett * @param board_rev_major
142210284Sjmallett *                   Board major revision
143210284Sjmallett * @param board_rev_minor
144210284Sjmallett *                   Board minor revision
145210284Sjmallett * @param cpu_clock_hz
146210284Sjmallett *                   CPU clock freqency in hertz
147210284Sjmallett *
148210284Sjmallett * @return 0: Failure
149210284Sjmallett *         1: success
150210284Sjmallett */
151210284Sjmallettextern int cvmx_sysinfo_minimal_initialize(void *phy_mem_desc_ptr, uint16_t board_type, uint8_t board_rev_major,
152210284Sjmallett                                    uint8_t board_rev_minor, uint32_t cpu_clock_hz);
153210284Sjmallett
154210284Sjmallett#ifdef CVMX_BUILD_FOR_LINUX_USER
155210284Sjmallett/**
156210284Sjmallett * Initialize the sysinfo structure when running on
157210284Sjmallett * Octeon under Linux userspace
158210284Sjmallett */
159210284Sjmallettextern void cvmx_sysinfo_linux_userspace_initialize(void);
160210284Sjmallett#endif
161210284Sjmallett
162210284Sjmallett#ifdef	__cplusplus
163210284Sjmallett}
164210284Sjmallett#endif
165210284Sjmallett
166210284Sjmallett#endif /* __CVMX_SYSINFO_H__ */
167