mirror of
https://github.com/ipxe/ipxe
synced 2026-01-13 17:43:49 +03:00
[hyperv] Add support for Hyper-V hypervisor
Add support for detecting and communicating with the Hyper-V hypervisor. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -46,6 +46,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||
#define ERRFILE_timer_rdtsc ( ERRFILE_ARCH | ERRFILE_DRIVER | 0x00000000 )
|
||||
#define ERRFILE_timer_bios ( ERRFILE_ARCH | ERRFILE_DRIVER | 0x00010000 )
|
||||
#define ERRFILE_hvm ( ERRFILE_ARCH | ERRFILE_DRIVER | 0x00020000 )
|
||||
#define ERRFILE_hyperv ( ERRFILE_ARCH | ERRFILE_DRIVER | 0x00030000 )
|
||||
|
||||
#define ERRFILE_cpuid_cmd ( ERRFILE_ARCH | ERRFILE_OTHER | 0x00000000 )
|
||||
#define ERRFILE_cpuid_settings ( ERRFILE_ARCH | ERRFILE_OTHER | 0x00010000 )
|
||||
|
||||
@@ -39,6 +39,9 @@ struct x86_features {
|
||||
/** Get standard features */
|
||||
#define CPUID_FEATURES 0x00000001UL
|
||||
|
||||
/** Hypervisor is present */
|
||||
#define CPUID_FEATURES_INTEL_ECX_HYPERVISOR 0x80000000UL
|
||||
|
||||
/** Get largest extended function */
|
||||
#define CPUID_AMD_MAX_FN 0x80000000UL
|
||||
|
||||
|
||||
70
src/arch/x86/include/pic8259.h
Normal file
70
src/arch/x86/include/pic8259.h
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Basic support for controlling the 8259 Programmable Interrupt Controllers.
|
||||
*
|
||||
* Initially written by Michael Brown (mcb30).
|
||||
*/
|
||||
|
||||
FILE_LICENCE ( GPL2_OR_LATER );
|
||||
|
||||
#ifndef PIC8259_H
|
||||
#define PIC8259_H
|
||||
|
||||
#include <ipxe/io.h>
|
||||
|
||||
#define IRQ_PIC_CUTOFF 8
|
||||
|
||||
/* 8259 register locations */
|
||||
#define PIC1_ICW1 0x20
|
||||
#define PIC1_OCW2 0x20
|
||||
#define PIC1_OCW3 0x20
|
||||
#define PIC1_ICR 0x20
|
||||
#define PIC1_IRR 0x20
|
||||
#define PIC1_ISR 0x20
|
||||
#define PIC1_ICW2 0x21
|
||||
#define PIC1_ICW3 0x21
|
||||
#define PIC1_ICW4 0x21
|
||||
#define PIC1_IMR 0x21
|
||||
#define PIC2_ICW1 0xa0
|
||||
#define PIC2_OCW2 0xa0
|
||||
#define PIC2_OCW3 0xa0
|
||||
#define PIC2_ICR 0xa0
|
||||
#define PIC2_IRR 0xa0
|
||||
#define PIC2_ISR 0xa0
|
||||
#define PIC2_ICW2 0xa1
|
||||
#define PIC2_ICW3 0xa1
|
||||
#define PIC2_ICW4 0xa1
|
||||
#define PIC2_IMR 0xa1
|
||||
|
||||
/* Register command values */
|
||||
#define OCW3_ID 0x08
|
||||
#define OCW3_READ_IRR 0x03
|
||||
#define OCW3_READ_ISR 0x02
|
||||
#define ICR_EOI_NON_SPECIFIC 0x20
|
||||
#define ICR_EOI_NOP 0x40
|
||||
#define ICR_EOI_SPECIFIC 0x60
|
||||
#define ICR_EOI_SET_PRIORITY 0xc0
|
||||
|
||||
/* Macros to enable/disable IRQs */
|
||||
#define IMR_REG(x) ( (x) < IRQ_PIC_CUTOFF ? PIC1_IMR : PIC2_IMR )
|
||||
#define IMR_BIT(x) ( 1 << ( (x) % IRQ_PIC_CUTOFF ) )
|
||||
#define irq_enabled(x) ( ( inb ( IMR_REG(x) ) & IMR_BIT(x) ) == 0 )
|
||||
#define enable_irq(x) outb ( inb( IMR_REG(x) ) & ~IMR_BIT(x), IMR_REG(x) )
|
||||
#define disable_irq(x) outb ( inb( IMR_REG(x) ) | IMR_BIT(x), IMR_REG(x) )
|
||||
|
||||
/* Macros for acknowledging IRQs */
|
||||
#define ICR_REG( irq ) ( (irq) < IRQ_PIC_CUTOFF ? PIC1_ICR : PIC2_ICR )
|
||||
#define ICR_VALUE( irq ) ( (irq) % IRQ_PIC_CUTOFF )
|
||||
#define CHAINED_IRQ 2
|
||||
|
||||
/* Utility macros to convert IRQ numbers to INT numbers and INT vectors */
|
||||
#define IRQ_INT( irq ) ( ( ( (irq) - IRQ_PIC_CUTOFF ) ^ 0x70 ) & 0x7f )
|
||||
|
||||
/* Other constants */
|
||||
#define IRQ_MAX 15
|
||||
#define IRQ_NONE -1U
|
||||
|
||||
/* Function prototypes
|
||||
*/
|
||||
void send_eoi ( unsigned int irq );
|
||||
|
||||
#endif /* PIC8259_H */
|
||||
Reference in New Issue
Block a user