iPXE
libkir.h File Reference
#include "realmode.h"

Go to the source code of this file.

Macros

#define __data16(variable)
#define __data16_array(variable, array)
#define __bss16(variable)
#define __bss16_array(variable, array)
#define __text16(variable)
#define __text16_array(variable, array)
#define __use_data16(variable)
#define __use_text16(variable)
#define __from_data16(pointer)
#define __from_text16(pointer)
#define rm_cs   ( _rm_cs() )
#define rm_ds   ( _rm_ds() )
#define copy_to_real   copy_to_real_libkir
#define copy_from_real   copy_from_real_libkir
#define put_real_kir_const_off(var, seg, off)
#define put_real_kir_nonconst_off(var, seg, off)
#define put_real_kir(var, seg, off)
#define get_real_kir_const_off(var, seg, off)
#define get_real_kir_nonconst_off(var, seg, off)
#define get_real_kir(var, seg, off)
#define put_real   put_real_kir
#define get_real   get_real_kir
#define TEXT16_CODE(asm_code_str)
#define REAL_CODE(asm_code_str)

Typedefs

typedef uint32_t userptr_t
 A pointer to a user buffer.

Functions

static __attribute__ ((always_inline)) void copy_to_user(userptr_t buffer
 Copy data to user buffer.
static void copy_to_real_libkir (unsigned int dest_seg, unsigned int dest_off, const void *src, size_t n)
static void copy_from_real_libkir (void *dest, unsigned int src_seg, unsigned int src_off, size_t n)

Variables

static off_t offset
static off_t const void * src
static off_t const void size_t len
static userptr_t buffer

Macro Definition Documentation

◆ __data16

#define __data16 ( variable)
Value:
variable

Definition at line 14 of file libkir.h.

Referenced by __data16(), __data16(), __data16(), __data16(), __data16(), __data16(), __data16(), and __data16().

◆ __data16_array

#define __data16_array ( variable,
array )
Value:
variable array
uint32_t array
Array number.
Definition edd.h:1

Definition at line 15 of file libkir.h.

◆ __bss16

#define __bss16 ( variable)
Value:
variable

Definition at line 16 of file libkir.h.

Referenced by __bss16(), __bss16(), __bss16(), __bss16(), __bss16(), __bss16(), __bss16(), and __bss16().

◆ __bss16_array

#define __bss16_array ( variable,
array )
Value:
variable array

Definition at line 17 of file libkir.h.

Referenced by __bss16_array(), __bss16_array(), and __bss16_array().

◆ __text16

#define __text16 ( variable)
Value:
variable

Definition at line 18 of file libkir.h.

Referenced by __attribute__(), __text16(), __text16(), __text16(), __text16(), __text16(), __text16(), __text16(), __text16(), and __text16().

◆ __text16_array

#define __text16_array ( variable,
array )
Value:
variable array

Definition at line 19 of file libkir.h.

Referenced by __text16_array().

◆ __use_data16

#define __use_data16 ( variable)
Value:
variable

Definition at line 20 of file libkir.h.

◆ __use_text16

#define __use_text16 ( variable)
Value:
variable

Definition at line 21 of file libkir.h.

◆ __from_data16

◆ __from_text16

#define __from_text16 ( pointer)
Value:
pointer

Definition at line 23 of file libkir.h.

Referenced by int22(), pxe_activate(), pxe_start_nbp(), and undi_loader().

◆ rm_cs

#define rm_cs   ( _rm_cs() )

◆ rm_ds

◆ copy_to_real

◆ copy_from_real

◆ put_real_kir_const_off

#define put_real_kir_const_off ( var,
seg,
off )
Value:
__asm__ ( "movw %w1, %%es\n\t" \
"mov %0, %%es:%c2\n\t" \
"pushw %%ds\n\t" /* restore %es */ \
"popw %%es\n\t" \
: \
: "r,r" ( var ), "rm,rm" ( seg ), "i,!r" ( off ) \
)
struct golan_mkey_seg seg
Definition CIB_PRM.h:0
__asm__(".section \".rodata\", \"a\", " PROGBITS "\n\t" "\nprivate_key_data:\n\t" ".size private_key_data, ( . - private_key_data )\n\t" ".equ private_key_len, ( . - private_key_data )\n\t" ".previous\n\t")

Definition at line 98 of file libkir.h.

