Skip to content

Commit

Permalink
fs: Convert fs_read/write to take buffer instead of address
Browse files Browse the repository at this point in the history
The fs_read() and fs_write() functions are internal interfaces that
naturally want to get pointers as arguments. Most users so far even
have pointers and explicitly cast them into integers just to be able
to pass them into the function.

Convert them over to instead take a pointer argument for the buffer.
That way any sandbox mapping gets greatly simplified.

Signed-off-by: Alexander Graf <agraf@suse.de>
  • Loading branch information
agraf committed Jun 14, 2018
1 parent bfee249 commit eb89f03
Show file tree
Hide file tree
Showing 9 changed files with 38 additions and 38 deletions.
2 changes: 1 addition & 1 deletion board/BuR/common/common.c
Expand Up @@ -269,7 +269,7 @@ static int load_devicetree(void)
puts("load_devicetree: set_blk_dev failed.\n");
return -1;
}
rc = fs_read(dtbname, (u32)dtbaddr, 0, 0, &dtbsize);
rc = fs_read(dtbname, (u_char *)dtbaddr, 0, 0, &dtbsize);
#endif
if (rc == 0) {
gd->fdt_blob = (void *)dtbaddr;
Expand Down
10 changes: 5 additions & 5 deletions board/gdsys/p1022/controlcenterd-id.c
Expand Up @@ -874,7 +874,7 @@ static struct key_program *load_key_chunk(const char *ifname,

if (fs_set_blk_dev(ifname, dev_part_str, fs_type))
goto failure;
if (fs_read(path, (ulong)buf, 0, 12, &i) < 0)
if (fs_read(path, buf, 0, 12, &i) < 0)
goto failure;
if (i < 12)
goto failure;
Expand All @@ -890,7 +890,7 @@ static struct key_program *load_key_chunk(const char *ifname,
goto failure;
if (fs_set_blk_dev(ifname, dev_part_str, fs_type))
goto failure;
if (fs_read(path, (ulong)result, 0,
if (fs_read(path, result, 0,
sizeof(struct key_program) + header.code_size, &i) < 0)
goto failure;
if (i <= 0)
Expand Down Expand Up @@ -1019,7 +1019,7 @@ static int second_stage_init(void)
struct key_program *hmac_blob = NULL;
const char *image_path = "/ccdm.itb";
char *mac_path = NULL;
ulong image_addr;
u8 *image_addr;
loff_t image_size;
uint32_t err;

Expand Down Expand Up @@ -1059,7 +1059,7 @@ static int second_stage_init(void)
strcat(mac_path, mac_suffix);

/* read image from mmcdev (ccdm.itb) */
image_addr = (ulong)get_image_location();
image_addr = get_image_location();
if (fs_set_blk_dev("mmc", mmcdev, FS_TYPE_EXT))
goto failure;
if (fs_read(image_path, image_addr, 0, 0, &image_size) < 0)
Expand All @@ -1077,7 +1077,7 @@ static int second_stage_init(void)
puts("corrupted mac file\n");
goto failure;
}
if (check_hmac(hmac_blob, (u8 *)image_addr, image_size)) {
if (check_hmac(hmac_blob, image_addr, image_size)) {
puts("image integrity could not be verified\n");
goto failure;
}
Expand Down
4 changes: 2 additions & 2 deletions cmd/mvebu/bubt.c
Expand Up @@ -209,7 +209,7 @@ static size_t mmc_read_file(const char *file_name)
}

/* Perfrom file read */
rc = fs_read(file_name, get_load_addr(), 0, 0, &act_read);
rc = fs_read(file_name, (void *)get_load_addr(), 0, 0, &act_read);
if (rc)
return 0;

Expand Down Expand Up @@ -392,7 +392,7 @@ static size_t usb_read_file(const char *file_name)
}

/* Perfrom file read */
rc = fs_read(file_name, get_load_addr(), 0, 0, &act_read);
rc = fs_read(file_name, (void *)get_load_addr(), 0, 0, &act_read);
if (rc)
return 0;

Expand Down
4 changes: 3 additions & 1 deletion common/splash_source.c
Expand Up @@ -11,6 +11,7 @@
#include <fs.h>
#include <fdt_support.h>
#include <image.h>
#include <mapmem.h>
#include <nand.h>
#include <sata.h>
#include <spi.h>
Expand Down Expand Up @@ -252,7 +253,8 @@ static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr)
}

splash_select_fs_dev(location);
res = fs_read(splash_file, bmp_load_addr, 0, 0, &actread);
res = fs_read(splash_file, map_sysmem(bmp_load_addr, bmp_size),
0, 0, &actread);

out:
if (location->ubivol != NULL)
Expand Down
12 changes: 6 additions & 6 deletions drivers/bootcount/bootcount_ext.c
Expand Up @@ -24,10 +24,10 @@ void bootcount_store(ulong a)
buf = map_sysmem(CONFIG_SYS_BOOTCOUNT_ADDR, 2);
buf[0] = BC_MAGIC;
buf[1] = (a & 0xff);
unmap_sysmem(buf);

ret = fs_write(CONFIG_SYS_BOOTCOUNT_EXT_NAME,
CONFIG_SYS_BOOTCOUNT_ADDR, 0, 2, &len);
ret = fs_write(CONFIG_SYS_BOOTCOUNT_EXT_NAME, buf, 0, 2, &len);

unmap_sysmem(buf);
if (ret != 0)
puts("Error storing bootcount\n");
}
Expand All @@ -44,14 +44,14 @@ ulong bootcount_load(void)
return 0;
}

