Annotation of qemu/roms/ipxe/src/arch/i386/include/comboot.h, revision 1.1.1.1

1.1       root        1: #ifndef COMBOOT_H
                      2: #define COMBOOT_H
                      3: 
                      4: /**
                      5:  * @file
                      6:  *
                      7:  * SYSLINUX COMBOOT
                      8:  */
                      9: 
                     10: FILE_LICENCE ( GPL2_OR_LATER );
                     11: 
                     12: #include <stdint.h>
                     13: #include <setjmp.h>
                     14: #include <ipxe/in.h>
                     15: 
                     16: /** Descriptor in a 32-bit IDT */
                     17: struct idt_descriptor {
                     18:        uint16_t offset_low;
                     19:        uint16_t selector;
                     20:        uint16_t flags;
                     21:        uint16_t offset_high;
                     22: } __attribute__ (( packed ));
                     23: 
                     24: /** Operand for the LIDT instruction */
                     25: struct idt_register {
                     26:        uint16_t limit;
                     27:        uint32_t base;
                     28: } __attribute__ (( packed ));
                     29: 
                     30: /** Entry in the interrupt jump buffer */
                     31: struct ijb_entry {
                     32:        uint8_t pusha_instruction;
                     33:        uint8_t mov_instruction;
                     34:        uint8_t mov_value;
                     35:        uint8_t jump_instruction;
                     36:        uint32_t jump_destination;
                     37: } __attribute__ (( packed ));
                     38: 
                     39: /** The x86 opcode for "pushal" */
                     40: #define IJB_PUSHA 0x60
                     41: 
                     42: /** The x86 opcode for "movb $imm8,%al" */
                     43: #define IJB_MOV_AL_IMM8 0xB0
                     44: 
                     45: /** The x86 opcode for "jmp rel32" */
                     46: #define IJB_JMP_REL32 0xE9
                     47: 
                     48: /** Flags that specify a 32-bit interrupt gate with DPL=0 */
                     49: #define IDT_INTERRUPT_GATE_FLAGS 0x8E00
                     50: 
                     51: /** Address of COM32 interrupt descriptor table */
                     52: #define COM32_IDT 0x100000
                     53: 
                     54: /** Number of entries in a fully populated IDT */
                     55: #define COM32_NUM_IDT_ENTRIES 256
                     56: 
                     57: /** Address of COM32 interrupt jump buffer */
                     58: #define COM32_IJB 0x100800
                     59: 
                     60: /** Segment used for COMBOOT PSP and image */
                     61: #define COMBOOT_PSP_SEG 0x07C0
                     62: 
                     63: /** Entry point address of COM32 images */
                     64: #define COM32_START_PHYS 0x101000
                     65: 
                     66: /** COM32 bounce buffer segment */
                     67: #define COM32_BOUNCE_SEG 0x07C0
                     68: 
                     69: /** Size of SYSLINUX file block in bytes */
                     70: #define COMBOOT_FILE_BLOCKSZ 512
                     71: 
                     72: /** COMBOOT feature flags (INT 22h AX=15h) */
                     73: #define COMBOOT_FEATURE_LOCAL_BOOT (1 << 0)
                     74: #define COMBOOT_FEATURE_IDLE_LOOP  (1 << 1)
                     75: 
                     76: /** Maximum number of shuffle descriptors for 
                     77:  * shuffle and boot functions
                     78:  * (INT 22h AX=0012h, 001Ah, 001Bh)
                     79:  */
                     80: #define COMBOOT_MAX_SHUFFLE_DESCRIPTORS 682
                     81: 
                     82: typedef union {
                     83:        uint32_t l;
                     84:        uint16_t w[2];
                     85:        uint8_t  b[4];
                     86: } com32_reg32_t;
                     87: 
                     88: typedef struct {
                     89:        uint16_t gs;                /* Offset  0 */
                     90:        uint16_t fs;                /* Offset  2 */
                     91:        uint16_t es;                /* Offset  4 */
                     92:        uint16_t ds;                /* Offset  6 */
                     93: 
                     94:        com32_reg32_t edi;          /* Offset  8 */
                     95:        com32_reg32_t esi;          /* Offset 12 */
                     96:        com32_reg32_t ebp;          /* Offset 16 */
                     97:        com32_reg32_t _unused_esp;  /* Offset 20 */
                     98:        com32_reg32_t ebx;          /* Offset 24 */
                     99:        com32_reg32_t edx;          /* Offset 28 */
                    100:        com32_reg32_t ecx;          /* Offset 32 */
                    101:        com32_reg32_t eax;          /* Offset 36 */
                    102: 
                    103:        com32_reg32_t eflags;       /* Offset 40 */
                    104: } com32sys_t;
                    105: 
                    106: typedef struct {
                    107:        uint32_t eax;               /* Offset  0 */
                    108:        uint32_t ecx;               /* Offset  4 */
                    109:        uint32_t edx;               /* Offset  8 */
                    110:        uint32_t ebx;               /* Offset 12 */
                    111:        uint32_t esp;               /* Offset 16 */
                    112:        uint32_t ebp;               /* Offset 20 */
                    113:        uint32_t esi;               /* Offset 24 */
                    114:        uint32_t edi;               /* Offset 28 */
                    115: 
                    116:        uint32_t eip;               /* Offset 32 */
                    117: } syslinux_pm_regs;
                    118: 
                    119: typedef struct {
                    120:        uint16_t es;                /* Offset  0 */
                    121:        uint16_t _unused_cs;        /* Offset  2 */
                    122:        uint16_t ds;                /* Offset  4 */
                    123:        uint16_t ss;                /* Offset  6 */
                    124:        uint16_t fs;                /* Offset  8 */
                    125:        uint16_t gs;                /* Offset 10 */
                    126: 
                    127:        uint32_t eax;                /* Offset 12 */
                    128:        uint32_t ecx;                /* Offset 16 */
                    129:        uint32_t edx;                /* Offset 20 */
                    130:        uint32_t ebx;                /* Offset 24 */
                    131:        uint32_t esp;                /* Offset 28 */
                    132:        uint32_t ebp;                /* Offset 32 */
                    133:        uint32_t esi;                /* Offset 36 */
                    134:        uint32_t edi;                /* Offset 40 */
                    135: 
                    136:        uint16_t ip;                /* Offset 44 */
                    137:        uint16_t cs;                /* Offset 46 */
                    138: } syslinux_rm_regs;
                    139: 
                    140: typedef struct {
                    141:        uint32_t dest;
                    142:        uint32_t src;
                    143:        uint32_t len;
                    144: } comboot_shuffle_descriptor;
                    145: 
                    146: extern void hook_comboot_interrupts ( );
                    147: extern void unhook_comboot_interrupts ( );
                    148: 
                    149: /* These are not the correct prototypes, but it doens't matter, 
                    150:  * as we only ever get the address of these functions;
                    151:  * they are only called from COM32 code running in PHYS_CODE
                    152:  */
                    153: extern void com32_intcall_wrapper ( );
                    154: extern void com32_farcall_wrapper ( );
                    155: extern void com32_cfarcall_wrapper ( );
                    156: extern void com32_irq_wrapper ( );
                    157: 
                    158: /* Resolve a hostname to an (IPv4) address */
                    159: extern int comboot_resolv ( const char *name, struct in_addr *address );
                    160: 
                    161: /* setjmp/longjmp context buffer used to return after loading an image */
                    162: extern rmjmp_buf comboot_return;
                    163: 
                    164: extern void *com32_external_esp;
                    165: 
                    166: #define COMBOOT_EXIT 1
                    167: #define COMBOOT_EXIT_RUN_KERNEL 2
                    168: #define COMBOOT_EXIT_COMMAND 3
                    169: 
                    170: extern void comboot_force_text_mode ( void );
                    171: 
                    172: #define COMBOOT_VIDEO_GRAPHICS    0x01
                    173: #define COMBOOT_VIDEO_NONSTANDARD 0x02
                    174: #define COMBOOT_VIDEO_VESA        0x04
                    175: #define COMBOOT_VIDEO_NOTEXT      0x08
                    176: 
                    177: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.