Navigation Menu

Skip to content

Commit

Permalink
[uaccess] Add userptr_sub() to find the difference between two user p…
Browse files Browse the repository at this point in the history
…ointers

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Nov 5, 2012
1 parent 54a861a commit 1494d41
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/arch/i386/include/librm.h
Expand Up @@ -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,
Expand Down
6 changes: 6 additions & 0 deletions src/include/ipxe/efi/efi_uaccess.h
Expand Up @@ -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,
Expand Down
6 changes: 6 additions & 0 deletions src/include/ipxe/linux/linux_uaccess.h
Expand Up @@ -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)
{
Expand Down
21 changes: 21 additions & 0 deletions src/include/ipxe/uaccess.h
Expand Up @@ -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
*
Expand Down Expand Up @@ -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
*
Expand Down

0 comments on commit 1494d41

Please sign in to comment.