diff options
author | thead_admin <occ_thead@service.alibaba.com> | 2022-09-13 11:04:33 +0800 |
---|---|---|
committer | thead_admin <occ_thead@service.alibaba.com> | 2022-09-13 11:04:33 +0800 |
commit | 43db9e00d5837c100c0b2fbbee64a08ab807d1e0 (patch) | |
tree | b40c0eed02935b6682e8c5c975e3016b6b2f55fe /cmd/scsi.c |
Linux_SDK_V0.9.5Linux_SDK_V0.9.5
Diffstat (limited to 'cmd/scsi.c')
-rw-r--r-- | cmd/scsi.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/cmd/scsi.c b/cmd/scsi.c new file mode 100644 index 00000000..67de1a3b --- /dev/null +++ b/cmd/scsi.c @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2001 + * Denis Peter, MPL AG Switzerland + */ + +/* + * SCSI support. + */ +#include <common.h> +#include <command.h> +#include <scsi.h> + +static int scsi_curr_dev; /* current device */ + +/* + * scsi boot command intepreter. Derived from diskboot + */ +static int do_scsiboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) +{ + return common_diskboot(cmdtp, "scsi", argc, argv); +} + +/* + * scsi command intepreter + */ +static int do_scsi(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) +{ + int ret; + + if (argc == 2) { + if (strncmp(argv[1], "res", 3) == 0) { + printf("\nReset SCSI\n"); +#ifndef CONFIG_DM_SCSI + scsi_bus_reset(NULL); +#endif + ret = scsi_scan(true); + if (ret) + return CMD_RET_FAILURE; + return ret; + } + if (strncmp(argv[1], "scan", 4) == 0) { + ret = scsi_scan(true); + if (ret) + return CMD_RET_FAILURE; + return ret; + } + } + + return blk_common_cmd(argc, argv, IF_TYPE_SCSI, &scsi_curr_dev); +} + +U_BOOT_CMD( + scsi, 5, 1, do_scsi, + "SCSI sub-system", + "reset - reset SCSI controller\n" + "scsi info - show available SCSI devices\n" + "scsi scan - (re-)scan SCSI bus\n" + "scsi device [dev] - show or set current device\n" + "scsi part [dev] - print partition table of one or all SCSI devices\n" + "scsi read addr blk# cnt - read `cnt' blocks starting at block `blk#'\n" + " to memory address `addr'\n" + "scsi write addr blk# cnt - write `cnt' blocks starting at block\n" + " `blk#' from memory address `addr'" +); + +U_BOOT_CMD( + scsiboot, 3, 1, do_scsiboot, + "boot from SCSI device", + "loadAddr dev:part" +); |