Blame view

cmd/host.c 4.37 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
d304931f2   Simon Glass   sandbox: Add 'sb'...
2
3
  /*
   * Copyright (c) 2012, Google Inc.
d304931f2   Simon Glass   sandbox: Add 'sb'...
4
5
6
   */
  
  #include <common.h>
40fd05089   Simon Glass   dm: sandbox: Add ...
7
  #include <dm.h>
d304931f2   Simon Glass   sandbox: Add 'sb'...
8
  #include <fs.h>
f4d8de48f   Henrik Nordström   sandbox: block dr...
9
10
  #include <part.h>
  #include <sandboxblockdev.h>
1221ce459   Masahiro Yamada   treewide: replace...
11
  #include <linux/errno.h>
d304931f2   Simon Glass   sandbox: Add 'sb'...
12

9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
13
  static int host_curr_device = -1;
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
14
  static int do_host_load(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f2   Simon Glass   sandbox: Add 'sb'...
15
16
  			   char * const argv[])
  {
9ade4857a   Tom Rini   cmd_sandbox.c: Up...
17
  	return do_load(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
d304931f2   Simon Glass   sandbox: Add 'sb'...
18
  }
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
19
  static int do_host_ls(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f2   Simon Glass   sandbox: Add 'sb'...
20
21
22
23
  			   char * const argv[])
  {
  	return do_ls(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
  }
49afb3798   Stefan Brüns   sandbox: Add "hos...
24
25
26
27
28
  static int do_host_size(cmd_tbl_t *cmdtp, int flag, int argc,
  			   char * const argv[])
  {
  	return do_size(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
  }
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
29
  static int do_host_save(cmd_tbl_t *cmdtp, int flag, int argc,
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
30
31
  			   char * const argv[])
  {
9ade4857a   Tom Rini   cmd_sandbox.c: Up...
32
  	return do_save(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
33
  }
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
34
  static int do_host_bind(cmd_tbl_t *cmdtp, int flag, int argc,
f4d8de48f   Henrik Nordström   sandbox: block dr...
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  			   char * const argv[])
  {
  	if (argc < 2 || argc > 3)
  		return CMD_RET_USAGE;
  	char *ep;
  	char *dev_str = argv[1];
  	char *file = argc >= 3 ? argv[2] : NULL;
  	int dev = simple_strtoul(dev_str, &ep, 16);
  	if (*ep) {
  		printf("** Bad device specification %s **
  ", dev_str);
  		return CMD_RET_USAGE;
  	}
  	return host_dev_bind(dev, file);
  }
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
50
  static int do_host_info(cmd_tbl_t *cmdtp, int flag, int argc,
f4d8de48f   Henrik Nordström   sandbox: block dr...
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  			   char * const argv[])
  {
  	if (argc < 1 || argc > 2)
  		return CMD_RET_USAGE;
  	int min_dev = 0;
  	int max_dev = CONFIG_HOST_MAX_DEVICES - 1;
  	if (argc >= 2) {
  		char *ep;
  		char *dev_str = argv[1];
  		int dev = simple_strtoul(dev_str, &ep, 16);
  		if (*ep) {
  			printf("** Bad device specification %s **
  ", dev_str);
  			return CMD_RET_USAGE;
  		}
  		min_dev = dev;
  		max_dev = dev;
  	}
  	int dev;
  	printf("%3s %12s %s
  ", "dev", "blocks", "path");
  	for (dev = min_dev; dev <= max_dev; dev++) {
4101f6879   Simon Glass   dm: Drop the bloc...
73
  		struct blk_desc *blk_dev;
f4d8de48f   Henrik Nordström   sandbox: block dr...
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  		int ret;
  
  		printf("%3d ", dev);
  		ret = host_get_dev_err(dev, &blk_dev);
  		if (ret) {
  			if (ret == -ENOENT)
  				puts("Not bound to a backing file
  ");
  			else if (ret == -ENODEV)
  				puts("Invalid host device number
  ");
  
  			continue;
  		}
40fd05089   Simon Glass   dm: sandbox: Add ...
88
89
90
91
92
93
94
  		struct host_block_dev *host_dev;
  
  #ifdef CONFIG_BLK
  		host_dev = dev_get_priv(blk_dev->bdev);
  #else
  		host_dev = blk_dev->priv;
  #endif
f4d8de48f   Henrik Nordström   sandbox: block dr...
95
96
97
98
99
100
  		printf("%12lu %s
  ", (unsigned long)blk_dev->lba,
  		       host_dev->filename);
  	}
  	return 0;
  }
9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
101
102
103
104
105
  static int do_host_dev(cmd_tbl_t *cmdtp, int flag, int argc,
  		       char * const argv[])
  {
  	int dev;
  	char *ep;
4101f6879   Simon Glass   dm: Drop the bloc...
106
  	struct blk_desc *blk_dev;
9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
  	int ret;
  
  	if (argc < 1 || argc > 3)
  		return CMD_RET_USAGE;
  
  	if (argc == 1) {
  		if (host_curr_device < 0) {
  			printf("No current host device
  ");
  			return 1;
  		}
  		printf("Current host device %d
  ", host_curr_device);
  		return 0;
  	}
  
  	dev = simple_strtoul(argv[1], &ep, 16);
  	if (*ep) {
  		printf("** Bad device specification %s **
  ", argv[2]);
  		return CMD_RET_USAGE;
  	}
  
  	ret = host_get_dev_err(dev, &blk_dev);
  	if (ret) {
  		if (ret == -ENOENT)
  			puts("Not bound to a backing file
  ");
  		else if (ret == -ENODEV)
  			puts("Invalid host device number
  ");
  
  		return 1;
  	}
  
  	host_curr_device = dev;
  	return 0;
  }
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
145
146
147
148
  static cmd_tbl_t cmd_host_sub[] = {
  	U_BOOT_CMD_MKENT(load, 7, 0, do_host_load, "", ""),
  	U_BOOT_CMD_MKENT(ls, 3, 0, do_host_ls, "", ""),
  	U_BOOT_CMD_MKENT(save, 6, 0, do_host_save, "", ""),
49afb3798   Stefan Brüns   sandbox: Add "hos...
149
  	U_BOOT_CMD_MKENT(size, 3, 0, do_host_size, "", ""),
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
150
151
  	U_BOOT_CMD_MKENT(bind, 3, 0, do_host_bind, "", ""),
  	U_BOOT_CMD_MKENT(info, 3, 0, do_host_info, "", ""),
9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
152
  	U_BOOT_CMD_MKENT(dev, 0, 1, do_host_dev, "", ""),
d304931f2   Simon Glass   sandbox: Add 'sb'...
153
  };
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
154
  static int do_host(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f2   Simon Glass   sandbox: Add 'sb'...
155
156
157
  		      char * const argv[])
  {
  	cmd_tbl_t *c;
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
158
  	/* Skip past 'host' */
d304931f2   Simon Glass   sandbox: Add 'sb'...
159
160
  	argc--;
  	argv++;
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
161
162
  	c = find_cmd_tbl(argv[0], cmd_host_sub,
  			 ARRAY_SIZE(cmd_host_sub));
d304931f2   Simon Glass   sandbox: Add 'sb'...
163
164
165
166
167
168
169
170
  
  	if (c)
  		return c->cmd(cmdtp, flag, argc, argv);
  	else
  		return CMD_RET_USAGE;
  }
  
  U_BOOT_CMD(
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
171
172
  	host, 8, 1, do_host,
  	"Miscellaneous host commands",
4d907025d   Stephen Warren   sandbox: restore ...
173
  	"load hostfs - <addr> <filename> [<bytes> <offset>]  - "
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
174
175
  		"load a file from host
  "
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
176
177
178
  	"host ls hostfs - <filename>                    - list files on host
  "
  	"host save hostfs - <addr> <filename> <bytes> [<offset>] - "
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
179
180
  		"save a file to host
  "
6baa692f9   Sébastien Szymanski   cmd/host: add mis...
181
182
  	"host size hostfs - <filename> - determine size of file on host
  "
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
183
184
185
186
  	"host bind <dev> [<filename>] - bind \"host\" device to file
  "
  	"host info [<dev>]            - show device binding & info
  "
9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
187
188
  	"host dev [<dev>] - Set or retrieve the current host device
  "
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
189
190
  	"host commands use the \"hostfs\" device. The \"host\" device is used
  "
4d907025d   Stephen Warren   sandbox: restore ...
191
  	"with standard IO commands such as fatls or ext2load"
d304931f2   Simon Glass   sandbox: Add 'sb'...
192
  );