hypervisor.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. }
  35. unsigned long get_hypervisor_tsc_freq(void)
  36. {
  37. if (boot_cpu_data.x86_hyper_vendor == X86_HYPER_VENDOR_VMWARE)
  38. return vmware_get_tsc_khz();
  39. return 0;
  40. }
  41. static inline void __cpuinit
  42. hypervisor_set_feature_bits(struct cpuinfo_x86 *c)
  43. {
  44. if (boot_cpu_data.x86_hyper_vendor == X86_HYPER_VENDOR_VMWARE) {
  45. vmware_set_feature_bits(c);
  46. return;
  47. }
  48. }
  49. void __cpuinit init_hypervisor(struct cpuinfo_x86 *c)
  50. {
  51. detect_hypervisor_vendor(c);
  52. hypervisor_set_feature_bits(c);
  53. }