iPXE
Macros | Functions
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)   copy_to_real ( (dest_seg), (dest_off), &(var), sizeof (var) )
 Write a single variable to base memory. More...
 
#define get_real(var, src_seg, src_off)   copy_from_real ( &(var), (src_seg), (src_off), sizeof (var) )
 Read a single variable from base memory. More...
 

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. More...
 
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. More...
 
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. More...
 

Macro Definition Documentation

◆ put_real

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

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.

◆ get_real

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

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.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ real_to_virt()

static __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 segment
Code segment.
Definition: librm.h:138
uint16_t offset
Offset to command line.
Definition: bzimage.h:8

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()

static __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 __always_inline void * real_to_virt(unsigned int segment, unsigned int offset)
Convert segment:offset address to virtual address.
Definition: realmode.h:77
void * memcpy(void *dest, const void *src, size_t len) __nonnull
static const void * src
Definition: string.h:47

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

◆ copy_from_real()

static __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 }
static __always_inline void * real_to_virt(unsigned int segment, unsigned int offset)
Convert segment:offset address to virtual address.
Definition: realmode.h:77
void * memcpy(void *dest, const void *src, size_t len) __nonnull
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" return dest
Definition: string.h:150

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