summaryrefslogtreecommitdiffstats
path: root/common/partition.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:02:14 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:02:14 +0200
commitb2c5310d4da56237571bb8ea8d24b030c941030f (patch)
treec2c39f8c1ebdad8c3e69af86cb3c105434212edd /common/partition.c
parentfda840672d0eb662ddf4c7080532fe2dfeb0b0b1 (diff)
downloadbarebox-b2c5310d4da56237571bb8ea8d24b030c941030f.tar.gz
barebox-b2c5310d4da56237571bb8ea8d24b030c941030f.tar.xz
svn_rev_653
restructure tree, add reginfo command
Diffstat (limited to 'common/partition.c')
-rw-r--r--common/partition.c185
1 files changed, 0 insertions, 185 deletions
diff --git a/common/partition.c b/common/partition.c
index 919e2e2e08..0da359d078 100644
--- a/common/partition.c
+++ b/common/partition.c
@@ -1,6 +1,5 @@
#include <common.h>
-#include <command.h>
#include <init.h>
#include <driver.h>
#include <malloc.h>
@@ -35,190 +34,6 @@ struct device_d *dev_add_partition(struct device_d *dev, unsigned long offset, s
return 0;
}
-static void dev_del_partitions(struct device_d *physdev)
-{
- struct device_d *dev;
- char buf[MAX_DRIVER_NAME];
- int i = 0;
-
- /* This is lame. Devices should to able to have children */
- while (1) {
- sprintf(buf, "%s.%d", physdev->id, i);
- dev = device_from_spec_str(buf, NULL);
- if (dev) {
- struct partition *part = dev->type_data;
- unregister_device(dev);
- free(part);
- }
- else
- break;
- i++;
- }
-}
-
-int mtd_part_do_parse_one (struct partition *part, const char *str, char **endp)
-{
- ulong size;
- char *end;
- char buf[MAX_DRIVER_NAME];
-
- memset(buf, 0, MAX_DRIVER_NAME);
-
- if (*str == '-') {
- size = part->physdev->size - part->offset;
- end = (char *)str + 1;
- } else {
- size = strtoul_suffix(str, &end, 0);
- }
-
- if (size + part->offset > part->physdev->size) {
- printf("partition end is beyond device\n");
- return -EINVAL;
- }
-
- str = end;
-
- if (*str == '(') {
- str++;
- end = strchr(str, ')');
- if (!end) {
- printf("could not find matching ')'\n");
- return -EINVAL;
- }
- if (end - str >= MAX_DRIVER_NAME) {
- printf("device name too long\n");
- return -EINVAL;
- }
-
- memcpy(part->name, str, end - str);
- end++;
- }
-
- str = end;
-
- if (*str == 'r' && *(str + 1) == 'o') {
- part->readonly = 1;
- end = (char *)(str + 2);
- }
-
- if (endp)
- *endp = end;
-
- strcpy(part->device.name, "partition");
- part->device.size = size;
-
- return 0;
-}
-
-int do_addpart ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- struct partition *part;
- struct device_d *dev;
- char *endp;
- int num = 0;
- unsigned long offset;
-
- if (argc != 2) {
- printf ("Usage:\n%s\n", cmdtp->usage);
- return 1;
- }
-
- dev = device_from_spec_str(argv[1], &endp);
- if (!dev) {
- printf("no such device: %s\n",argv[1]);
- return 1;
- }
-
- dev_del_partitions(dev);
-
- offset = 0;
-
- while (1) {
- part = xzalloc(sizeof(struct partition));
-
- part->offset = offset;
- part->physdev = dev;
- part->num = num;
- part->device.map_base = dev->map_base + offset;
-
- if(mtd_part_do_parse_one(part, endp, &endp)) {
- dev_del_partitions(dev);
- free(part);
- return 1;
- }
-
- offset += part->device.size;
-
- part->device.type_data = part;
-
- sprintf(part->device.id, "%s.%d", dev->id, num);
- register_device(&part->device);
- num++;
-
- if(!*endp)
- break;
- if(*endp != ',') {
- printf("parse error\n");
- return 1;
- }
- endp++;
- }
-
- return 0;
-}
-
-static __maybe_unused char cmd_addpart_help[] =
-"Usage: addpart <partition description>\n"
-"addpart adds a partition description to a device. The partition description\n"
-"has the form\n"
-"dev:size1(name1)[ro],size2(name2)[ro],...\n"
-"<dev> is the device name under /dev. Size can be given in decimal or if\n"
-"prefixed with 0x in hex. Sizes can have an optional suffix K,M,G. The size\n"
-"of the last partition can be specified as '-' for the remaining space of the\n"
-"device.\n"
-"This format is the same as used in the Linux kernel for cmdline mtd partitions.\n"
-"Note That this command has to be reworked and will probably change it's API.";
-
-U_BOOT_CMD_START(addpart)
- .maxargs = 2,
- .cmd = do_addpart,
- .usage = "add a partition table to a device",
- U_BOOT_CMD_HELP(cmd_addpart_help)
-U_BOOT_CMD_END
-
-int do_delpart ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
-{
- struct device_d *dev;
-
- if (argc != 2) {
- printf ("Usage:\n%s\n", cmdtp->usage);
- return 1;
- }
-
- dev = device_from_spec_str(argv[1], NULL);
- if (!dev) {
- printf("no such device: %s\n",argv[1]);
- return 1;
- }
-
- dev_del_partitions(dev);
-
- return 0;
-}
-
-static __maybe_unused char cmd_delpart_help[] =
-"Usage: delpart <dev>\n"
-"Delete partitions previously added to a device with addpart.\n"
-"Note: You have to specify the device as 'devid', _not_ as '/dev/devid'. This\n"
-"will likely change soon.\n";
-
-U_BOOT_CMD_START(delpart)
- .maxargs = 2,
- .cmd = do_delpart,
- .usage = "delete a partition table from a device",
- U_BOOT_CMD_HELP(cmd_delpart_help)
-U_BOOT_CMD_END
-
static int part_erase(struct device_d *dev, size_t count, unsigned long offset)
{
struct partition *part = dev->type_data;