14baa9922SRussell King /* 24baa9922SRussell King * arch/arm/include/asm/mach/arch.h 34baa9922SRussell King * 44baa9922SRussell King * Copyright (C) 2000 Russell King 54baa9922SRussell King * 64baa9922SRussell King * This program is free software; you can redistribute it and/or modify 74baa9922SRussell King * it under the terms of the GNU General Public License version 2 as 84baa9922SRussell King * published by the Free Software Foundation. 94baa9922SRussell King */ 104baa9922SRussell King 11b382b940SJon Medhurst #include <linux/types.h> 12b382b940SJon Medhurst 134baa9922SRussell King #ifndef __ASSEMBLY__ 1416d6d5b0SRobin Holt #include <linux/reboot.h> 154baa9922SRussell King 164baa9922SRussell King struct tag; 174baa9922SRussell King struct meminfo; 181a1f2be2SFabio Estevam struct pt_regs; 19abcee5fbSMarc Zyngier struct smp_operations; 20abcee5fbSMarc Zyngier #ifdef CONFIG_SMP 21abcee5fbSMarc Zyngier #define smp_ops(ops) (&(ops)) 22b382b940SJon Medhurst #define smp_init_ops(ops) (&(ops)) 23abcee5fbSMarc Zyngier #else 24abcee5fbSMarc Zyngier #define smp_ops(ops) (struct smp_operations *)NULL 25b382b940SJon Medhurst #define smp_init_ops(ops) (bool (*)(void))NULL 26abcee5fbSMarc Zyngier #endif 274baa9922SRussell King 284baa9922SRussell King struct machine_desc { 294baa9922SRussell King unsigned int nr; /* architecture number */ 304baa9922SRussell King const char *name; /* architecture name */ 312bb9839eSNicolas Pitre unsigned long atag_offset; /* tagged list (relative) */ 327b482c83SUwe Kleine-König const char *const *dt_compat; /* array of device tree 3393c02ab4SGrant Likely * 'compatible' strings */ 344baa9922SRussell King 35d71e3eb5SNicolas Pitre unsigned int nr_irqs; /* number of IRQs */ 36d71e3eb5SNicolas Pitre 374fddcaebSNicolas Pitre #ifdef CONFIG_ZONE_DMA 384fddcaebSNicolas Pitre unsigned long dma_zone_size; /* size of DMA-able area */ 394fddcaebSNicolas Pitre #endif 404fddcaebSNicolas Pitre 414baa9922SRussell King unsigned int video_start; /* start of video RAM */ 424baa9922SRussell King unsigned int video_end; /* end of video RAM */ 434baa9922SRussell King 44b44c350dSRussell King unsigned char reserve_lp0 :1; /* never has lp0 */ 45b44c350dSRussell King unsigned char reserve_lp1 :1; /* never has lp1 */ 46b44c350dSRussell King unsigned char reserve_lp2 :1; /* never has lp2 */ 4716d6d5b0SRobin Holt enum reboot_mode reboot_mode; /* default restart mode */ 48abcee5fbSMarc Zyngier struct smp_operations *smp; /* SMP operations */ 49b382b940SJon Medhurst bool (*smp_init)(void); 500744a3eeSRussell King void (*fixup)(struct tag *, char **, 514baa9922SRussell King struct meminfo *); 5298c672cfSRussell King void (*reserve)(void);/* reserve mem blocks */ 534baa9922SRussell King void (*map_io)(void);/* IO mapping function */ 54dec12e62SRussell King void (*init_early)(void); 554baa9922SRussell King void (*init_irq)(void); 566bb27d73SStephen Warren void (*init_time)(void); 574baa9922SRussell King void (*init_machine)(void); 5890de4137SShawn Guo void (*init_late)(void); 5952108641Seric miao #ifdef CONFIG_MULTI_IRQ_HANDLER 6052108641Seric miao void (*handle_irq)(struct pt_regs *); 6152108641Seric miao #endif 627b6d864bSRobin Holt void (*restart)(enum reboot_mode, const char *); 634baa9922SRussell King }; 644baa9922SRussell King 654baa9922SRussell King /* 668ff1443cSRussell King * Current machine - only accessible during boot. 678ff1443cSRussell King */ 68ff69a4c8SRussell King extern const struct machine_desc *machine_desc; 698ff1443cSRussell King 708ff1443cSRussell King /* 716291319dSGrant Likely * Machine type table - also only accessible during boot 726291319dSGrant Likely */ 73ff69a4c8SRussell King extern const struct machine_desc __arch_info_begin[], __arch_info_end[]; 746291319dSGrant Likely #define for_each_machine_desc(p) \ 756291319dSGrant Likely for (p = __arch_info_begin; p < __arch_info_end; p++) 766291319dSGrant Likely 776291319dSGrant Likely /* 784baa9922SRussell King * Set of macros to define architecture features. This is built into 794baa9922SRussell King * a table by the linker. 804baa9922SRussell King */ 814baa9922SRussell King #define MACHINE_START(_type,_name) \ 824baa9922SRussell King static const struct machine_desc __mach_desc_##_type \ 834baa9922SRussell King __used \ 844baa9922SRussell King __attribute__((__section__(".arch.info.init"))) = { \ 854baa9922SRussell King .nr = MACH_TYPE_##_type, \ 864baa9922SRussell King .name = _name, 874baa9922SRussell King 884baa9922SRussell King #define MACHINE_END \ 894baa9922SRussell King }; 904baa9922SRussell King 9185cad1b0SGrant Likely #define DT_MACHINE_START(_name, _namestr) \ 9285cad1b0SGrant Likely static const struct machine_desc __mach_desc_##_name \ 9385cad1b0SGrant Likely __used \ 9485cad1b0SGrant Likely __attribute__((__section__(".arch.info.init"))) = { \ 9585cad1b0SGrant Likely .nr = ~0, \ 9685cad1b0SGrant Likely .name = _namestr, 9785cad1b0SGrant Likely 984baa9922SRussell King #endif 99