x86: Add timer_init to x86_init_ops
[firefly-linux-kernel-4.4.55.git] / arch / x86 / include / asm / x86_init.h
1 #ifndef _ASM_X86_PLATFORM_H
2 #define _ASM_X86_PLATFORM_H
3
4 #include <asm/pgtable_types.h>
5
6 struct mpc_bus;
7 struct mpc_cpu;
8 struct mpc_table;
9
10 /**
11  * struct x86_init_mpparse - platform specific mpparse ops
12  * @mpc_record:                 platform specific mpc record accounting
13  * @setup_ioapic_ids:           platform specific ioapic id override
14  * @mpc_apic_id:                platform specific mpc apic id assignment
15  * @smp_read_mpc_oem:           platform specific oem mpc table setup
16  * @mpc_oem_pci_bus:            platform specific pci bus setup (default NULL)
17  * @mpc_oem_bus_info:           platform specific mpc bus info
18  * @find_smp_config:            find the smp configuration
19  * @get_smp_config:             get the smp configuration
20  */
21 struct x86_init_mpparse {
22         void (*mpc_record)(unsigned int mode);
23         void (*setup_ioapic_ids)(void);
24         int (*mpc_apic_id)(struct mpc_cpu *m);
25         void (*smp_read_mpc_oem)(struct mpc_table *mpc);
26         void (*mpc_oem_pci_bus)(struct mpc_bus *m);
27         void (*mpc_oem_bus_info)(struct mpc_bus *m, char *name);
28         void (*find_smp_config)(unsigned int reserve);
29         void (*get_smp_config)(unsigned int early);
30 };
31
32 /**
33  * struct x86_init_resources - platform specific resource related ops
34  * @probe_roms:                 probe BIOS roms
35  * @reserve_resources:          reserve the standard resources for the
36  *                              platform
37  * @reserve_ebda_region:        reserve the extended bios data area
38  * @memory_setup:               platform specific memory setup
39  *
40  */
41 struct x86_init_resources {
42         void (*probe_roms)(void);
43         void (*reserve_resources)(void);
44         void (*reserve_ebda_region)(void);
45         char *(*memory_setup)(void);
46 };
47
48 /**
49  * struct x86_init_irqs - platform specific interrupt setup
50  * @pre_vector_init:            init code to run before interrupt vectors
51  *                              are set up.
52  * @intr_init:                  interrupt init code
53  * @trap_init:                  platform specific trap setup
54  */
55 struct x86_init_irqs {
56         void (*pre_vector_init)(void);
57         void (*intr_init)(void);
58         void (*trap_init)(void);
59 };
60
61 /**
62  * struct x86_init_oem - oem platform specific customizing functions
63  * @arch_setup:                 platform specific architecure setup
64  * @banner:                     print a platform specific banner
65  */
66 struct x86_init_oem {
67         void (*arch_setup)(void);
68         void (*banner)(void);
69 };
70
71 /**
72  * struct x86_init_paging - platform specific paging functions
73  * @pagetable_setup_start:      platform specific pre paging_init() call
74  * @pagetable_setup_done:       platform specific post paging_init() call
75  */
76 struct x86_init_paging {
77         void (*pagetable_setup_start)(pgd_t *base);
78         void (*pagetable_setup_done)(pgd_t *base);
79 };
80
81 /**
82  * struct x86_init_timers - platform specific timer setup
83  * @setup_perpcu_clockev:       set up the per cpu clock event device for the
84  *                              boot cpu
85  * @tsc_pre_init:               platform function called before TSC init
86  * @timer_init:                 initialize the platform timer (default PIT/HPET)
87  */
88 struct x86_init_timers {
89         void (*setup_percpu_clockev)(void);
90         void (*tsc_pre_init)(void);
91         void (*timer_init)(void);
92 };
93
94 /**
95  * struct x86_init_ops - functions for platform specific setup
96  *
97  */
98 struct x86_init_ops {
99         struct x86_init_resources       resources;
100         struct x86_init_mpparse         mpparse;
101         struct x86_init_irqs            irqs;
102         struct x86_init_oem             oem;
103         struct x86_init_paging          paging;
104         struct x86_init_timers          timers;
105 };
106
107 /**
108  * struct x86_cpuinit_ops - platform specific cpu hotplug setups
109  * @setup_percpu_clockev:       set up the per cpu clock event device
110  */
111 struct x86_cpuinit_ops {
112         void (*setup_percpu_clockev)(void);
113 };
114
115 extern struct x86_init_ops x86_init;
116 extern struct x86_cpuinit_ops x86_cpuinit;
117
118 extern void x86_init_noop(void);
119 extern void x86_init_uint_noop(unsigned int unused);
120
121 #endif