summaryrefslogblamecommitdiffstats
path: root/src/arch/x86/prefix/nbiprefix.S
blob: bbacd4b7b86c86a2f2c390d094eee007c7111efb (plain) (tree)
1
2
3
4
5
6
7
8

                                      

                  
                                                 
               
                  
                                           














                                                                              
                                                                             











                                                                              

                    

                                                  
                                                                       
                      


                      
                      




                      



                                                                              

                          
                          

                       



                                    





                                            

                      
 
                            
                         




                           
                                          


                
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

#include <librm.h>

	.section ".note.GNU-stack", "", @progbits
	.code16
	.arch i386
	.section ".prefix", "ax", @progbits
	.org 0

nbi_header:
	
/*****************************************************************************
 * NBI file header
 *****************************************************************************
 */
file_header:
	.long	0x1b031336	/* Signature */
	.byte	0x04		/* 16 bytes header, no vendor info */
	.byte	0
	.byte	0
	.byte	0		/* No flags */
	.word	0x0000, 0x07c0	/* Load header to 0x07c0:0x0000 */
	.word	_nbi_start, 0x07c0	/* Start execution at 0x07c0:entry */
	.size	file_header, . - file_header

/*****************************************************************************
 * NBI segment header
 *****************************************************************************
 */
segment_header:
	.byte	0x04		/* 16 bytes header, no vendor info */
	.byte	0
	.byte	0
	.byte	0x04		/* Last segment */
	.long	0x00007e00
imglen:	.long	-512
memlen:	.long	-512
	.size	segment_header, . - segment_header

	.section ".zinfo.fixup", "a", @progbits	/* Compressor fixups */
	.ascii	"ADDL"
	.long	imglen
	.long	1
	.long	0
	.ascii	"ADDL"
	.long	memlen
	.long	1
	.long	0
	.previous

/*****************************************************************************
 * NBI entry point
 *****************************************************************************
 */
	.globl	_nbi_start
_nbi_start:
	/* Install iPXE */
	call	install

	/* Set up real-mode stack */
	movw	%bx, %ss
	movw	$_estack16, %sp

	/* Jump to .text16 segment */
	pushw	%ax
	pushw	$1f
	lret
	.section ".text16", "awx", @progbits
1:
	/* Run iPXE */
	virtcall main

	/* Uninstall iPXE */
	call	uninstall

	/* Reboot system */
	int $0x19

	.previous
	.size	_nbi_start, . - _nbi_start

nbi_header_end:
	.org 512