Esempio n. 1
0
File: tcl.c Progetto: Bot007/openOCD
COMMAND_HELPER(flash_command_get_bank, unsigned name_index,
	struct flash_bank **bank)
{
	const char *name = CMD_ARGV[name_index];
	int retval = get_flash_bank_by_name(name, bank);
	if (retval != ERROR_OK)
		return retval;
	if (*bank)
		return ERROR_OK;

	unsigned bank_num;
	COMMAND_PARSE_NUMBER(uint, name, bank_num);

	return get_flash_bank_by_num(bank_num, bank);
}
Esempio n. 2
0
SERVER_PORT_COMMAND()
{
	switch (CMD_ARGC) {
		case 0:
			command_print(CMD_CTX, "%d", *out);
			break;
		case 1:
		{
			uint16_t port;
			COMMAND_PARSE_NUMBER(u16, CMD_ARGV[0], port);
			*out = port;
			break;
		}
		default:
			return ERROR_COMMAND_SYNTAX_ERROR;
	}
	return ERROR_OK;
}
Esempio n. 3
0
COMMAND_HELPER(server_port_command, unsigned short *out)
{
	switch (CMD_ARGC) {
		case 0:
			command_print(CMD_CTX, "%d", *out);
			break;
		case 1:
		{
			uint16_t port;
			COMMAND_PARSE_NUMBER(u16, CMD_ARGV[0], port);
			*out = port;
			break;
		}
		default:
			return ERROR_COMMAND_SYNTAX_ERROR;
	}
	return ERROR_OK;
}
Esempio n. 4
0
COMMAND_HELPER(flash_command_get_bank, unsigned name_index,
		struct flash_bank **bank)
{
	const char *name = CMD_ARGV[name_index];
	*bank = get_flash_bank_by_name(name);
	if (*bank)
		return ERROR_OK;

	unsigned bank_num;
	COMMAND_PARSE_NUMBER(uint, name, bank_num);

	*bank = get_flash_bank_by_num(bank_num);
	if (!*bank)
	{
		command_print(CMD_CTX, "flash bank '%s' not found", name);
		return ERROR_INVALID_ARGUMENTS;
	}
	return ERROR_OK;
}
Esempio n. 5
0
COMMAND_HELPER(nand_fileio_parse_args, struct nand_fileio_state *state,
	struct nand_device **dev, enum fileio_access filemode,
	bool need_size, bool sw_ecc)
{
	nand_fileio_init(state);

	unsigned minargs = need_size ? 4 : 3;
	if (CMD_ARGC < minargs)
		return ERROR_COMMAND_SYNTAX_ERROR;

	struct nand_device *nand;
	int retval = CALL_COMMAND_HANDLER(nand_command_get_device, 0, &nand);
	if (ERROR_OK != retval)
		return retval;

	if (NULL == nand->device) {
		command_print(CMD_CTX, "#%s: not probed", CMD_ARGV[0]);
		return ERROR_OK;
	}

	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");
			return ERROR_COMMAND_SYNTAX_ERROR;
		}
	}

	if (CMD_ARGC > minargs) {
		for (unsigned i = minargs; i < CMD_ARGC; i++) {
			if (!strcmp(CMD_ARGV[i], "oob_raw"))
				state->oob_format |= NAND_OOB_RAW;
			else if (!strcmp(CMD_ARGV[i], "oob_only"))
				state->oob_format |= NAND_OOB_RAW | NAND_OOB_ONLY;
			else if (sw_ecc && !strcmp(CMD_ARGV[i], "oob_softecc"))
				state->oob_format |= NAND_OOB_SW_ECC;
			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]);
				return ERROR_COMMAND_SYNTAX_ERROR;
			}
		}
	}

	retval = nand_fileio_start(CMD_CTX, nand, CMD_ARGV[1], filemode, state);
	if (ERROR_OK != retval)
		return retval;

	if (!need_size) {
		int filesize;
		retval = fileio_size(&state->fileio, &filesize);
		if (retval != ERROR_OK)
			return retval;
		state->size = filesize;
	}

	*dev = nand;

	return ERROR_OK;
}