|
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) |
|
static __always_inline userptr_t | trivial_virt_to_user (volatile const void *addr) |
| Convert virtual address to user pointer. More...
|
|
static __always_inline void * | trivial_user_to_virt (userptr_t userptr, off_t offset) |
| Convert user pointer to virtual address. More...
|
|
static __always_inline userptr_t | trivial_userptr_add (userptr_t userptr, off_t offset) |
| Add offset to user pointer. More...
|
|
static __always_inline off_t | trivial_userptr_sub (userptr_t userptr, userptr_t subtrahend) |
| Subtract user pointers. More...
|
|
static __always_inline void | trivial_memcpy_user (userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len) |
| Copy data between user buffers. More...
|
|
static __always_inline void | trivial_memmove_user (userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len) |
| Copy data between user buffers, allowing for overlap. More...
|
|
static __always_inline int | trivial_memcmp_user (userptr_t first, off_t first_off, userptr_t second, off_t second_off, size_t len) |
| Compare data between user buffers. More...
|
|
static __always_inline void | trivial_memset_user (userptr_t buffer, off_t offset, int c, size_t len) |
| Fill user buffer with a constant byte. More...
|
|
static __always_inline size_t | trivial_strlen_user (userptr_t buffer, off_t offset) |
| Find length of NUL-terminated string in user buffer. More...
|
|
static __always_inline off_t | trivial_memchr_user (userptr_t buffer, off_t offset, int c, size_t len) |
| Find character in user buffer. More...
|
|
static __always_inline userptr_t | UACCESS_INLINE (flat, phys_to_user)(unsigned long phys_addr) |
|
static __always_inline unsigned long | UACCESS_INLINE (flat, user_to_phys)(userptr_t userptr |
|
static __always_inline userptr_t | UACCESS_INLINE (flat, virt_to_user)(volatile const void *addr) |
|
static __always_inline void * | UACCESS_INLINE (flat, user_to_virt)(userptr_t userptr |
|
static __always_inline userptr_t | UACCESS_INLINE (flat, userptr_add)(userptr_t userptr |
|
static __always_inline off_t | UACCESS_INLINE (flat, userptr_sub)(userptr_t userptr |
|
static __always_inline void | UACCESS_INLINE (flat, memcpy_user)(userptr_t dest |
|
static __always_inline void | UACCESS_INLINE (flat, memmove_user)(userptr_t dest |
|
static __always_inline int | UACCESS_INLINE (flat, memcmp_user)(userptr_t first |
|
static __always_inline void | UACCESS_INLINE (flat, memset_user)(userptr_t buffer |
|
static __always_inline size_t | UACCESS_INLINE (flat, strlen_user)(userptr_t buffer |
|
static __always_inline off_t | UACCESS_INLINE (flat, memchr_user)(userptr_t buffer |
|
userptr_t | phys_to_user (unsigned long phys_addr) |
| Convert physical address to user pointer. More...
|
|
unsigned long | user_to_phys (userptr_t userptr, off_t offset) |
| Convert user pointer to physical address. More...
|
|
userptr_t | virt_to_user (volatile const void *addr) |
| Convert virtual address to user pointer. More...
|
|
void * | user_to_virt (userptr_t userptr, off_t offset) |
| Convert user pointer to virtual address. More...
|
|
userptr_t | userptr_add (userptr_t userptr, off_t offset) |
| Add offset to user pointer. More...
|
|
off_t | userptr_sub (userptr_t userptr, userptr_t subtrahend) |
| Subtract user pointers. More...
|
|
static __always_inline unsigned long | virt_to_phys (volatile const void *addr) |
| Convert virtual address to a physical address. More...
|
|
static __always_inline void * | phys_to_virt (unsigned long phys_addr) |
| Convert physical address to a virtual address. More...
|
|
void | memcpy_user (userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len) |
| Copy data between user buffers. More...
|
|
static __always_inline void | copy_to_user (userptr_t dest, off_t dest_off, const void *src, size_t len) |
| Copy data to user buffer. More...
|
|
static __always_inline void | copy_from_user (void *dest, userptr_t src, off_t src_off, size_t len) |
| Copy data from user buffer. More...
|
|
void | memmove_user (userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len) |
| Copy data between user buffers, allowing for overlap. More...
|
|
int | memcmp_user (userptr_t first, off_t first_off, userptr_t second, off_t second_off, size_t len) |
| Compare data between user buffers. More...
|
|
void | memset_user (userptr_t userptr, off_t offset, int c, size_t len) |
| Fill user buffer with a constant byte. More...
|
|
size_t | strlen_user (userptr_t userptr, off_t offset) |
| Find length of NUL-terminated string in user buffer. More...
|
|
off_t | memchr_user (userptr_t userptr, off_t offset, int c, size_t len) |
| Find character in user buffer. More...
|
|
Access to external ("user") memory.
iPXE often needs to transfer data between internal and external buffers. On i386, the external buffers may require access via a different segment, and the buffer address cannot be encoded into a simple void * pointer. The userptr_t
type encapsulates the information needed to identify an external buffer, and the copy_to_user() and copy_from_user() functions provide methods for transferring data between internal and external buffers.
Note that userptr_t is an opaque type; in particular, performing arithmetic upon a userptr_t is not allowed.
Definition in file uaccess.h.
static __always_inline unsigned long virt_to_phys |
( |
volatile const void * |
addr | ) |
|
|
inlinestatic |
Convert virtual address to a physical address.
- Parameters
-
- Return values
-
phys_addr | Physical address |
Definition at line 361 of file uaccess.h.
unsigned long user_to_phys(userptr_t userptr, off_t offset)
Convert user pointer to physical address.
userptr_t virt_to_user(volatile const void *addr)
Convert virtual address to user pointer.
References addr, user_to_phys(), and virt_to_user().
Referenced by alloc_iob_okx(), alloc_memblock(), arbel_alloc_icm(), arbel_cmd(), arbel_complete(), arbel_create_cq(), arbel_create_eq(), arbel_create_qp(), arbel_poll_eq(), arbel_post_send(), arbel_ring_doorbell(), bios_mp_start_all(), check_blocks(), com32_exec_loop(), dma(), efipci_dma_alloc(), ehci_bus_open(), ehci_ctrl_reachable(), ehci_endpoint_reset(), ehci_enqueue(), ehci_init(), ehci_link_qh(), ehci_ring_alloc(), ena_admin(), ena_create_admin(), ena_create_async(), ena_create_cq(), ena_create_sq(), ena_probe(), flexboot_nodnic_poll_cq(), fnrec_dump(), free_memblock(), gdbmach_set_breakpoint(), gve_admin_alloc(), gve_alloc_shared(), hermon_alloc_mtt(), hermon_cmd(), hermon_complete(), hermon_create_cq(), hermon_create_eq(), hermon_create_qp(), hermon_poll_cq(), hermon_poll_eq(), hermon_post_send(), hide_etherboot(), hide_textdata(), hide_umalloc(), hv_map_hypercall(), hv_map_synic(), hvm_ioremap(), hvm_iounmap(), hvm_map_grant(), hvm_map_hypercall(), hvm_map_shared_info(), icplus_transmit(), init_idt(), intel_create_ring(), intel_refill_rx(), intel_transmit(), intelxl_admin_command(), intelxl_alloc_admin(), intelxl_alloc_ring(), intelxl_msix_enable(), intelxl_poll_admin(), intelxl_refill_rx(), intelxl_transmit(), intelxlvf_admin_event(), iob_map(), IOMAP_INLINE(), mp_address(), mpopulate(), multiboot_add_cmdline(), multiboot_exec(), nbi_boot32(), netfront_create_ring(), netfront_poll_rx(), netfront_refill_rx(), netfront_transmit(), pxe_start_nbp(), rdc_create_ring(), rdc_refill_rx(), realtek_create_buffer(), realtek_create_ring(), realtek_refill_rx(), realtek_transmit(), relocate(), ucode_update_all(), uhci_bus_open(), uhci_describe(), uhci_endpoint_poll(), uhci_enqueue(), uhci_link_qh(), uhci_reachable(), uhci_restart(), virt_to_bus(), vmbus_initiate_contact(), vmbus_open(), vmbus_send_data(), vring_init(), xen_hvm_get_param(), xhci_command_alloc(), xhci_dcbaa_alloc(), xhci_device_open(), xhci_endpoint_open(), xhci_event_alloc(), xhci_event_poll(), xhci_init(), xhci_ring_consumed(), and xhci_scratchpad_alloc().
Copy data to user buffer.
- Parameters
-
dest | Destination |
dest_off | Destination offset |
src | Source |
len | Length |
Definition at line 398 of file uaccess.h.
static __always_inline void off_t userptr_t off_t size_t len
static __always_inline void off_t userptr_t src
static __always_inline void off_t dest_off
userptr_t virt_to_user(volatile const void *addr)
Convert virtual address to user pointer.
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
void memcpy_user(userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len)
Copy data between user buffers.
References dest, dest_off, len, memcpy_user(), src, and virt_to_user().
Referenced by aoecmd_ata_rsp(), blktrans_xferbuf_write(), bofm(), bzimage_load_initrd(), bzimage_set_cmdline(), bzimage_update_header(), cms_decrypt(), comboot_copy_cmdline(), comboot_init_psp(), copy_to_real(), efi_urealloc(), efifb_draw(), fbcon_clear(), fbcon_draw(), fbcon_picture_init(), fbcon_store(), fcpcmd_recv_rddata(), gve_alloc_queue(), gve_transmit(), iscsi_rx_data_in(), memtop_urealloc(), png_pixels_pass(), png_unfilter_pass(), pnm_data(), pxe_api_call(), pxe_loader_call(), pxe_tftp_xfer_deliver(), pxenv_file_cmdline(), pxenv_get_cached_info(), pxenv_udp_read(), read_user(), txnic_refill_rq(), txnic_send(), usbblk_in_data(), and xferbuf_umalloc_write().
Copy data from user buffer.
- Parameters
-
dest | Destination |
src | Source |
src_off | Source offset |
len | Length |
Definition at line 411 of file uaccess.h.
static __always_inline void off_t userptr_t off_t size_t len
static __always_inline void off_t userptr_t src
static __always_inline void off_t userptr_t off_t src_off
userptr_t virt_to_user(volatile const void *addr)
Convert virtual address to user pointer.
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
void memcpy_user(userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len)
Copy data between user buffers.
References dest, len, memcpy_user(), src, src_off, and virt_to_user().
Referenced by acpi_extract(), acpi_extract_sx(), acpi_find_via_rsdt(), acpi_poweroff(), acpi_settings_fetch(), acpi_timer_probe(), acpi_zsdt(), acpimac_extract(), aoecmd_ata_cmd(), blktrans_xferbuf_read(), bofm(), bofm_locate_section(), bzimage_parse_header(), cachedhcp_record(), cmdline_init(), cms_decrypt(), cms_digest(), com32_identify(), copy_from_real(), deflate_accumulate(), der_asn1(), der_probe(), digest_exec(), ecam_find(), ecollect_free(), efi_file_read_chunk(), efi_pe_image_probe(), efi_urealloc(), efifb_glyph(), elf_load(), elf_segments(), elfboot_probe(), exanic_poll_rx(), fbcon_draw_cursor(), fbcon_picture_init(), fbcon_redraw(), fcpcmd_send_wrdata(), find_smbios3_entry(), find_smbios_entry(), find_smbios_structure(), find_strings_terminator(), gve_poll_rx(), gzip_extract(), gzip_probe(), int13_load_eltorito(), int22(), iscsi_tx_data_out(), memtop_urealloc(), multiboot_find_header(), nbi_exec(), nbi_probe(), nbi_process_segments(), netvsc_buffer_copy(), peerdist_info_get(), pem_asn1(), pem_marker(), png_image_header(), png_palette(), png_pixbuf(), png_pixels_pass(), png_probe(), png_unfilter_pass(), pnm_ascii(), pnm_binary(), pnm_probe(), pnm_type(), print_user_string(), process_script(), pxe_api_call(), pxe_loader_call(), pxe_probe_no_mz(), pxenv_file_exec(), pxenv_file_open(), pxenv_udp_write(), read_smbios_string(), read_smbios_structure(), rsdp_find_rsdt_range(), script_probe(), sdi_parse_header(), shuffle(), smbios_checksum(), txnic_poll_cq(), typeof(), ucode_parse_amd(), ucode_parse_intel(), ucode_probe(), ucode_status(), ucode_verify(), usbblk_out_data(), vesafb_mode_list(), vram_fetch(), xferbuf_umalloc_read(), and zlib_probe().