![]() |
|
|||
0001 /* 0002 * This file is subject to the terms and conditions of the GNU General Public 0003 * License. See the file "COPYING" in the main directory of this archive 0004 * for more details. 0005 * 0006 * Copyright (C) 2003-2017 Cavium, Inc. 0007 */ 0008 0009 #ifndef __CVMX_BOOT_VECTOR_H__ 0010 #define __CVMX_BOOT_VECTOR_H__ 0011 0012 #include <asm/octeon/octeon.h> 0013 0014 /* 0015 * The boot vector table is made up of an array of 1024 elements of 0016 * struct cvmx_boot_vector_element. There is one entry for each 0017 * possible MIPS CPUNum, indexed by the CPUNum. 0018 * 0019 * Once cvmx_boot_vector_get() returns a non-NULL value (indicating 0020 * success), NMI to a core will cause execution to transfer to the 0021 * target_ptr location for that core's entry in the vector table. 0022 * 0023 * The struct cvmx_boot_vector_element fields app0, app1, and app2 can 0024 * be used by the application that has set the target_ptr in any 0025 * application specific manner, they are not touched by the vectoring 0026 * code. 0027 * 0028 * The boot vector code clobbers the CP0_DESAVE register, and on 0029 * OCTEON II and later CPUs also clobbers CP0_KScratch2. All GP 0030 * registers are preserved, except on pre-OCTEON II CPUs, where k1 is 0031 * clobbered. 0032 * 0033 */ 0034 0035 0036 /* 0037 * Applications install the boot bus code in cvmx-boot-vector.c, which 0038 * uses this magic: 0039 */ 0040 #define OCTEON_BOOT_MOVEABLE_MAGIC1 0xdb00110ad358eacdull 0041 0042 struct cvmx_boot_vector_element { 0043 /* kseg0 or xkphys address of target code. */ 0044 uint64_t target_ptr; 0045 /* Three application specific arguments. */ 0046 uint64_t app0; 0047 uint64_t app1; 0048 uint64_t app2; 0049 }; 0050 0051 struct cvmx_boot_vector_element *cvmx_boot_vector_get(void); 0052 0053 #endif /* __CVMX_BOOT_VECTOR_H__ */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |
![]() ![]() |