~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/common/cmd_reiser.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * (C) Copyright 2003 - 2004
 
3
 * Sysgo Real-Time Solutions, AG <www.elinos.com>
 
4
 * Pavel Bartusek <pba@sysgo.com>
 
5
 *
 
6
 * SPDX-License-Identifier:     GPL-2.0+
 
7
 */
 
8
 
 
9
/*
 
10
 * Reiserfs support
 
11
 */
 
12
#include <common.h>
 
13
#include <config.h>
 
14
#include <command.h>
 
15
#include <image.h>
 
16
#include <linux/ctype.h>
 
17
#include <asm/byteorder.h>
 
18
#include <reiserfs.h>
 
19
#include <part.h>
 
20
 
 
21
#ifndef CONFIG_DOS_PARTITION
 
22
#error DOS partition support must be selected
 
23
#endif
 
24
 
 
25
/* #define      REISER_DEBUG */
 
26
 
 
27
#ifdef  REISER_DEBUG
 
28
#define PRINTF(fmt,args...)     printf (fmt ,##args)
 
29
#else
 
30
#define PRINTF(fmt,args...)
 
31
#endif
 
32
 
 
33
int do_reiserls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
34
{
 
35
        char *filename = "/";
 
36
        int dev, part;
 
37
        block_dev_desc_t *dev_desc=NULL;
 
38
        disk_partition_t info;
 
39
 
 
40
        if (argc < 3)
 
41
                return CMD_RET_USAGE;
 
42
 
 
43
        part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
 
44
        if (part < 0)
 
45
                return 1;
 
46
 
 
47
        if (argc == 4) {
 
48
            filename = argv[3];
 
49
        }
 
50
 
 
51
        dev = dev_desc->dev;
 
52
        PRINTF("Using device %s %d:%d, directory: %s\n", argv[1], dev, part, filename);
 
53
 
 
54
        reiserfs_set_blk_dev(dev_desc, &info);
 
55
 
 
56
        if (!reiserfs_mount(info.size)) {
 
57
                printf ("** Bad Reiserfs partition or disk - %s %d:%d **\n",  argv[1], dev, part);
 
58
                return 1;
 
59
        }
 
60
 
 
61
        if (reiserfs_ls (filename)) {
 
62
                printf ("** Error reiserfs_ls() **\n");
 
63
                return 1;
 
64
        };
 
65
 
 
66
        return 0;
 
67
}
 
68
 
 
69
U_BOOT_CMD(
 
70
        reiserls,       4,      1,      do_reiserls,
 
71
        "list files in a directory (default /)",
 
72
        "<interface> <dev[:part]> [directory]\n"
 
73
        "    - list files from 'dev' on 'interface' in a 'directory'"
 
74
);
 
75
 
 
76
/******************************************************************************
 
77
 * Reiserfs boot command intepreter. Derived from diskboot
 
78
 */
 
79
int do_reiserload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
80
{
 
81
        char *filename = NULL;
 
82
        int dev, part;
 
83
        ulong addr = 0, filelen;
 
84
        disk_partition_t info;
 
85
        block_dev_desc_t *dev_desc = NULL;
 
86
        unsigned long count;
 
87
        char *addr_str;
 
88
 
 
89
        switch (argc) {
 
90
        case 3:
 
91
                addr_str = getenv("loadaddr");
 
92
                if (addr_str != NULL) {
 
93
                        addr = simple_strtoul (addr_str, NULL, 16);
 
94
                } else {
 
95
                        addr = CONFIG_SYS_LOAD_ADDR;
 
96
                }
 
97
                filename = getenv ("bootfile");
 
98
                count = 0;
 
99
                break;
 
100
        case 4:
 
101
                addr = simple_strtoul (argv[3], NULL, 16);
 
102
                filename = getenv ("bootfile");
 
103
                count = 0;
 
104
                break;
 
105
        case 5:
 
106
                addr = simple_strtoul (argv[3], NULL, 16);
 
107
                filename = argv[4];
 
108
                count = 0;
 
109
                break;
 
110
        case 6:
 
111
                addr = simple_strtoul (argv[3], NULL, 16);
 
112
                filename = argv[4];
 
113
                count = simple_strtoul (argv[5], NULL, 16);
 
114
                break;
 
115
 
 
116
        default:
 
117
                return CMD_RET_USAGE;
 
118
        }
 
119
 
 
120
        if (!filename) {
 
121
                puts ("\n** No boot file defined **\n");
 
122
                return 1;
 
123
        }
 
124
 
 
125
        part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
 
126
        if (part < 0)
 
127
                return 1;
 
128
 
 
129
        dev = dev_desc->dev;
 
130
 
 
131
        printf("Loading file \"%s\" from %s device %d%c%c\n",
 
132
                filename, argv[1], dev,
 
133
                part ? ':' : ' ', part ? part + '0' : ' ');
 
134
 
 
135
        reiserfs_set_blk_dev(dev_desc, &info);
 
136
 
 
137
        if (!reiserfs_mount(info.size)) {
 
138
                printf ("** Bad Reiserfs partition or disk - %s %d:%d **\n",  argv[1], dev, part);
 
139
                return 1;
 
140
        }
 
141
 
 
142
        filelen = reiserfs_open(filename);
 
143
        if (filelen < 0) {
 
144
                printf("** File not found %s **\n", filename);
 
145
                return 1;
 
146
        }
 
147
        if ((count < filelen) && (count != 0)) {
 
148
            filelen = count;
 
149
        }
 
150
 
 
151
        if (reiserfs_read((char *)addr, filelen) != filelen) {
 
152
                printf("\n** Unable to read \"%s\" from %s %d:%d **\n", filename, argv[1], dev, part);
 
153
                return 1;
 
154
        }
 
155
 
 
156
        /* Loading ok, update default load address */
 
157
        load_addr = addr;
 
158
 
 
159
        printf ("\n%ld bytes read\n", filelen);
 
160
        setenv_hex("filesize", filelen);
 
161
 
 
162
        return filelen;
 
163
}
 
164
 
 
165
U_BOOT_CMD(
 
166
        reiserload,     6,      0,      do_reiserload,
 
167
        "load binary file from a Reiser filesystem",
 
168
        "<interface> <dev[:part]> [addr] [filename] [bytes]\n"
 
169
        "    - load binary file 'filename' from 'dev' on 'interface'\n"
 
170
        "      to address 'addr' from dos filesystem"
 
171
);