ret = fs_read(CONFIG_SYS_BOOTCOUNT_EXT_NAME, CONFIG_SYS_BOOTCOUNT_ADDR,
0, 2, &len_read);
buf = map_sysmem(CONFIG_SYS_BOOTCOUNT_ADDR, 2);

ret = fs_read(CONFIG_SYS_BOOTCOUNT_EXT_NAME, buf, 0, 2, &len_read);
if (ret != 0 || len_read != 2) {
puts("Error loading bootcount\n");
return 0;
}

buf = map_sysmem(CONFIG_SYS_BOOTCOUNT_ADDR, 2);
if (buf[0] == BC_MAGIC)
ret = buf[1];

Expand Down
6 changes: 3 additions & 3 deletions drivers/fpga/zynqpl.c
Expand Up @@ -431,7 +431,7 @@ static int zynq_loadfs(xilinx_desc *desc, const void *buf, size_t bsize,
if (fs_set_blk_dev(interface, dev_part, fstype))
return FPGA_FAIL;

if (fs_read(filename, (u32) buf, pos, blocksize, &actread) < 0)
if (fs_read(filename, buf, pos, blocksize, &actread) < 0)
return FPGA_FAIL;

if (zynq_validate_bitstream(desc, buf, bsize, blocksize, &swap,
Expand All @@ -454,10 +454,10 @@ static int zynq_loadfs(xilinx_desc *desc, const void *buf, size_t bsize,
return FPGA_FAIL;

if (bsize > blocksize) {
if (fs_read(filename, (u32) buf, pos, blocksize, &actread) < 0)
if (fs_read(filename, buf, pos, blocksize, &actread) < 0)
return FPGA_FAIL;
} else {
if (fs_read(filename, (u32) buf, pos, bsize, &actread) < 0)
if (fs_read(filename, buf, pos, bsize, &actread) < 0)
return FPGA_FAIL;
}
} while (bsize > blocksize);
Expand Down
20 changes: 10 additions & 10 deletions fs/fs.c
Expand Up @@ -402,20 +402,17 @@ int fs_size(const char *filename, loff_t *size)
return ret;
}

int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
int fs_read(const char *filename, void *buf, loff_t offset, loff_t len,
loff_t *actread)
{
struct fstype_info *info = fs_get_info(fs_type);
void *buf;
int ret;

/*
* We don't actually know how many bytes are being read, since len==0
* means read the whole file.
*/
buf = map_sysmem(addr, len);
ret = info->read(filename, buf, offset, len, actread);
unmap_sysmem(buf);

/* If we requested a specific number of bytes, check we got it */
if (ret == 0 && len && *actread != len)
Expand All @@ -425,16 +422,13 @@ int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
return ret;
}

int fs_write(const char *filename, ulong addr, loff_t offset, loff_t len,
int fs_write(const char *filename, void *buf, loff_t offset, loff_t len,
loff_t *actwrite)
{
struct fstype_info *info = fs_get_info(fs_type);
void *buf;
int ret;

buf = map_sysmem(addr, len);
ret = info->write(filename, buf, offset, len, actwrite);
unmap_sysmem(buf);

if (ret < 0 && len != *actwrite) {
printf("** Unable to write file %s **\n", filename);
Expand Down Expand Up @@ -529,6 +523,7 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
int ret;
unsigned long time;
char *ep;
void *buf;

if (argc < 2)
return CMD_RET_USAGE;
Expand Down Expand Up @@ -567,9 +562,11 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
else
pos = 0;

buf = map_sysmem(addr, bytes);
time = get_timer(0);
ret = fs_read(filename, addr, pos, bytes, &len_read);
ret = fs_read(filename, buf, pos, bytes, &len_read);
time = get_timer(time);
unmap_sysmem(buf);
if (ret < 0)
return 1;

Expand Down Expand Up @@ -623,6 +620,7 @@ int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
loff_t len;
int ret;
unsigned long time;
void *buf;

if (argc < 6 || argc > 7)
return CMD_RET_USAGE;
Expand All @@ -638,9 +636,11 @@ int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
else
pos = 0;

buf = map_sysmem(addr, bytes);
time = get_timer(0);
ret = fs_write(filename, addr, pos, bytes, &len);
ret = fs_write(filename, buf, pos, bytes, &len);
time = get_timer(time);
unmap_sysmem(buf);
if (ret < 0)
return 1;

Expand Down
12 changes: 6 additions & 6 deletions include/fs.h
Expand Up @@ -76,27 +76,27 @@ int fs_size(const char *filename, loff_t *size);
* Note that not all filesystem types support either/both offset!=0 or len!=0.
*
* @filename: Name of file to read from
* @addr: The address to read into
* @buf: The buffer to read into
* @offset: The offset in file to read from
* @len: The number of bytes to read. Maybe 0 to read entire file
* @actread: Returns the actual number of bytes read
* @return 0 if ok with valid *actread, -1 on error conditions
*/
int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
int fs_read(const char *filename, void *buf, loff_t offset, loff_t len,
loff_t *actread);

/*
* fs_write - Write file to the partition previously set by fs_set_blk_dev()
* Note that not all filesystem types support offset!=0.
*
* @filename: Name of file to read from
* @addr: The address to read into
* @offset: The offset in file to read from. Maybe 0 to write to start of file
* @filename: Name of file to write to
* @buf: The buffer to read from
* @offset: The offset in file to write to. Maybe 0 to write to start of file
* @len: The number of bytes to write
* @actwrite: Returns the actual number of bytes written
* @return 0 if ok with valid *actwrite, -1 on error conditions
*/
int fs_write(const char *filename, ulong addr, loff_t offset, loff_t len,
int fs_write(const char *filename, void *buf, loff_t offset, loff_t len,
loff_t *actwrite);

/*
Expand Down
6 changes: 2 additions & 4 deletions lib/efi_loader/efi_file.c
Expand Up @@ -233,8 +233,7 @@ static efi_status_t file_read(struct file_handle *fh, u64 *buffer_size,
{
loff_t actread;

if (fs_read(fh->path, (ulong)buffer, fh->offset,
*buffer_size, &actread))
if (fs_read(fh->path, buffer, fh->offset, *buffer_size, &actread))
return EFI_DEVICE_ERROR;

*buffer_size = actread;
Expand Down Expand Up @@ -363,8 +362,7 @@ static efi_status_t EFIAPI efi_file_write(struct efi_file_handle *file,
goto error;
}

if (fs_write(fh->path, (ulong)buffer, fh->offset, *buffer_size,
&actwrite)) {
if (fs_write(fh->path, buffer, fh->offset, *buffer_size, &actwrite)) {
ret = EFI_DEVICE_ERROR;
goto error;
}
Expand Down

0 comments on commit eb89f03

Please sign in to comment.