diff options
Diffstat (limited to 'drivers/io/io_memmap.c')
-rw-r--r-- | drivers/io/io_memmap.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/drivers/io/io_memmap.c b/drivers/io/io_memmap.c index 96590b6c0..eed50cc08 100644 --- a/drivers/io/io_memmap.c +++ b/drivers/io/io_memmap.c @@ -23,10 +23,10 @@ typedef struct { /* Use the 'in_use' flag as any value for base and file_pos could be * valid. */ - int in_use; - uintptr_t base; - size_t file_pos; - size_t size; + int in_use; + uintptr_t base; + unsigned long long file_pos; + unsigned long long size; } file_state_t; static file_state_t current_file = {0}; @@ -42,7 +42,7 @@ static int memmap_dev_open(const uintptr_t dev_spec, io_dev_info_t **dev_info); static int memmap_block_open(io_dev_info_t *dev_info, const uintptr_t spec, io_entity_t *entity); static int memmap_block_seek(io_entity_t *entity, int mode, - ssize_t offset); + signed long long offset); static int memmap_block_len(io_entity_t *entity, size_t *length); static int memmap_block_read(io_entity_t *entity, uintptr_t buffer, size_t length, size_t *length_read); @@ -129,7 +129,8 @@ static int memmap_block_open(io_dev_info_t *dev_info, const uintptr_t spec, /* Seek to a particular file offset on the memmap device */ -static int memmap_block_seek(io_entity_t *entity, int mode, ssize_t offset) +static int memmap_block_seek(io_entity_t *entity, int mode, + signed long long offset) { int result = -ENOENT; file_state_t *fp; @@ -141,10 +142,11 @@ static int memmap_block_seek(io_entity_t *entity, int mode, ssize_t offset) fp = (file_state_t *) entity->info; /* Assert that new file position is valid */ - assert((offset >= 0) && (offset < fp->size)); + assert((offset >= 0) && + ((unsigned long long)offset < fp->size)); /* Reset file position */ - fp->file_pos = offset; + fp->file_pos = (unsigned long long)offset; result = 0; } @@ -158,7 +160,7 @@ static int memmap_block_len(io_entity_t *entity, size_t *length) assert(entity != NULL); assert(length != NULL); - *length = ((file_state_t *)entity->info)->size; + *length = (size_t)((file_state_t *)entity->info)->size; return 0; } @@ -169,7 +171,7 @@ static int memmap_block_read(io_entity_t *entity, uintptr_t buffer, size_t length, size_t *length_read) { file_state_t *fp; - size_t pos_after; + unsigned long long pos_after; assert(entity != NULL); assert(length_read != NULL); @@ -180,7 +182,8 @@ static int memmap_block_read(io_entity_t *entity, uintptr_t buffer, pos_after = fp->file_pos + length; assert((pos_after >= fp->file_pos) && (pos_after <= fp->size)); - memcpy((void *)buffer, (void *)(fp->base + fp->file_pos), length); + memcpy((void *)buffer, + (void *)((uintptr_t)(fp->base + fp->file_pos)), length); *length_read = length; @@ -196,7 +199,7 @@ static int memmap_block_write(io_entity_t *entity, const uintptr_t buffer, size_t length, size_t *length_written) { file_state_t *fp; - size_t pos_after; + unsigned long long pos_after; assert(entity != NULL); assert(length_written != NULL); @@ -207,7 +210,8 @@ static int memmap_block_write(io_entity_t *entity, const uintptr_t buffer, pos_after = fp->file_pos + length; assert((pos_after >= fp->file_pos) && (pos_after <= fp->size)); - memcpy((void *)(fp->base + fp->file_pos), (void *)buffer, length); + memcpy((void *)((uintptr_t)(fp->base + fp->file_pos)), + (void *)buffer, length); *length_written = length; |