mirror of https://github.com/ipxe/ipxe.git
[uaccess] Add userptr_sub() to find the difference between two user pointers
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/598/head
parent
54a861a7bd
commit
1494d41d0a
|
@ -68,6 +68,12 @@ UACCESS_INLINE ( librm, userptr_add ) ( userptr_t userptr, off_t offset ) {
|
||||||
return trivial_userptr_add ( userptr, offset );
|
return trivial_userptr_add ( userptr, offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline __always_inline off_t
|
||||||
|
UACCESS_INLINE ( librm, userptr_sub ) ( userptr_t userptr,
|
||||||
|
userptr_t subtrahend ) {
|
||||||
|
return trivial_userptr_sub ( userptr, subtrahend );
|
||||||
|
}
|
||||||
|
|
||||||
static inline __always_inline void
|
static inline __always_inline void
|
||||||
UACCESS_INLINE ( librm, memcpy_user ) ( userptr_t dest, off_t dest_off,
|
UACCESS_INLINE ( librm, memcpy_user ) ( userptr_t dest, off_t dest_off,
|
||||||
userptr_t src, off_t src_off,
|
userptr_t src, off_t src_off,
|
||||||
|
|
|
@ -56,6 +56,12 @@ UACCESS_INLINE ( efi, userptr_add ) ( userptr_t userptr, off_t offset ) {
|
||||||
return trivial_userptr_add ( userptr, offset );
|
return trivial_userptr_add ( userptr, offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline __always_inline off_t
|
||||||
|
UACCESS_INLINE ( efi, userptr_sub ) ( userptr_t userptr,
|
||||||
|
userptr_t subtrahend ) {
|
||||||
|
return trivial_userptr_sub ( userptr, subtrahend );
|
||||||
|
}
|
||||||
|
|
||||||
static inline __always_inline void
|
static inline __always_inline void
|
||||||
UACCESS_INLINE ( efi, memcpy_user ) ( userptr_t dest, off_t dest_off,
|
UACCESS_INLINE ( efi, memcpy_user ) ( userptr_t dest, off_t dest_off,
|
||||||
userptr_t src, off_t src_off,
|
userptr_t src, off_t src_off,
|
||||||
|
|
|
@ -71,6 +71,12 @@ UACCESS_INLINE(linux, userptr_add)(userptr_t userptr, off_t offset)
|
||||||
return trivial_userptr_add(userptr, offset);
|
return trivial_userptr_add(userptr, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline __always_inline off_t
|
||||||
|
UACCESS_INLINE(linux, userptr_sub)(userptr_t userptr, userptr_t subtrahend)
|
||||||
|
{
|
||||||
|
return trivial_userptr_sub ( userptr, subtrahend );
|
||||||
|
}
|
||||||
|
|
||||||
static inline __always_inline void
|
static inline __always_inline void
|
||||||
UACCESS_INLINE(linux, memcpy_user)(userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len)
|
UACCESS_INLINE(linux, memcpy_user)(userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -82,6 +82,18 @@ trivial_userptr_add ( userptr_t userptr, off_t offset ) {
|
||||||
return ( userptr + offset );
|
return ( userptr + offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subtract user pointers
|
||||||
|
*
|
||||||
|
* @v userptr User pointer
|
||||||
|
* @v subtrahend User pointer to be subtracted
|
||||||
|
* @ret offset Offset
|
||||||
|
*/
|
||||||
|
static inline __always_inline off_t
|
||||||
|
trivial_userptr_sub ( userptr_t userptr, userptr_t subtrahend ) {
|
||||||
|
return ( userptr - subtrahend );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy data between user buffers
|
* Copy data between user buffers
|
||||||
*
|
*
|
||||||
|
@ -239,6 +251,15 @@ void * user_to_virt ( userptr_t userptr, off_t offset );
|
||||||
*/
|
*/
|
||||||
userptr_t userptr_add ( userptr_t userptr, off_t offset );
|
userptr_t userptr_add ( userptr_t userptr, off_t offset );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subtract user pointers
|
||||||
|
*
|
||||||
|
* @v userptr User pointer
|
||||||
|
* @v subtrahend User pointer to be subtracted
|
||||||
|
* @ret offset Offset
|
||||||
|
*/
|
||||||
|
off_t userptr_sub ( userptr_t userptr, userptr_t subtrahend );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert virtual address to a physical address
|
* Convert virtual address to a physical address
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue