Back to home page

OSCL-LXR

 
 

    


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__ */