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