Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  acrn.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_X86_ACRN_H
#define _ASM_X86_ACRN_H

/*
 * This CPUID returns feature bitmaps in EAX.
 * Guest VM uses this to detect the appropriate feature bit.
 */

#define ACRN_CPUID_FEATURES  0x40000001
/* Bit 0 indicates whether guest VM is privileged */
#define ACRN_FEATURE_PRIVILEGED_VM BIT(0)

/*
 * Timing Information.
 * This leaf returns the current TSC frequency in kHz.
 *
 * EAX: (Virtual) TSC frequency in kHz.
 * EBX, ECX, EDX: RESERVED (reserved fields are set to zero).
 */

#define ACRN_CPUID_TIMING_INFO  0x40000010

void acrn_setup_intr_handler(void (*handler)(void));
void acrn_remove_intr_handler(void);

static inline u32 acrn_cpuid_base(void)
{
 if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
  return cpuid_base_hypervisor("ACRNACRNACRN", 0);

 return 0;
}

static inline unsigned long acrn_get_tsc_khz(void)
{
 return cpuid_eax(ACRN_CPUID_TIMING_INFO);
}

/*
 * Hypercalls for ACRN
 *
 * - VMCALL instruction is used to implement ACRN hypercalls.
 * - ACRN hypercall ABI:
 *   - Hypercall number is passed in R8 register.
 *   - Up to 2 arguments are passed in RDI, RSI.
 *   - Return value will be placed in RAX.
 *
 * Because GCC doesn't support R8 register as direct register constraints, use
 * supported constraint as input with a explicit MOV to R8 in beginning of asm.
 */

static inline long acrn_hypercall0(unsigned long hcall_id)
{
 long result;

 asm volatile("movl %1, %%r8d\n\t"
       "vmcall\n\t"
       : "=a" (result)
       : "g" (hcall_id)
       : "r8""memory");

 return result;
}

static inline long acrn_hypercall1(unsigned long hcall_id,
       unsigned long param1)
{
 long result;

 asm volatile("movl %1, %%r8d\n\t"
       "vmcall\n\t"
       : "=a" (result)
       : "g" (hcall_id), "D" (param1)
       : "r8""memory");

 return result;
}

static inline long acrn_hypercall2(unsigned long hcall_id,
       unsigned long param1,
       unsigned long param2)
{
 long result;

 asm volatile("movl %1, %%r8d\n\t"
       "vmcall\n\t"
       : "=a" (result)
       : "g" (hcall_id), "D" (param1), "S" (param2)
       : "r8""memory");

 return result;
}

#endif /* _ASM_X86_ACRN_H */

Messung V0.5
C=93 H=93 G=92

¤ Dauer der Verarbeitung: 0.22 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge