hypervisor.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Common hypervisor code
  3. *
  4. * Copyright (C) 2008, VMware, Inc.
  5. * Author : Alok N Kataria <akataria@vmware.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful, but
  13. * WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  15. * NON INFRINGEMENT. See the GNU General Public License for more
  16. * details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  21. *
  22. */
  23. #include <asm/processor.h>
  24. #include <asm/vmware.h>
  25. #include <asm/hypervisor.h>
  26. static inline void __cpuinit
  27. detect_hypervisor_vendor(struct cpuinfo_x86 *c)
  28. {
  29. if (vmware_platform())
  30. c->x86_hyper_vendor = X86_HYPER_VENDOR_VMWARE;
  31. else
  32. c->x86_hyper_vendor = X86_HYPER_VENDOR_NONE;
  33. }
  34. static inline void __cpuinit
  35. hypervisor_set_feature_bits(struct cpuinfo_x86 *c)
  36. {
  37. if (boot_cpu_data.x86_hyper_vendor == X86_HYPER_VENDOR_VMWARE) {
  38. vmware_set_feature_bits(c);
  39. return;
  40. }
  41. }
  42. void __cpuinit init_hypervisor(struct cpuinfo_x86 *c)
  43. {
  44. detect_hypervisor_vendor(c);
  45. hypervisor_set_feature_bits(c);
  46. }
  47. void __init init_hypervisor_platform(void)
  48. {
  49. init_hypervisor(&boot_cpu_data);
  50. if (boot_cpu_data.x86_hyper_vendor == X86_HYPER_VENDOR_VMWARE)
  51. vmware_platform_setup();
  52. }