/
githubmirror
/
ipxe
Обзор
Документация
Войти
/
githubmirror
/
ipxe
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/arch/i386/include/bits/hyperv.h
49 строк
1 KB
Michael Brown
[hyperv] Use generic set_bit() function
17 мар 2016, 01:33
17 мар 2016, 01:33
9bab13a
Код
Авторство
О чём код?
#ifndef _BITS_HYPERV_H #define _BITS_HYPERV_H /** @file * * Hyper-V interface * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include <stddef.h> #include <stdint.h> #include <ipxe/io.h> /** * Issue hypercall * * @v hv Hyper-V hypervisor * @v code Call code * @v in Input parameters * @v out Output parameters * @ret status Status code */ static inline __attribute__ (( always_inline )) int hv_call ( struct hv_hypervisor *hv, unsigned int code, const void *in, void *out ) { void *hypercall = hv->hypercall; uint32_t in_phys; uint32_t out_phys; uint32_t discard_ecx; uint32_t discard_edx; uint16_t result; in_phys = ( ( __builtin_constant_p ( in ) && ( in == NULL ) ) ? 0 : virt_to_phys ( in ) ); out_phys = ( ( __builtin_constant_p ( out ) && ( out == NULL ) ) ? 0 : virt_to_phys ( out ) ); __asm__ __volatile__ ( "call *%9" : "=a" ( result ), "=c" ( discard_ecx ), "=d" ( discard_edx ) : "d" ( 0 ), "a" ( code ), "b" ( 0 ), "c" ( in_phys ), "D" ( 0 ), "S" ( out_phys ), "m" ( hypercall ) ); return result; } #endif /* _BITS_HYPERV_H */