david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[uaccess] Add userptr_sub() to find the difference between two user pointers

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2012-11-05 16:09:38 +00:00
parent 54a861a7bd
commit 1494d41d0a
4 changed files with 39 additions and 0 deletions

View File

@ -68,6 +68,12 @@ UACCESS_INLINE ( librm, userptr_add ) ( userptr_t userptr, off_t 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
UACCESS_INLINE ( librm, memcpy_user ) ( userptr_t dest, off_t dest_off,
userptr_t src, off_t src_off,

View File

@ -56,6 +56,12 @@ UACCESS_INLINE ( efi, userptr_add ) ( userptr_t userptr, off_t 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
UACCESS_INLINE ( efi, memcpy_user ) ( userptr_t dest, off_t dest_off,
userptr_t src, off_t src_off,

View File

@ -71,6 +71,12 @@ UACCESS_INLINE(linux, userptr_add)(userptr_t userptr, off_t 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
UACCESS_INLINE(linux, memcpy_user)(userptr_t dest, off_t dest_off, userptr_t src, off_t src_off, size_t len)
{

View File

@ -82,6 +82,18 @@ trivial_userptr_add ( userptr_t userptr, off_t 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
*
@ -239,6 +251,15 @@ void * user_to_virt ( 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
*