xref: /rk3399_rockchip-uboot/fs/sandbox/sandboxfs.c (revision 85300a9a9dfb364ab1a5f94e6d3f9e558a193be1)
192ccc96bSSimon Glass /*
292ccc96bSSimon Glass  * Copyright (c) 2012, Google Inc.
392ccc96bSSimon Glass  *
41a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
592ccc96bSSimon Glass  */
692ccc96bSSimon Glass 
792ccc96bSSimon Glass #include <common.h>
892ccc96bSSimon Glass #include <fs.h>
992ccc96bSSimon Glass #include <os.h>
1092ccc96bSSimon Glass 
1192ccc96bSSimon Glass int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
1292ccc96bSSimon Glass {
13*85300a9aSSjoerd Simons 	/*
14*85300a9aSSjoerd Simons 	 * Only accept a NULL block_dev_desc_t for the sandbox, which is when
15*85300a9aSSjoerd Simons 	 * hostfs interface is used
16*85300a9aSSjoerd Simons 	 */
17*85300a9aSSjoerd Simons 	return rbdd != NULL;
1892ccc96bSSimon Glass }
1992ccc96bSSimon Glass 
2096b1046dSSuriyan Ramasami int sandbox_fs_read_at(const char *filename, loff_t pos, void *buffer,
2196b1046dSSuriyan Ramasami 		       loff_t maxsize, loff_t *actread)
2292ccc96bSSimon Glass {
2396b1046dSSuriyan Ramasami 	loff_t size;
2492ccc96bSSimon Glass 	int fd, ret;
2592ccc96bSSimon Glass 
2692ccc96bSSimon Glass 	fd = os_open(filename, OS_O_RDONLY);
2792ccc96bSSimon Glass 	if (fd < 0)
2892ccc96bSSimon Glass 		return fd;
2992ccc96bSSimon Glass 	ret = os_lseek(fd, pos, OS_SEEK_SET);
3092ccc96bSSimon Glass 	if (ret == -1) {
3192ccc96bSSimon Glass 		os_close(fd);
3292ccc96bSSimon Glass 		return ret;
3392ccc96bSSimon Glass 	}
3496b1046dSSuriyan Ramasami 	if (!maxsize) {
3596b1046dSSuriyan Ramasami 		ret = os_get_filesize(filename, &size);
3696b1046dSSuriyan Ramasami 		if (ret) {
3796b1046dSSuriyan Ramasami 			os_close(fd);
3896b1046dSSuriyan Ramasami 			return ret;
3996b1046dSSuriyan Ramasami 		}
4096b1046dSSuriyan Ramasami 
4196b1046dSSuriyan Ramasami 		maxsize = size;
4296b1046dSSuriyan Ramasami 	}
4396b1046dSSuriyan Ramasami 
4492ccc96bSSimon Glass 	size = os_read(fd, buffer, maxsize);
4592ccc96bSSimon Glass 	os_close(fd);
4692ccc96bSSimon Glass 
4796b1046dSSuriyan Ramasami 	if (size < 0) {
4896b1046dSSuriyan Ramasami 		ret = -1;
4996b1046dSSuriyan Ramasami 	} else {
5096b1046dSSuriyan Ramasami 		ret = 0;
5196b1046dSSuriyan Ramasami 		*actread = size;
5292ccc96bSSimon Glass 	}
5392ccc96bSSimon Glass 
5496b1046dSSuriyan Ramasami 	return ret;
5596b1046dSSuriyan Ramasami }
5696b1046dSSuriyan Ramasami 
5796b1046dSSuriyan Ramasami int sandbox_fs_write_at(const char *filename, loff_t pos, void *buffer,
5896b1046dSSuriyan Ramasami 			loff_t towrite, loff_t *actwrite)
597eb2c8d5SSimon Glass {
607eb2c8d5SSimon Glass 	ssize_t size;
617eb2c8d5SSimon Glass 	int fd, ret;
627eb2c8d5SSimon Glass 
637eb2c8d5SSimon Glass 	fd = os_open(filename, OS_O_RDWR | OS_O_CREAT);
647eb2c8d5SSimon Glass 	if (fd < 0)
657eb2c8d5SSimon Glass 		return fd;
667eb2c8d5SSimon Glass 	ret = os_lseek(fd, pos, OS_SEEK_SET);
677eb2c8d5SSimon Glass 	if (ret == -1) {
687eb2c8d5SSimon Glass 		os_close(fd);
697eb2c8d5SSimon Glass 		return ret;
707eb2c8d5SSimon Glass 	}
717eb2c8d5SSimon Glass 	size = os_write(fd, buffer, towrite);
727eb2c8d5SSimon Glass 	os_close(fd);
737eb2c8d5SSimon Glass 
7496b1046dSSuriyan Ramasami 	if (size == -1) {
7596b1046dSSuriyan Ramasami 		ret = -1;
7696b1046dSSuriyan Ramasami 	} else {
7796b1046dSSuriyan Ramasami 		ret = 0;
7896b1046dSSuriyan Ramasami 		*actwrite = size;
7996b1046dSSuriyan Ramasami 	}
8096b1046dSSuriyan Ramasami 
8196b1046dSSuriyan Ramasami 	return ret;
827eb2c8d5SSimon Glass }
837eb2c8d5SSimon Glass 
8492ccc96bSSimon Glass int sandbox_fs_ls(const char *dirname)
8592ccc96bSSimon Glass {
8692ccc96bSSimon Glass 	struct os_dirent_node *head, *node;
8792ccc96bSSimon Glass 	int ret;
8892ccc96bSSimon Glass 
8992ccc96bSSimon Glass 	ret = os_dirent_ls(dirname, &head);
9092ccc96bSSimon Glass 	if (ret)
9192ccc96bSSimon Glass 		return ret;
9292ccc96bSSimon Glass 
9392ccc96bSSimon Glass 	for (node = head; node; node = node->next) {
9492ccc96bSSimon Glass 		printf("%s %10lu %s\n", os_dirent_get_typename(node->type),
9592ccc96bSSimon Glass 		       node->size, node->name);
9692ccc96bSSimon Glass 	}
9792ccc96bSSimon Glass 
9892ccc96bSSimon Glass 	return 0;
9992ccc96bSSimon Glass }
10092ccc96bSSimon Glass 
1010a30aa1eSStephen Warren int sandbox_fs_exists(const char *filename)
1020a30aa1eSStephen Warren {
10396b1046dSSuriyan Ramasami 	loff_t size;
10496b1046dSSuriyan Ramasami 	int ret;
1050a30aa1eSStephen Warren 
10696b1046dSSuriyan Ramasami 	ret = os_get_filesize(filename, &size);
10796b1046dSSuriyan Ramasami 	return ret == 0;
1080a30aa1eSStephen Warren }
1090a30aa1eSStephen Warren 
110d455d878SSuriyan Ramasami int sandbox_fs_size(const char *filename, loff_t *size)
111cf659819SStephen Warren {
112d455d878SSuriyan Ramasami 	return os_get_filesize(filename, size);
113cf659819SStephen Warren }
114cf659819SStephen Warren 
11592ccc96bSSimon Glass void sandbox_fs_close(void)
11692ccc96bSSimon Glass {
11792ccc96bSSimon Glass }
11892ccc96bSSimon Glass 
119d455d878SSuriyan Ramasami int fs_read_sandbox(const char *filename, void *buf, loff_t offset, loff_t len,
120d455d878SSuriyan Ramasami 		    loff_t *actread)
12192ccc96bSSimon Glass {
12296b1046dSSuriyan Ramasami 	int ret;
12392ccc96bSSimon Glass 
124d455d878SSuriyan Ramasami 	ret = sandbox_fs_read_at(filename, offset, buf, len, actread);
125d455d878SSuriyan Ramasami 	if (ret)
12692ccc96bSSimon Glass 		printf("** Unable to read file %s **\n", filename);
127d455d878SSuriyan Ramasami 
12896b1046dSSuriyan Ramasami 	return ret;
12992ccc96bSSimon Glass }
13092ccc96bSSimon Glass 
131d455d878SSuriyan Ramasami int fs_write_sandbox(const char *filename, void *buf, loff_t offset,
132d455d878SSuriyan Ramasami 		     loff_t len, loff_t *actwrite)
1337eb2c8d5SSimon Glass {
13496b1046dSSuriyan Ramasami 	int ret;
1357eb2c8d5SSimon Glass 
136d455d878SSuriyan Ramasami 	ret = sandbox_fs_write_at(filename, offset, buf, len, actwrite);
137d455d878SSuriyan Ramasami 	if (ret)
1387eb2c8d5SSimon Glass 		printf("** Unable to write file %s **\n", filename);
1397eb2c8d5SSimon Glass 
140d455d878SSuriyan Ramasami 	return ret;
1417eb2c8d5SSimon Glass }
142