Blame view

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

9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
14
  static int host_curr_device = -1;
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
15
  static int do_host_load(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f2   Simon Glass   sandbox: Add 'sb'...
16
17
  			   char * const argv[])
  {
9ade4857a   Tom Rini   cmd_sandbox.c: Up...
18
  	return do_load(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
d304931f2   Simon Glass   sandbox: Add 'sb'...
19
  }
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
20
  static int do_host_ls(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f2   Simon Glass   sandbox: Add 'sb'...
21
22
23
24
  			   char * const argv[])
  {
  	return do_ls(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
  }
49afb3798   Stefan Brüns   sandbox: Add "hos...
25
26
27
28
29
  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 ...
30
  static int do_host_save(cmd_tbl_t *cmdtp, int flag, int argc,
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
31
32
  			   char * const argv[])
  {
9ade4857a   Tom Rini   cmd_sandbox.c: Up...
33
  	return do_save(cmdtp, flag, argc, argv, FS_TYPE_SANDBOX);
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
34
  }
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
35
  static int do_host_bind(cmd_tbl_t *cmdtp, int flag, int argc,
f4d8de48f   Henrik Nordström   sandbox: block dr...
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  			   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 ...
51
  static int do_host_info(cmd_tbl_t *cmdtp, int flag, int argc,
f4d8de48f   Henrik Nordström   sandbox: block dr...
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  			   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...
74
  		struct blk_desc *blk_dev;
f4d8de48f   Henrik Nordström   sandbox: block dr...
75
76
77
78
79
80
81
82
83
84
85
86
87
88
  		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 ...
89
90
91
92
93
94
95
  		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...
96
97
98
99
100
101
  		printf("%12lu %s
  ", (unsigned long)blk_dev->lba,
  		       host_dev->filename);
  	}
  	return 0;
  }
9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
102
103
104
105
106
  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...
107
  	struct blk_desc *blk_dev;
9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
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
145
  	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 ...
146
147
148
149
  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...
150
  	U_BOOT_CMD_MKENT(size, 3, 0, do_host_size, "", ""),
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
151
152
  	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...
153
  	U_BOOT_CMD_MKENT(dev, 0, 1, do_host_dev, "", ""),
d304931f2   Simon Glass   sandbox: Add 'sb'...
154
  };
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
155
  static int do_host(cmd_tbl_t *cmdtp, int flag, int argc,
d304931f2   Simon Glass   sandbox: Add 'sb'...
156
157
158
  		      char * const argv[])
  {
  	cmd_tbl_t *c;
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
159
  	/* Skip past 'host' */
d304931f2   Simon Glass   sandbox: Add 'sb'...
160
161
  	argc--;
  	argv++;
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
162
163
  	c = find_cmd_tbl(argv[0], cmd_host_sub,
  			 ARRAY_SIZE(cmd_host_sub));
d304931f2   Simon Glass   sandbox: Add 'sb'...
164
165
166
167
168
169
170
171
  
  	if (c)
  		return c->cmd(cmdtp, flag, argc, argv);
  	else
  		return CMD_RET_USAGE;
  }
  
  U_BOOT_CMD(
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
172
173
174
175
176
177
178
  	sb,	8,	1,	do_host,
  	"Deprecated: use 'host' command instead.", ""
  );
  
  U_BOOT_CMD(
  	host, 8, 1, do_host,
  	"Miscellaneous host commands",
4d907025d   Stephen Warren   sandbox: restore ...
179
  	"load hostfs - <addr> <filename> [<bytes> <offset>]  - "
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
180
181
  		"load a file from host
  "
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
182
183
184
  	"host ls hostfs - <filename>                    - list files on host
  "
  	"host save hostfs - <addr> <filename> <bytes> [<offset>] - "
7eb2c8d57   Simon Glass   sandbox: fs: Add ...
185
186
  		"save a file to host
  "
6baa692f9   Sébastien Szymanski   cmd/host: add mis...
187
188
  	"host size hostfs - <filename> - determine size of file on host
  "
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
189
190
191
192
  	"host bind <dev> [<filename>] - bind \"host\" device to file
  "
  	"host info [<dev>]            - show device binding & info
  "
9b97b6ba2   Sjoerd Simons   sandbox: Implemen...
193
194
  	"host dev [<dev>] - Set or retrieve the current host device
  "
bacfb1df9   Sjoerd Simons   sandbox: Renamed ...
195
196
  	"host commands use the \"hostfs\" device. The \"host\" device is used
  "
4d907025d   Stephen Warren   sandbox: restore ...
197
  	"with standard IO commands such as fatls or ext2load"
d304931f2   Simon Glass   sandbox: Add 'sb'...
198
  );