98#define put_real_kir_const_off( var, seg, off ) \
99 __asm__ ( "movw %w1, %%es\n\t" \
100 "mov %0, %%es:%c2\n\t" \
101 "pushw %%ds\n\t" /* restore %es */ \
102 "popw %%es\n\t" \
103 : \
104 : "r,r" ( var ), "rm,rm" ( seg ), "i,!r" ( off ) \
105 )

◆ put_real_kir_nonconst_off

#define put_real_kir_nonconst_off ( var,
seg,
off )
Value:
__asm__ ( "movw %w1, %%es\n\t" \
"mov %0, %%es:(%2)\n\t" \
"pushw %%ds\n\t" /* restore %es */ \
"popw %%es\n\t" \
: \
: "r" ( var ), "rm" ( seg ), "r" ( off ) \
)

Definition at line 107 of file libkir.h.

107#define put_real_kir_nonconst_off( var, seg, off ) \
108 __asm__ ( "movw %w1, %%es\n\t" \
109 "mov %0, %%es:(%2)\n\t" \
110 "pushw %%ds\n\t" /* restore %es */ \
111 "popw %%es\n\t" \
112 : \
113 : "r" ( var ), "rm" ( seg ), "r" ( off ) \
114 )

◆ put_real_kir

#define put_real_kir ( var,
seg,
off )
Value:
do { \
if ( __builtin_constant_p ( off ) ) \
put_real_kir_const_off ( var, seg, off ); \
else \
put_real_kir_nonconst_off ( var, seg, off ); \
} while ( 0 )

Definition at line 116 of file libkir.h.

116#define put_real_kir( var, seg, off ) \
117 do { \
118 if ( __builtin_constant_p ( off ) ) \
119 put_real_kir_const_off ( var, seg, off ); \
120 else \
121 put_real_kir_nonconst_off ( var, seg, off ); \
122 } while ( 0 )

◆ get_real_kir_const_off

#define get_real_kir_const_off ( var,
seg,
off )
Value:
__asm__ ( "movw %w1, %%es\n\t" \
"mov %%es:%c2, %0\n\t" \
"pushw %%ds\n\t" /* restore %es */ \
"popw %%es\n\t" \
: "=r,r" ( var ) \
: "rm,rm" ( seg ), "i,!r" ( off ) \
)

Definition at line 124 of file libkir.h.

124#define get_real_kir_const_off( var, seg, off ) \
125 __asm__ ( "movw %w1, %%es\n\t" \
126 "mov %%es:%c2, %0\n\t" \
127 "pushw %%ds\n\t" /* restore %es */ \
128 "popw %%es\n\t" \
129 : "=r,r" ( var ) \
130 : "rm,rm" ( seg ), "i,!r" ( off ) \
131 )

◆ get_real_kir_nonconst_off

#define get_real_kir_nonconst_off ( var,
seg,
off )
Value:
__asm__ ( "movw %w1, %%es\n\t" \
"mov %%es:(%2), %0\n\t" \
"pushw %%ds\n\t" /* restore %es */ \
"popw %%es\n\t" \
: "=r" ( var ) \
: "rm" ( seg ), "r" ( off ) \
)

Definition at line 133 of file libkir.h.

133#define get_real_kir_nonconst_off( var, seg, off ) \
134 __asm__ ( "movw %w1, %%es\n\t" \
135 "mov %%es:(%2), %0\n\t" \
136 "pushw %%ds\n\t" /* restore %es */ \
137 "popw %%es\n\t" \
138 : "=r" ( var ) \
139 : "rm" ( seg ), "r" ( off ) \
140 )

◆ get_real_kir

#define get_real_kir ( var,
seg,
off )
Value:
do { \
if ( __builtin_constant_p ( off ) ) \
get_real_kir_const_off ( var, seg, off ); \
else \
get_real_kir_nonconst_off ( var, seg, off ); \
} while ( 0 )

Definition at line 142 of file libkir.h.

142#define get_real_kir( var, seg, off ) \
143 do { \
144 if ( __builtin_constant_p ( off ) ) \
145 get_real_kir_const_off ( var, seg, off ); \
146 else \
147 get_real_kir_nonconst_off ( var, seg, off ); \
148 } while ( 0 )

◆ put_real

#define put_real   put_real_kir

◆ get_real

◆ TEXT16_CODE

#define TEXT16_CODE ( asm_code_str)
Value:
".section \".text16\", \"ax\", @progbits\n\t" \
".code16\n\t" \
".arch i386\n\t" \
asm_code_str "\n\t" \
".code16gcc\n\t" \
".previous\n\t"

Definition at line 217 of file libkir.h.

