summaryrefslogtreecommitdiffstats
path: root/src/arch/i386/include
diff options
context:
space:
mode:
authorMichael Brown2007-01-12 04:14:15 +0100
committerMichael Brown2007-01-12 04:14:15 +0100
commit1d313234b357f0b7dda57247158b7e2e1919a980 (patch)
treee25991d10954f271d9db62a1f6709283ba85a929 /src/arch/i386/include
parentAllow external code to update hidden memory regions. (diff)
downloadipxe-1d313234b357f0b7dda57247158b7e2e1919a980.tar.gz
ipxe-1d313234b357f0b7dda57247158b7e2e1919a980.tar.xz
ipxe-1d313234b357f0b7dda57247158b7e2e1919a980.zip
Rename copy_user() to memcpy_user(). Add memmove_user() and
userptr_add().
Diffstat (limited to 'src/arch/i386/include')
-rw-r--r--src/arch/i386/include/librm.h32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/arch/i386/include/librm.h b/src/arch/i386/include/librm.h
index 19966c6db..859249e46 100644
--- a/src/arch/i386/include/librm.h
+++ b/src/arch/i386/include/librm.h
@@ -111,6 +111,18 @@ copy_from_real_librm ( void *dest, unsigned int src_seg,
typedef intptr_t userptr_t;
/**
+ * Add offset to user pointer
+ *
+ * @v ptr User pointer
+ * @v offset Offset
+ * @ret new_ptr New pointer value
+ */
+static inline __attribute__ (( always_inline )) userptr_t
+userptr_add ( userptr_t ptr, off_t offset ) {
+ return ( ptr + offset );
+}
+
+/**
* Copy data to user buffer
*
* @v buffer User buffer
@@ -146,13 +158,29 @@ copy_from_user ( void *dest, userptr_t buffer, off_t offset, size_t len ) {
* @v len Length
*/
static inline __attribute__ (( always_inline )) void
-copy_user ( userptr_t dest, off_t dest_off, userptr_t src, off_t src_off,
- size_t len ) {
+memcpy_user ( userptr_t dest, off_t dest_off, userptr_t src, off_t src_off,
+ size_t len ) {
memcpy ( ( ( void * ) dest + dest_off ), ( ( void * ) src + src_off ),
len );
}
/**
+ * Copy data between user buffers, allowing for overlap
+ *
+ * @v dest Destination user buffer
+ * @v dest_off Offset within destination buffer
+ * @v src Source user buffer
+ * @v src_off Offset within source buffer
+ * @v len Length
+ */
+static inline __attribute__ (( always_inline )) void
+memmove_user ( userptr_t dest, off_t dest_off, userptr_t src, off_t src_off,
+ size_t len ) {
+ memmove ( ( ( void * ) dest + dest_off ), ( ( void * ) src + src_off ),
+ len );
+}
+
+/**
* Fill user buffer with a constant byte
*
* @v buffer User buffer