2013-01-18 15:12:26 +05:30
/*
* Copyright ( C ) 2012 Synopsys , Inc . ( www . synopsys . com )
*
* based on METAG mach / arch . h ( which in turn was based on ARM )
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef _ASM_ARC_MACH_DESC_H_
# define _ASM_ARC_MACH_DESC_H_
/**
* struct machine_desc - Board specific callbacks , called from ARC common code
* Provided by each ARC board using MACHINE_START ( ) / MACHINE_END ( ) , so
* a multi - platform kernel builds with array of such descriptors .
* We extend the early DT scan to also match the DT ' s " compatible " string
* against the @ dt_compat of all such descriptors , and one with highest
* " DT score " is selected as global @ machine_desc .
*
* @ name : Board / SoC name
* @ dt_compat : Array of device tree ' compatible ' strings
* ( XXX : although only 1 st entry is looked at )
* @ init_early : Very early callback [ called from setup_arch ( ) ]
2015-12-17 12:22:21 +05:30
* @ init_per_cpu : for each CPU as it is coming up ( SMP as well as UP )
2013-01-18 15:12:26 +05:30
* [ ( M ) : init_IRQ ( ) , ( o ) : start_kernel_secondary ( ) ]
* @ init_machine : arch initcall level callback ( e . g . populate static
* platform devices or parse Devicetree )
* @ init_late : Late initcall level callback
*
*/
struct machine_desc {
const char * name ;
const char * * dt_compat ;
void ( * init_early ) ( void ) ;
# ifdef CONFIG_SMP
2015-12-17 12:22:21 +05:30
void ( * init_per_cpu ) ( unsigned int ) ;
2013-01-18 15:12:26 +05:30
# endif
void ( * init_machine ) ( void ) ;
void ( * init_late ) ( void ) ;
} ;
/*
* Current machine - only accessible during boot .
*/
2013-08-27 21:43:12 -05:00
extern const struct machine_desc * machine_desc ;
2013-01-18 15:12:26 +05:30
/*
* Machine type table - also only accessible during boot
*/
2013-08-27 21:43:12 -05:00
extern const struct machine_desc __arch_info_begin [ ] , __arch_info_end [ ] ;
2013-01-18 15:12:26 +05:30
/*
* Set of macros to define architecture features .
* This is built into a table by the linker .
*/
# define MACHINE_START(_type, _name) \
static const struct machine_desc __mach_desc_ # # _type \
__used \
__attribute__ ( ( __section__ ( " .arch.info.init " ) ) ) = { \
. name = _name ,
# define MACHINE_END \
} ;
2013-08-27 21:43:12 -05:00
extern const struct machine_desc * setup_machine_fdt ( void * dt ) ;
2013-02-21 17:37:06 +05:30
2013-01-18 15:12:26 +05:30
# endif