217#define TEXT16_CODE( asm_code_str ) \
218 ".section \".text16\", \"ax\", @progbits\n\t" \
219 ".code16\n\t" \
220 ".arch i386\n\t" \
221 asm_code_str "\n\t" \
222 ".code16gcc\n\t" \
223 ".previous\n\t"

Referenced by _dump_regs(), bios_inject_startup(), fake_e820(), hook_comboot_interrupts(), int13_hook_vector(), and rtc_hook_isr().

◆ REAL_CODE

Typedef Documentation

◆ userptr_t

A pointer to a user buffer.

This is actually a struct segoff, but encoded as a uint32_t to ensure that gcc passes it around efficiently.

Definition at line 159 of file libkir.h.

Function Documentation

◆ __attribute__()

__attribute__ ( (always_inline) )
inlinestatic

Copy data to user buffer.

Convert virtual address to user buffer.

Convert segment:offset address to user buffer.

Copy data from user buffer.

Parameters
bufferUser buffer
offsetOffset within user buffer
srcSource
lenLength
destDestination
bufferUser buffer
offsetOffset within user buffer
lenLength
segmentReal-mode segment
offsetReal-mode offset
Return values
bufferUser buffer
Parameters
virtualVirtual address
Return values
bufferUser buffer

This constructs a user buffer from an ordinary pointer. Use it when you need to pass a pointer to an internal buffer to a function that expects a userptr_t.

Definition at line 26 of file libkir.h.

26 {
28 __asm__ __volatile__ ( "movw %%cs, %w0" : "=r" ( cs ) );
29 return cs;
30}
__asm__ __volatile__("call *%9" :"=a"(result), "=c"(discard_ecx), "=d"(discard_edx) :"d"(0), "a"(code), "b"(0), "c"(in_phys), "D"(0), "S"(out_phys), "m"(hypercall))
unsigned short uint16_t
Definition stdint.h:11
uint32_t cs
Definition librm.h:14

References __asm__(), __volatile__(), and cs.

◆ copy_to_real_libkir()

void copy_to_real_libkir ( unsigned int dest_seg,
unsigned int dest_off,
const void * src,
size_t n )
inlinestatic

Definition at line 43 of file libkir.h.

45 {
46 unsigned int discard_D, discard_S, discard_c;
47
48 __asm__ __volatile__ ( "pushw %%es\n\t"
49 "movw %3, %%es\n\t"
50 "rep movsb\n\t"
51 "popw %%es\n\t"
52 : "=D" ( discard_D ), "=S" ( discard_S ),
53 "=c" ( discard_c )
54 : "r" ( dest_seg ), "D" ( dest_off ),
55 "S" ( src ),
56 "c" ( n )
57 : "memory" );
58}
void * discard_D
Definition bigint.h:32
long discard_c
Definition bigint.h:33
void * discard_S
Definition bigint.h:66
static const void * src
Definition string.h:48

References __asm__(), __volatile__(), discard_c, discard_D, discard_S, and src.

◆ copy_from_real_libkir()

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

Definition at line 60 of file libkir.h.

63 {
64 unsigned int discard_D, discard_S, discard_c;
65
66 __asm__ __volatile__ ( "pushw %%ds\n\t"
67 "movw %4, %%ds\n\t"
68 "rep movsb\n\t"
69 "popw %%ds\n\t"
70 : "=D" ( discard_D ), "=S" ( discard_S ),
71 "=c" ( discard_c )
72 : "D" ( dest ),
73 "r" ( src_seg ), "S" ( src_off ),
74 "c" ( n )
75 : "memory" );
76}
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 __asm__(), __volatile__(), dest, discard_c, discard_D, and discard_S.

Variable Documentation

◆ offset

unsigned int offset
Initial value:
{
return ( ( segment << 16 ) | offset )
uint16_t offset
Offset to command line.
Definition bzimage.h:3
uint16_t segment
Code segment.
Definition librm.h:3

Definition at line 170 of file libkir.h.

◆ src

off_t const void* src

Definition at line 170 of file libkir.h.

◆ len

Initial value:
{
copy_to_real ( ( buffer >> 16 ), ( ( buffer & 0xffff ) + offset ),
src, len )
ring len
Length.
Definition dwmac.h:226
uint32_t buffer
Buffer index (or NETVSC_RNDIS_NO_BUFFER)
Definition netvsc.h:5
#define copy_to_real
Definition libkir.h:78

Definition at line 170 of file libkir.h.

◆ buffer

userptr_t buffer

Definition at line 184 of file libkir.h.