x86_init.h 3.4 KB

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