X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnand%2Ffileio.c;h=f65f957bf20f60cbcda688fe1caca09f85c8990a;hp=bc2a294226d4fa4b46f436d40dfd3bd249b594f5;hb=HEAD;hpb=08d4411b59dd8bd0e7d8009003b71d23acbf6eee diff --git a/src/flash/nand/fileio.c b/src/flash/nand/fileio.c index bc2a294226..ca618b3756 100644 --- a/src/flash/nand/fileio.c +++ b/src/flash/nand/fileio.c @@ -1,24 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + /*************************************************************************** * Copyright (C) 2007 by Dominic Rath * * Copyright (C) 2002 Thomas Gleixner * * Copyright (C) 2009 Zachary T Welch * * * * Partially based on drivers/mtd/nand_ids.c from Linux. * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * ***************************************************************************/ #ifdef HAVE_CONFIG_H @@ -56,22 +43,22 @@ void nand_fileio_init(struct nand_fileio_state *state) state->oob_format = NAND_OOB_NONE; } -int nand_fileio_start(struct command_context *cmd_ctx, +int nand_fileio_start(struct command_invocation *cmd, struct nand_device *nand, const char *filename, int filemode, struct nand_fileio_state *state) { if (state->address % nand->page_size) { - command_print(cmd_ctx, "only page-aligned addresses are supported"); + command_print(cmd, "only page-aligned addresses are supported"); return ERROR_COMMAND_SYNTAX_ERROR; } duration_start(&state->bench); - if (NULL != filename) { + if (filename) { int retval = fileio_open(&state->fileio, filename, filemode, FILEIO_BINARY); - if (ERROR_OK != retval) { - const char *msg = (FILEIO_READ == filemode) ? "read" : "write"; - command_print(cmd_ctx, "failed to open '%s' for %s access", + if (retval != ERROR_OK) { + const char *msg = (filemode == FILEIO_READ) ? "read" : "write"; + command_print(cmd, "failed to open '%s' for %s access", filename, msg); return retval; } @@ -99,16 +86,13 @@ int nand_fileio_start(struct command_context *cmd_ctx, int nand_fileio_cleanup(struct nand_fileio_state *state) { if (state->file_opened) - fileio_close(&state->fileio); + fileio_close(state->fileio); - if (state->oob) { - free(state->oob); - state->oob = NULL; - } - if (state->page) { - free(state->page); - state->page = NULL; - } + free(state->oob); + state->oob = NULL; + + free(state->page); + state->page = NULL; return ERROR_OK; } int nand_fileio_finish(struct nand_fileio_state *state) @@ -124,29 +108,29 @@ COMMAND_HELPER(nand_fileio_parse_args, struct nand_fileio_state *state, nand_fileio_init(state); unsigned minargs = need_size ? 4 : 3; - if (CMD_ARGC < minargs) + if (minargs > CMD_ARGC) return ERROR_COMMAND_SYNTAX_ERROR; struct nand_device *nand; int retval = CALL_COMMAND_HANDLER(nand_command_get_device, 0, &nand); - if (ERROR_OK != retval) + if (retval != ERROR_OK) return retval; - if (NULL == nand->device) { - command_print(CMD_CTX, "#%s: not probed", CMD_ARGV[0]); - return ERROR_OK; + if (!nand->device) { + command_print(CMD, "#%s: not probed", CMD_ARGV[0]); + return ERROR_NAND_DEVICE_NOT_PROBED; } COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], state->address); if (need_size) { COMMAND_PARSE_NUMBER(u32, CMD_ARGV[3], state->size); if (state->size % nand->page_size) { - command_print(CMD_CTX, "only page-aligned sizes are supported"); + command_print(CMD, "only page-aligned sizes are supported"); return ERROR_COMMAND_SYNTAX_ERROR; } } - if (CMD_ARGC > minargs) { + if (minargs < CMD_ARGC) { for (unsigned i = minargs; i < CMD_ARGC; i++) { if (!strcmp(CMD_ARGV[i], "oob_raw")) state->oob_format |= NAND_OOB_RAW; @@ -157,19 +141,19 @@ COMMAND_HELPER(nand_fileio_parse_args, struct nand_fileio_state *state, else if (sw_ecc && !strcmp(CMD_ARGV[i], "oob_softecc_kw")) state->oob_format |= NAND_OOB_SW_ECC_KW; else { - command_print(CMD_CTX, "unknown option: %s", CMD_ARGV[i]); + command_print(CMD, "unknown option: %s", CMD_ARGV[i]); return ERROR_COMMAND_SYNTAX_ERROR; } } } - retval = nand_fileio_start(CMD_CTX, nand, CMD_ARGV[1], filemode, state); - if (ERROR_OK != retval) + retval = nand_fileio_start(CMD, nand, CMD_ARGV[1], filemode, state); + if (retval != ERROR_OK) return retval; if (!need_size) { - int filesize; - retval = fileio_size(&state->fileio, &filesize); + size_t filesize; + retval = fileio_size(state->fileio, &filesize); if (retval != ERROR_OK) return retval; state->size = filesize; @@ -189,8 +173,8 @@ int nand_fileio_read(struct nand_device *nand, struct nand_fileio_state *s) size_t total_read = 0; size_t one_read; - if (NULL != s->page) { - fileio_read(&s->fileio, s->page_size, s->page, &one_read); + if (s->page) { + fileio_read(s->fileio, s->page_size, s->page, &one_read); if (one_read < s->page_size) memset(s->page + one_read, 0xff, s->page_size - one_read); total_read += one_read; @@ -208,7 +192,7 @@ int nand_fileio_read(struct nand_device *nand, struct nand_fileio_state *s) } else if (s->oob_format & NAND_OOB_SW_ECC_KW) { /* * In this case eccpos is not used as - * the ECC data is always stored contigously + * the ECC data is always stored contiguously * at the end of the OOB area. It consists * of 10 bytes per 512-byte data block. */ @@ -218,8 +202,8 @@ int nand_fileio_read(struct nand_device *nand, struct nand_fileio_state *s) nand_calculate_ecc_kw(nand, s->page + i, ecc); ecc += 10; } - } else if (NULL != s->oob) { - fileio_read(&s->fileio, s->oob_size, s->oob, &one_read); + } else if (s->oob) { + fileio_read(s->fileio, s->oob_size, s->oob, &one_read); if (one_read < s->oob_size) memset(s->oob + one_read, 0xff, s->oob_size - one_read); total_read += one_read;