1 #ifndef _GPXE_EFI_UACCESS_H
2 #define _GPXE_EFI_UACCESS_H
6 * gPXE user access API for EFI
8 * EFI runs with flat physical addressing, so the various mappings
9 * between virtual addresses, I/O addresses and bus addresses are all
14 #define UACCESS_PREFIX_efi
16 #define UACCESS_PREFIX_efi __efi_
20 * Convert physical address to user pointer
22 * @v phys_addr Physical address
23 * @ret userptr User pointer
25 static inline __always_inline userptr_t
26 UACCESS_INLINE ( efi, phys_to_user ) ( unsigned long phys_addr ) {
31 * Convert user buffer to physical address
33 * @v userptr User pointer
34 * @v offset Offset from user pointer
35 * @ret phys_addr Physical address
37 static inline __always_inline unsigned long
38 UACCESS_INLINE ( efi, user_to_phys ) ( userptr_t userptr, off_t offset ) {
39 return ( userptr + offset );
42 static inline __always_inline userptr_t
43 UACCESS_INLINE ( efi, virt_to_user ) ( volatile const void *addr ) {
44 return trivial_virt_to_user ( addr );
47 static inline __always_inline void *
48 UACCESS_INLINE ( efi, user_to_virt ) ( userptr_t userptr, off_t offset ) {
49 return trivial_user_to_virt ( userptr, offset );
52 static inline __always_inline userptr_t
53 UACCESS_INLINE ( efi, userptr_add ) ( userptr_t userptr, off_t offset ) {
54 return trivial_userptr_add ( userptr, offset );
57 static inline __always_inline void
58 UACCESS_INLINE ( efi, memcpy_user ) ( userptr_t dest, off_t dest_off,
59 userptr_t src, off_t src_off,
61 trivial_memcpy_user ( dest, dest_off, src, src_off, len );
64 static inline __always_inline void
65 UACCESS_INLINE ( efi, memmove_user ) ( userptr_t dest, off_t dest_off,
66 userptr_t src, off_t src_off,
68 trivial_memmove_user ( dest, dest_off, src, src_off, len );
71 static inline __always_inline void
72 UACCESS_INLINE ( efi, memset_user ) ( userptr_t buffer, off_t offset,
74 trivial_memset_user ( buffer, offset, c, len );
77 static inline __always_inline size_t
78 UACCESS_INLINE ( efi, strlen_user ) ( userptr_t buffer, off_t offset ) {
79 return trivial_strlen_user ( buffer, offset );
82 static inline __always_inline off_t
83 UACCESS_INLINE ( efi, memchr_user ) ( userptr_t buffer, off_t offset,
85 return trivial_memchr_user ( buffer, offset, c, len );
88 #endif /* _GPXE_EFI_UACCESS_H */