]> git.ipfire.org Git - people/ms/u-boot.git/blame - cmd/host.c
omap3_logic: Fix Environmental location
[people/ms/u-boot.git] / cmd / host.c
CommitLineData
d304931f
SG
1/*
2 * Copyright (c) 2012, Google Inc.
3 *
1a459660 4 * SPDX-License-Identifier: GPL-2.0+
d304931f
SG
5 */
6
7#include <common.h>
40fd0508 8#include <dm.h>
d304931f 9#include <fs.h>
f4d8de48
HN
10#include <part.h>
11#include <sandboxblockdev.h>
1221ce45 12#include <linux/errno.h>
d304931f 13
9b97b6ba
SS
14static int host_curr_device = -1;
15
bacfb1df 16static int do_host_load(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f
SG
17 char * const argv[])
18{
9ade4857 19 return do_load(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
d304931f
SG
20}
21
bacfb1df 22static int do_host_ls(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f
SG
23 char * const argv[])
24{
25 return do_ls(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
26}
27
49afb379
SB
28static int do_host_size(cmd_tbl_t *cmdtp, int flag, int argc,
29 char * const argv[])
30{
31 return do_size(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
32}
33
bacfb1df 34static int do_host_save(cmd_tbl_t *cmdtp, int flag, int argc,
7eb2c8d5
SG
35 char * const argv[])
36{
9ade4857 37 return do_save(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
7eb2c8d5
SG
38}
39
bacfb1df 40static int do_host_bind(cmd_tbl_t *cmdtp, int flag, int argc,
f4d8de48
HN
41 char * const argv[])
42{
43 if (argc < 2 || argc > 3)
44 return CMD_RET_USAGE;
45 char *ep;
46 char *dev_str = argv[1];
47 char *file = argc >= 3 ? argv[2] : NULL;
48 int dev = simple_strtoul(dev_str, &ep, 16);
49 if (*ep) {
50 printf("** Bad device specification %s **\n", dev_str);
51 return CMD_RET_USAGE;
52 }
53 return host_dev_bind(dev, file);
54}
55
bacfb1df 56static int do_host_info(cmd_tbl_t *cmdtp, int flag, int argc,
f4d8de48
HN
57 char * const argv[])
58{
59 if (argc < 1 || argc > 2)
60 return CMD_RET_USAGE;
61 int min_dev = 0;
62 int max_dev = CONFIG_HOST_MAX_DEVICES - 1;
63 if (argc >= 2) {
64 char *ep;
65 char *dev_str = argv[1];
66 int dev = simple_strtoul(dev_str, &ep, 16);
67 if (*ep) {
68 printf("** Bad device specification %s **\n", dev_str);
69 return CMD_RET_USAGE;
70 }
71 min_dev = dev;
72 max_dev = dev;
73 }
74 int dev;
75 printf("%3s %12s %s\n", "dev", "blocks", "path");
76 for (dev = min_dev; dev <= max_dev; dev++) {
4101f687 77 struct blk_desc *blk_dev;
f4d8de48
HN
78 int ret;
79
80 printf("%3d ", dev);
81 ret = host_get_dev_err(dev, &blk_dev);
82 if (ret) {
83 if (ret == -ENOENT)
84 puts("Not bound to a backing file\n");
85 else if (ret == -ENODEV)
86 puts("Invalid host device number\n");
87
88 continue;
89 }
40fd0508
SG
90 struct host_block_dev *host_dev;
91
92#ifdef CONFIG_BLK
93 host_dev = dev_get_priv(blk_dev->bdev);
94#else
95 host_dev = blk_dev->priv;
96#endif
f4d8de48
HN
97 printf("%12lu %s\n", (unsigned long)blk_dev->lba,
98 host_dev->filename);
99 }
100 return 0;
101}
102
9b97b6ba
SS
103static int do_host_dev(cmd_tbl_t *cmdtp, int flag, int argc,
104 char * const argv[])
105{
106 int dev;
107 char *ep;
4101f687 108 struct blk_desc *blk_dev;
9b97b6ba
SS
109 int ret;
110
111 if (argc < 1 || argc > 3)
112 return CMD_RET_USAGE;
113
114 if (argc == 1) {
115 if (host_curr_device < 0) {
116 printf("No current host device\n");
117 return 1;
118 }
119 printf("Current host device %d\n", host_curr_device);
120 return 0;
121 }
122
123 dev = simple_strtoul(argv[1], &ep, 16);
124 if (*ep) {
125 printf("** Bad device specification %s **\n", argv[2]);
126 return CMD_RET_USAGE;
127 }
128
129 ret = host_get_dev_err(dev, &blk_dev);
130 if (ret) {
131 if (ret == -ENOENT)
132 puts("Not bound to a backing file\n");
133 else if (ret == -ENODEV)
134 puts("Invalid host device number\n");
135
136 return 1;
137 }
138
139 host_curr_device = dev;
140 return 0;
141}
142
bacfb1df
SS
143static cmd_tbl_t cmd_host_sub[] = {
144 U_BOOT_CMD_MKENT(load, 7, 0, do_host_load, "", ""),
145 U_BOOT_CMD_MKENT(ls, 3, 0, do_host_ls, "", ""),
146 U_BOOT_CMD_MKENT(save, 6, 0, do_host_save, "", ""),
49afb379 147 U_BOOT_CMD_MKENT(size, 3, 0, do_host_size, "", ""),
bacfb1df
SS
148 U_BOOT_CMD_MKENT(bind, 3, 0, do_host_bind, "", ""),
149 U_BOOT_CMD_MKENT(info, 3, 0, do_host_info, "", ""),
9b97b6ba 150 U_BOOT_CMD_MKENT(dev, 0, 1, do_host_dev, "", ""),
d304931f
SG
151};
152
bacfb1df 153static int do_host(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f
SG
154 char * const argv[])
155{
156 cmd_tbl_t *c;
157
bacfb1df 158 /* Skip past 'host' */
d304931f
SG
159 argc--;
160 argv++;
161
bacfb1df
SS
162 c = find_cmd_tbl(argv[0], cmd_host_sub,
163 ARRAY_SIZE(cmd_host_sub));
d304931f
SG
164
165 if (c)
166 return c->cmd(cmdtp, flag, argc, argv);
167 else
168 return CMD_RET_USAGE;
169}
170
171U_BOOT_CMD(
bacfb1df
SS
172 sb, 8, 1, do_host,
173 "Deprecated: use 'host' command instead.", ""
174);
175
176U_BOOT_CMD(
177 host, 8, 1, do_host,
178 "Miscellaneous host commands",
4d907025 179 "load hostfs - <addr> <filename> [<bytes> <offset>] - "
7eb2c8d5 180 "load a file from host\n"
bacfb1df
SS
181 "host ls hostfs - <filename> - list files on host\n"
182 "host save hostfs - <addr> <filename> <bytes> [<offset>] - "
7eb2c8d5 183 "save a file to host\n"
6baa692f 184 "host size hostfs - <filename> - determine size of file on host\n"
bacfb1df
SS
185 "host bind <dev> [<filename>] - bind \"host\" device to file\n"
186 "host info [<dev>] - show device binding & info\n"
9b97b6ba 187 "host dev [<dev>] - Set or retrieve the current host device\n"
bacfb1df 188 "host commands use the \"hostfs\" device. The \"host\" device is used\n"
4d907025 189 "with standard IO commands such as fatls or ext2load"
d304931f 190);