iPXE
realmode.h File Reference
#include <stdint.h>
#include <string.h>
#include <registers.h>
#include <librm.h>
#include <ipxe/uaccess.h>

Go to the source code of this file.

Macros

#define put_real(var, dest_seg, dest_off)
 Write a single variable to base memory.
#define get_real(var, src_seg, src_off)
 Read a single variable from base memory.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
static __always_inline void * real_to_virt (unsigned int segment, unsigned int offset)
 Convert segment:offset address to virtual address.
static __always_inline void copy_to_real (unsigned int dest_seg, unsigned int dest_off, void *src, size_t n)
 Copy data to base memory.
static __always_inline void copy_from_real (void *dest, unsigned int src_seg, unsigned int src_off, size_t n)
 Copy data to base memory.

Macro Definition Documentation

◆ put_real

#define put_real ( var,
dest_seg,
dest_off )
Value:
copy_to_real ( (dest_seg), (dest_off), &(var), sizeof (var) )
#define copy_to_real
Definition libkir.h:78

Write a single variable to base memory.

Parameters
varVariable to write
dest_segDestination segment
dest_offDestination offset

Definition at line 116 of file realmode.h.

116#define put_real( var, dest_seg, dest_off ) \
117 copy_to_real ( (dest_seg), (dest_off), &(var), sizeof (var) )

◆ get_real

#define get_real ( var,
src_seg,
src_off )
Value:
copy_from_real ( &(var), (src_seg), (src_off), sizeof (var) )
#define copy_from_real
Definition libkir.h:79

Read a single variable from base memory.

Parameters
varVariable to read
src_segSource segment
src_offSource offset

Definition at line 126 of file realmode.h.

126#define get_real( var, src_seg, src_off ) \
127 copy_from_real ( &(var), (src_seg), (src_off), sizeof (var) )

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

References __always_inline.

◆ real_to_virt()

__always_inline void * real_to_virt ( unsigned int segment,
unsigned int offset )
inlinestatic

Convert segment:offset address to virtual address.

Parameters
segmentReal-mode segment
offsetReal-mode offset
Return values
virtVirtual address

Definition at line 77 of file realmode.h.

77 {
78 return ( phys_to_virt ( ( segment << 4 ) + offset ) );
79}
uint16_t offset
Offset to command line.
Definition bzimage.h:3
uint16_t segment
Code segment.
Definition librm.h:3

References offset, and segment.

Referenced by bios_find_smbios2(), bios_find_smbios3(), bzimage_parse_header(), com32_prepare_bounce_buffer(), comboot_exec_loop(), comboot_prepare_segment(), copy_from_real(), copy_to_real(), copy_to_rm_stack(), int13_extended_rw(), int13_rw_sectors(), int22(), nbi_process_segments(), print_user_string(), pxe_api_call(), pxe_exec(), pxe_loader_call(), pxenv_file_cmdline(), pxenv_file_exec(), pxenv_file_open(), pxenv_file_read(), pxenv_get_cached_info(), pxenv_tftp_read(), pxenv_udp_read(), pxenv_udp_write(), remove_from_rm_stack(), rsdp_find_rsdt(), sdi_exec(), shuffle(), vesafb_font(), and vesafb_mode_list().

◆ copy_to_real()

__always_inline void copy_to_real ( unsigned int dest_seg,
unsigned int dest_off,
void * src,
size_t n )
inlinestatic

Copy data to base memory.

Parameters
dest_segDestination segment
dest_offDestination offset
srcSource
lenLength

Definition at line 90 of file realmode.h.

91 {
92 memcpy ( real_to_virt ( dest_seg, dest_off ), src, n );
93}
static const void * src
Definition string.h:48
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static __always_inline void * real_to_virt(unsigned int segment, unsigned int offset)
Convert segment:offset address to virtual address.
Definition realmode.h:77

References memcpy(), real_to_virt(), and src.

◆ copy_from_real()

__always_inline void copy_from_real ( void * dest,
unsigned int src_seg,
unsigned int src_off,
size_t n )
inlinestatic

Copy data to base memory.

Parameters
destDestination
src_segSource segment
src_offSource offset
lenLength

Definition at line 104 of file realmode.h.

105 {
106 memcpy ( dest, real_to_virt ( src_seg, src_off ), n );
107}
if(len >=6 *4) __asm__ __volatile__("movsl" if(len >=5 *4) __asm__ __volatile__("movsl" if(len >=4 *4) __asm__ __volatile__("movsl" if(len >=3 *4) __asm__ __volatile__("movsl" if(len >=2 *4) __asm__ __volatile__("movsl" if(len >=1 *4) __asm__ __volatile__("movsl" if((len % 4) >=2) __asm__ __volatile__("movsw" if((len % 2) >=1) __asm__ __volatile__("movsb" retur dest)
Definition string.h:151

References dest, memcpy(), and real_to_virt().