]>
Commit | Line | Data |
---|---|---|
2262cfee WD |
1 | /* |
2 | * (C) Copyright 2002 | |
fa82f871 | 3 | * Stäubli Faverges - <www.staubli.com> |
2262cfee WD |
4 | * Pierre AUBERT p.aubert@staubli.com |
5 | * | |
1a459660 | 6 | * SPDX-License-Identifier: GPL-2.0+ |
2262cfee WD |
7 | */ |
8 | ||
9 | /* | |
10 | * Dos floppy support | |
11 | */ | |
12 | ||
13 | #include <common.h> | |
14 | #include <config.h> | |
15 | #include <command.h> | |
16 | #include <fdc.h> | |
17 | ||
2262cfee | 18 | /*----------------------------------------------------------------------------- |
8bde7f77 | 19 | * do_fdosboot -- |
2262cfee WD |
20 | *----------------------------------------------------------------------------- |
21 | */ | |
54841ab5 | 22 | int do_fdosboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
2262cfee WD |
23 | { |
24 | char *name; | |
25 | char *ep; | |
26 | int size; | |
6d0f6bcf | 27 | int drive = CONFIG_SYS_FDC_DRIVE_NUMBER; |
8bde7f77 | 28 | |
2262cfee WD |
29 | /* pre-set load_addr */ |
30 | if ((ep = getenv("loadaddr")) != NULL) { | |
8bde7f77 | 31 | load_addr = simple_strtoul(ep, NULL, 16); |
2262cfee WD |
32 | } |
33 | ||
34 | /* pre-set Boot file name */ | |
35 | if ((name = getenv("bootfile")) == NULL) { | |
8bde7f77 | 36 | name = "uImage"; |
2262cfee WD |
37 | } |
38 | ||
39 | switch (argc) { | |
40 | case 1: | |
8bde7f77 | 41 | break; |
2262cfee WD |
42 | case 2: |
43 | /* only one arg - accept two forms: | |
8bde7f77 WD |
44 | * just load address, or just boot file name. |
45 | * The latter form must be written "filename" here. | |
46 | */ | |
47 | if (argv[1][0] == '"') { /* just boot filename */ | |
48 | name = argv [1]; | |
49 | } else { /* load address */ | |
50 | load_addr = simple_strtoul(argv[1], NULL, 16); | |
51 | } | |
52 | break; | |
2262cfee | 53 | case 3: |
8bde7f77 WD |
54 | load_addr = simple_strtoul(argv[1], NULL, 16); |
55 | name = argv [2]; | |
56 | break; | |
2262cfee | 57 | default: |
4c12eeb8 | 58 | return CMD_RET_USAGE; |
2262cfee WD |
59 | } |
60 | ||
61 | /* Init physical layer */ | |
62 | if (!fdc_fdos_init (drive)) { | |
8bde7f77 | 63 | return (-1); |
2262cfee | 64 | } |
8bde7f77 | 65 | |
2262cfee WD |
66 | /* Open file */ |
67 | if (dos_open (name) < 0) { | |
8bde7f77 WD |
68 | printf ("Unable to open %s\n", name); |
69 | return 1; | |
2262cfee WD |
70 | } |
71 | if ((size = dos_read (load_addr)) < 0) { | |
8bde7f77 WD |
72 | printf ("boot error\n"); |
73 | return 1; | |
2262cfee WD |
74 | } |
75 | flush_cache (load_addr, size); | |
76 | ||
41ef372c | 77 | setenv_hex("filesize", size); |
2262cfee WD |
78 | |
79 | printf("Floppy DOS load complete: %d bytes loaded to 0x%lx\n", | |
8bde7f77 WD |
80 | size, load_addr); |
81 | ||
67d668bf | 82 | return bootm_maybe_autostart(cmdtp, argv[0]); |
2262cfee WD |
83 | } |
84 | ||
85 | /*----------------------------------------------------------------------------- | |
8bde7f77 | 86 | * do_fdosls -- |
2262cfee WD |
87 | *----------------------------------------------------------------------------- |
88 | */ | |
54841ab5 | 89 | int do_fdosls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
2262cfee WD |
90 | { |
91 | char *path = ""; | |
6d0f6bcf | 92 | int drive = CONFIG_SYS_FDC_DRIVE_NUMBER; |
8bde7f77 | 93 | |
2262cfee WD |
94 | switch (argc) { |
95 | case 1: | |
8bde7f77 | 96 | break; |
2262cfee | 97 | case 2: |
8bde7f77 WD |
98 | path = argv [1]; |
99 | break; | |
2262cfee WD |
100 | } |
101 | ||
102 | /* Init physical layer */ | |
103 | if (!fdc_fdos_init (drive)) { | |
8bde7f77 | 104 | return (-1); |
2262cfee WD |
105 | } |
106 | /* Open directory */ | |
107 | if (dos_open (path) < 0) { | |
8bde7f77 WD |
108 | printf ("Unable to open %s\n", path); |
109 | return 1; | |
2262cfee WD |
110 | } |
111 | return (dos_dir ()); | |
112 | } | |
113 | ||
0d498393 WD |
114 | U_BOOT_CMD( |
115 | fdosboot, 3, 0, do_fdosboot, | |
2fb2604d | 116 | "boot from a dos floppy file", |
a89c33db | 117 | "[loadAddr] [filename]" |
8bde7f77 WD |
118 | ); |
119 | ||
0d498393 WD |
120 | U_BOOT_CMD( |
121 | fdosls, 2, 0, do_fdosls, | |
2fb2604d | 122 | "list files in a directory", |
a89c33db | 123 | "[directory]" |
8bde7f77 | 124 | ); |