Remove whitespace that occurs before ')'.
- Replace '[ \t]*[)]' with ')'. git-svn-id: svn://svn.berlios.de/openocd/trunk@2377 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
parent
f90d8fa45f
commit
dc575dc5bf
|
@ -257,7 +257,7 @@ MTAB_ENTRY(romfs_mte1,
|
||||||
"/rom",
|
"/rom",
|
||||||
"romfs",
|
"romfs",
|
||||||
"",
|
"",
|
||||||
(CYG_ADDRWORD) &filedata[0] );
|
(CYG_ADDRWORD) &filedata[0]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void openocd_sleep_prelude(void)
|
void openocd_sleep_prelude(void)
|
||||||
|
@ -1156,7 +1156,7 @@ FSTAB_ENTRY(tftpfs_fste, "tftpfs", 0,
|
||||||
// "romfs", // FIlesystem type
|
// "romfs", // FIlesystem type
|
||||||
// "", // hardware device
|
// "", // hardware device
|
||||||
// (CYG_ADDRWORD) CYGNUM_FS_ROM_BASE_ADDRESS // Address in ROM
|
// (CYG_ADDRWORD) CYGNUM_FS_ROM_BASE_ADDRESS // Address in ROM
|
||||||
// );
|
//);
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
|
|
|
@ -399,7 +399,7 @@ static int aduc702x_probe(struct flash_bank_s *bank)
|
||||||
|
|
||||||
static int aduc702x_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
static int aduc702x_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
||||||
{
|
{
|
||||||
snprintf(buf, buf_size, "aduc702x flash driver info" );
|
snprintf(buf, buf_size, "aduc702x flash driver info");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -187,7 +187,7 @@ static void at91sam7_read_clock_info(flash_bank_t *bank)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prescaler adjust */
|
/* Prescaler adjust */
|
||||||
if ((((mckr & PMC_MCKR_PRES) >> 2) == 7) || (tmp == 0) )
|
if ((((mckr & PMC_MCKR_PRES) >> 2) == 7) || (tmp == 0))
|
||||||
{
|
{
|
||||||
at91sam7_info->mck_valid = 0;
|
at91sam7_info->mck_valid = 0;
|
||||||
at91sam7_info->mck_freq = 0;
|
at91sam7_info->mck_freq = 0;
|
||||||
|
@ -613,7 +613,7 @@ static int at91sam7_read_part_info(struct flash_bank_s *bank)
|
||||||
at91sam7_protect_check(t_bank);
|
at91sam7_protect_check(t_bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("nvptyp: 0x%3.3x, arch: 0x%4.4x", at91sam7_info->cidr_nvptyp, at91sam7_info->cidr_arch );
|
LOG_DEBUG("nvptyp: 0x%3.3x, arch: 0x%4.4x", at91sam7_info->cidr_nvptyp, at91sam7_info->cidr_arch);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,7 +323,7 @@ static int avrf_probe(struct flash_bank_s *bank)
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO("device id = 0x%08" PRIx32 "", device_id );
|
LOG_INFO("device id = 0x%08" PRIx32 "", device_id);
|
||||||
if (EXTRACT_MFG(device_id) != 0x1F)
|
if (EXTRACT_MFG(device_id) != 0x1F)
|
||||||
{
|
{
|
||||||
LOG_ERROR("0x%" PRIx32 " is invalid Manufacturer for avr, 0x%X is expected", EXTRACT_MFG(device_id), 0x1F);
|
LOG_ERROR("0x%" PRIx32 " is invalid Manufacturer for avr, 0x%X is expected", EXTRACT_MFG(device_id), 0x1F);
|
||||||
|
@ -402,7 +402,7 @@ static int avrf_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO("device id = 0x%08" PRIx32 "", device_id );
|
LOG_INFO("device id = 0x%08" PRIx32 "", device_id);
|
||||||
if (EXTRACT_MFG(device_id) != 0x1F)
|
if (EXTRACT_MFG(device_id) != 0x1F)
|
||||||
{
|
{
|
||||||
LOG_ERROR("0x%" PRIx32 " is invalid Manufacturer for avr, 0x%X is expected", EXTRACT_MFG(device_id), 0x1F);
|
LOG_ERROR("0x%" PRIx32 " is invalid Manufacturer for avr, 0x%X is expected", EXTRACT_MFG(device_id), 0x1F);
|
||||||
|
|
|
@ -214,7 +214,7 @@ static uint16_t cfi_query_u16(flash_bank_t *bank, int sector, uint32_t offset)
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
for (i = 0;i < 2;i++)
|
for (i = 0;i < 2;i++)
|
||||||
target_read_memory(target, flash_address(bank, sector, offset + i), bank->bus_width, 1,
|
target_read_memory(target, flash_address(bank, sector, offset + i), bank->bus_width, 1,
|
||||||
&data[i*bank->bus_width] );
|
&data[i*bank->bus_width]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
target_read_memory(target, flash_address(bank, sector, offset), bank->bus_width, 2, data);
|
target_read_memory(target, flash_address(bank, sector, offset), bank->bus_width, 2, data);
|
||||||
|
@ -236,7 +236,7 @@ static uint32_t cfi_query_u32(flash_bank_t *bank, int sector, uint32_t offset)
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
for (i = 0;i < 4;i++)
|
for (i = 0;i < 4;i++)
|
||||||
target_read_memory(target, flash_address(bank, sector, offset + i), bank->bus_width, 1,
|
target_read_memory(target, flash_address(bank, sector, offset + i), bank->bus_width, 1,
|
||||||
&data[i*bank->bus_width] );
|
&data[i*bank->bus_width]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
target_read_memory(target, flash_address(bank, sector, offset), bank->bus_width, 4, data);
|
target_read_memory(target, flash_address(bank, sector, offset), bank->bus_width, 4, data);
|
||||||
|
@ -1154,7 +1154,7 @@ static int cfi_intel_write_block(struct flash_bank_s *bank, uint8_t *buffer, uin
|
||||||
/* flash write code */
|
/* flash write code */
|
||||||
if (!cfi_info->write_algorithm)
|
if (!cfi_info->write_algorithm)
|
||||||
{
|
{
|
||||||
if (target_code_size > sizeof(target_code) )
|
if (target_code_size > sizeof(target_code))
|
||||||
{
|
{
|
||||||
LOG_WARNING("Internal error - target code buffer to small. Increase CFI_MAX_INTEL_CODESIZE and recompile.");
|
LOG_WARNING("Internal error - target code buffer to small. Increase CFI_MAX_INTEL_CODESIZE and recompile.");
|
||||||
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
|
||||||
|
@ -1206,7 +1206,7 @@ static int cfi_intel_write_block(struct flash_bank_s *bank, uint8_t *buffer, uin
|
||||||
busy_pattern_val = cfi_command_val(bank, 0x80);
|
busy_pattern_val = cfi_command_val(bank, 0x80);
|
||||||
error_pattern_val = cfi_command_val(bank, 0x7e);
|
error_pattern_val = cfi_command_val(bank, 0x7e);
|
||||||
|
|
||||||
LOG_INFO("Using target buffer at 0x%08" PRIx32 " and of size 0x%04" PRIx32, source->address, buffer_size );
|
LOG_INFO("Using target buffer at 0x%08" PRIx32 " and of size 0x%04" PRIx32, source->address, buffer_size);
|
||||||
|
|
||||||
/* Programming main loop */
|
/* Programming main loop */
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
|
@ -1227,7 +1227,7 @@ static int cfi_intel_write_block(struct flash_bank_s *bank, uint8_t *buffer, uin
|
||||||
buf_set_u32(reg_params[5].value, 0, 32, busy_pattern_val);
|
buf_set_u32(reg_params[5].value, 0, 32, busy_pattern_val);
|
||||||
buf_set_u32(reg_params[6].value, 0, 32, error_pattern_val);
|
buf_set_u32(reg_params[6].value, 0, 32, error_pattern_val);
|
||||||
|
|
||||||
LOG_INFO("Write 0x%04" PRIx32 " bytes to flash at 0x%08" PRIx32 , thisrun_count, address );
|
LOG_INFO("Write 0x%04" PRIx32 " bytes to flash at 0x%08" PRIx32 , thisrun_count, address);
|
||||||
|
|
||||||
/* Execute algorithm, assume breakpoint for last instruction */
|
/* Execute algorithm, assume breakpoint for last instruction */
|
||||||
retval = target_run_algorithm(target, 0, NULL, 7, reg_params,
|
retval = target_run_algorithm(target, 0, NULL, 7, reg_params,
|
||||||
|
@ -1883,7 +1883,7 @@ int cfi_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint3
|
||||||
write_p = address & ~(bank->bus_width - 1);
|
write_p = address & ~(bank->bus_width - 1);
|
||||||
if ((align = address - write_p) != 0)
|
if ((align = address - write_p) != 0)
|
||||||
{
|
{
|
||||||
LOG_INFO("Fixup %d unaligned head bytes", align );
|
LOG_INFO("Fixup %d unaligned head bytes", align);
|
||||||
|
|
||||||
for (i = 0; i < bank->bus_width; i++)
|
for (i = 0; i < bank->bus_width; i++)
|
||||||
current_word[i] = 0;
|
current_word[i] = 0;
|
||||||
|
@ -2029,7 +2029,7 @@ int cfi_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint3
|
||||||
/* handle unaligned tail bytes */
|
/* handle unaligned tail bytes */
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
LOG_INFO("Fixup %" PRId32 " unaligned tail bytes", count );
|
LOG_INFO("Fixup %" PRId32 " unaligned tail bytes", count);
|
||||||
|
|
||||||
copy_p = write_p;
|
copy_p = write_p;
|
||||||
for (i = 0; i < bank->bus_width; i++)
|
for (i = 0; i < bank->bus_width; i++)
|
||||||
|
|
|
@ -675,7 +675,7 @@ static int davinci_nand_device_command(struct command_context_s *cmd_ctx,
|
||||||
if (aemif == 0x01e00000 /* dm6446, dm357 */
|
if (aemif == 0x01e00000 /* dm6446, dm357 */
|
||||||
|| aemif == 0x01e10000 /* dm335, dm355 */
|
|| aemif == 0x01e10000 /* dm335, dm355 */
|
||||||
|| aemif == 0x01d10000 /* dm365 */
|
|| aemif == 0x01d10000 /* dm365 */
|
||||||
) {
|
) {
|
||||||
if (chip < 0x0200000 || chip >= 0x0a000000) {
|
if (chip < 0x0200000 || chip >= 0x0a000000) {
|
||||||
LOG_ERROR("NAND address %08lx out of range?", chip);
|
LOG_ERROR("NAND address %08lx out of range?", chip);
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
@ -281,7 +281,7 @@ static int eCosBoard_erase(ecosflash_flash_bank_t *info, uint32_t address, uint3
|
||||||
0,
|
0,
|
||||||
&flashErr,
|
&flashErr,
|
||||||
timeout
|
timeout
|
||||||
);
|
);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
|
|
@ -793,7 +793,7 @@ static int handle_flash_fill_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
|
|
||||||
for (wrote = 0; wrote < (count*wordsize); wrote += cur_size)
|
for (wrote = 0; wrote < (count*wordsize); wrote += cur_size)
|
||||||
{
|
{
|
||||||
cur_size = MIN((count*wordsize - wrote), sizeof(chunk) );
|
cur_size = MIN((count*wordsize - wrote), sizeof(chunk));
|
||||||
flash_bank_t *bank;
|
flash_bank_t *bank;
|
||||||
bank = get_flash_bank_by_addr(target, address);
|
bank = get_flash_bank_by_addr(target, address);
|
||||||
if (bank == NULL)
|
if (bank == NULL)
|
||||||
|
@ -994,7 +994,7 @@ int flash_erase_address_range(target_t *target, uint32_t addr, uint32_t length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first == -1 || last == -1 )
|
if (first == -1 || last == -1)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
||||||
return flash_driver_erase(c, first, last);
|
return flash_driver_erase(c, first, last);
|
||||||
|
@ -1076,7 +1076,7 @@ int flash_write(target_t *target, image_t *image, uint32_t *written, int erase)
|
||||||
run_size += pad_bytes;
|
run_size += pad_bytes;
|
||||||
padding[section_last] = 0;
|
padding[section_last] = 0;
|
||||||
|
|
||||||
LOG_INFO("Padding image section %d with %d bytes", section_last-1, pad_bytes );
|
LOG_INFO("Padding image section %d with %d bytes", section_last-1, pad_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fit the run into bank constraints */
|
/* fit the run into bank constraints */
|
||||||
|
@ -1127,7 +1127,7 @@ int flash_write(target_t *target, image_t *image, uint32_t *written, int erase)
|
||||||
if (erase)
|
if (erase)
|
||||||
{
|
{
|
||||||
/* calculate and erase sectors */
|
/* calculate and erase sectors */
|
||||||
retval = flash_erase_address_range(target, run_address, run_size );
|
retval = flash_erase_address_range(target, run_address, run_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval == ERROR_OK)
|
if (retval == ERROR_OK)
|
||||||
|
|
|
@ -415,7 +415,7 @@ static int mg_probe_cmd(struct command_context_s *cmd_ctx, char *cmd, char **arg
|
||||||
|
|
||||||
if (ret == ERROR_OK) {
|
if (ret == ERROR_OK) {
|
||||||
command_print(cmd_ctx, "mflash (total %" PRIu32 " sectors) found at 0x%8.8" PRIx32 "",
|
command_print(cmd_ctx, "mflash (total %" PRIu32 " sectors) found at 0x%8.8" PRIx32 "",
|
||||||
mflash_bank->drv_info->tot_sects, mflash_bank->base );
|
mflash_bank->drv_info->tot_sects, mflash_bank->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -429,7 +429,7 @@ static int mg_mflash_do_read_sects(void *buff, uint32_t sect_num, uint32_t sect_
|
||||||
uint8_t *buff_ptr = buff;
|
uint8_t *buff_ptr = buff;
|
||||||
duration_t duration;
|
duration_t duration;
|
||||||
|
|
||||||
if ((ret = mg_dsk_io_cmd(sect_num, sect_cnt, mg_io_cmd_read)) != ERROR_OK )
|
if ((ret = mg_dsk_io_cmd(sect_num, sect_cnt, mg_io_cmd_read)) != ERROR_OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
address = mflash_bank->base + MG_BUFFER_OFFSET;
|
address = mflash_bank->base + MG_BUFFER_OFFSET;
|
||||||
|
@ -502,7 +502,7 @@ static int mg_mflash_do_write_sects(void *buff, uint32_t sect_num, uint32_t sect
|
||||||
uint8_t *buff_ptr = buff;
|
uint8_t *buff_ptr = buff;
|
||||||
duration_t duration;
|
duration_t duration;
|
||||||
|
|
||||||
if ((ret = mg_dsk_io_cmd(sect_num, sect_cnt, cmd)) != ERROR_OK )
|
if ((ret = mg_dsk_io_cmd(sect_num, sect_cnt, cmd)) != ERROR_OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
address = mflash_bank->base + MG_BUFFER_OFFSET;
|
address = mflash_bank->base + MG_BUFFER_OFFSET;
|
||||||
|
|
|
@ -736,7 +736,7 @@ static int nand_read_plain(struct nand_device_s *device, uint32_t address, uint8
|
||||||
|
|
||||||
page = malloc(device->page_size);
|
page = malloc(device->page_size);
|
||||||
|
|
||||||
while (data_size > 0 )
|
while (data_size > 0)
|
||||||
{
|
{
|
||||||
uint32_t thisrun_size = (data_size > device->page_size) ? device->page_size : data_size;
|
uint32_t thisrun_size = (data_size > device->page_size) ? device->page_size : data_size;
|
||||||
uint32_t page_address;
|
uint32_t page_address;
|
||||||
|
@ -773,7 +773,7 @@ static int nand_write_plain(struct nand_device_s *device, uint32_t address, uint
|
||||||
|
|
||||||
page = malloc(device->page_size);
|
page = malloc(device->page_size);
|
||||||
|
|
||||||
while (data_size > 0 )
|
while (data_size > 0)
|
||||||
{
|
{
|
||||||
uint32_t thisrun_size = (data_size > device->page_size) ? device->page_size : data_size;
|
uint32_t thisrun_size = (data_size > device->page_size) ? device->page_size : data_size;
|
||||||
uint32_t page_address;
|
uint32_t page_address;
|
||||||
|
|
|
@ -26,10 +26,10 @@ uint32 dcc_rd(void)
|
||||||
volatile uint32 dcc_reg;
|
volatile uint32 dcc_reg;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
asm volatile ("mrc p14, 0, %0, C0, C0" : "=r" (dcc_reg) : );
|
asm volatile ("mrc p14, 0, %0, C0, C0" : "=r" (dcc_reg) :);
|
||||||
} while ((dcc_reg&1) == 0);
|
} while ((dcc_reg&1) == 0);
|
||||||
|
|
||||||
asm volatile ("mrc p14, 0, %0, C1, C0" : "=r" (dcc_reg) : );
|
asm volatile ("mrc p14, 0, %0, C1, C0" : "=r" (dcc_reg) :);
|
||||||
return dcc_reg;
|
return dcc_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ int dcc_wr(uint32 data)
|
||||||
volatile uint32 dcc_reg;
|
volatile uint32 dcc_reg;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
asm volatile ("mrc p14, 0, %0, C0, C0" : "=r" (dcc_reg) : );
|
asm volatile ("mrc p14, 0, %0, C0, C0" : "=r" (dcc_reg) :);
|
||||||
/* operation controled by master, cancel operation
|
/* operation controled by master, cancel operation
|
||||||
upon reception of data for immediate response */
|
upon reception of data for immediate response */
|
||||||
if (dcc_reg&1) return -1;
|
if (dcc_reg&1) return -1;
|
||||||
|
|
|
@ -148,11 +148,11 @@ static uint32_t pic32mx_wait_status_busy(flash_bank_t *bank, int timeout)
|
||||||
/* wait for busy to clear */
|
/* wait for busy to clear */
|
||||||
while (((status = pic32mx_get_flash_status(bank)) & NVMCON_NVMWR) && (timeout-- > 0))
|
while (((status = pic32mx_get_flash_status(bank)) & NVMCON_NVMWR) && (timeout-- > 0))
|
||||||
{
|
{
|
||||||
LOG_DEBUG("status: 0x%" PRIx32, status );
|
LOG_DEBUG("status: 0x%" PRIx32, status);
|
||||||
alive_sleep(1);
|
alive_sleep(1);
|
||||||
}
|
}
|
||||||
if (timeout <= 0)
|
if (timeout <= 0)
|
||||||
LOG_DEBUG("timeout: status: 0x%" PRIx32, status );
|
LOG_DEBUG("timeout: status: 0x%" PRIx32, status);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -229,9 +229,9 @@ static int pic32mx_erase(struct flash_bank_s *bank, int first, int last)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("Erasing entire program flash");
|
LOG_DEBUG("Erasing entire program flash");
|
||||||
status = pic32mx_nvm_exec(bank, NVMCON_OP_PFM_ERASE, 50);
|
status = pic32mx_nvm_exec(bank, NVMCON_OP_PFM_ERASE, 50);
|
||||||
if (status & NVMCON_NVMERR )
|
if (status & NVMCON_NVMERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & NVMCON_LVDERR )
|
if (status & NVMCON_LVDERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -245,9 +245,9 @@ static int pic32mx_erase(struct flash_bank_s *bank, int first, int last)
|
||||||
|
|
||||||
status = pic32mx_nvm_exec(bank, NVMCON_OP_PAGE_ERASE, 10);
|
status = pic32mx_nvm_exec(bank, NVMCON_OP_PAGE_ERASE, 10);
|
||||||
|
|
||||||
if (status & NVMCON_NVMERR )
|
if (status & NVMCON_NVMERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & NVMCON_LVDERR )
|
if (status & NVMCON_LVDERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
bank->sectors[i].is_erased = 1;
|
bank->sectors[i].is_erased = 1;
|
||||||
}
|
}
|
||||||
|
@ -313,7 +313,7 @@ static int pic32mx_protect(struct flash_bank_s *bank, int set, int first, int la
|
||||||
reg = (i / pic32mx_info->ppage_size) / 8;
|
reg = (i / pic32mx_info->ppage_size) / 8;
|
||||||
bit = (i / pic32mx_info->ppage_size) - (reg * 8);
|
bit = (i / pic32mx_info->ppage_size) - (reg * 8);
|
||||||
|
|
||||||
if (set )
|
if (set)
|
||||||
prot_reg[reg] &= ~(1 << bit);
|
prot_reg[reg] &= ~(1 << bit);
|
||||||
else
|
else
|
||||||
prot_reg[reg] |= (1 << bit);
|
prot_reg[reg] |= (1 << bit);
|
||||||
|
@ -327,7 +327,7 @@ static int pic32mx_protect(struct flash_bank_s *bank, int set, int first, int la
|
||||||
reg = (i / pic32mx_info->ppage_size) / 8;
|
reg = (i / pic32mx_info->ppage_size) / 8;
|
||||||
bit = (i / pic32mx_info->ppage_size) - (reg * 8);
|
bit = (i / pic32mx_info->ppage_size) - (reg * 8);
|
||||||
|
|
||||||
if (set )
|
if (set)
|
||||||
prot_reg[reg] &= ~(1 << bit);
|
prot_reg[reg] &= ~(1 << bit);
|
||||||
else
|
else
|
||||||
prot_reg[reg] |= (1 << bit);
|
prot_reg[reg] |= (1 << bit);
|
||||||
|
@ -434,12 +434,12 @@ static int pic32mx_write_block(struct flash_bank_s *bank, uint8_t *buffer, uint3
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
status = pic32mx_write_row(bank, address, source->address);
|
status = pic32mx_write_row(bank, address, source->address);
|
||||||
if (status & NVMCON_NVMERR ) {
|
if (status & NVMCON_NVMERR) {
|
||||||
LOG_ERROR("Flash write error NVMERR (status = 0x%08" PRIx32 ")", status);
|
LOG_ERROR("Flash write error NVMERR (status = 0x%08" PRIx32 ")", status);
|
||||||
retval = ERROR_FLASH_OPERATION_FAILED;
|
retval = ERROR_FLASH_OPERATION_FAILED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (status & NVMCON_LVDERR ) {
|
if (status & NVMCON_LVDERR) {
|
||||||
LOG_ERROR("Flash write error LVDERR (status = 0x%08" PRIx32 ")", status);
|
LOG_ERROR("Flash write error LVDERR (status = 0x%08" PRIx32 ")", status);
|
||||||
retval = ERROR_FLASH_OPERATION_FAILED;
|
retval = ERROR_FLASH_OPERATION_FAILED;
|
||||||
break;
|
break;
|
||||||
|
@ -458,12 +458,12 @@ static int pic32mx_write_block(struct flash_bank_s *bank, uint8_t *buffer, uint3
|
||||||
memcpy(&value, buffer, sizeof(uint32_t));
|
memcpy(&value, buffer, sizeof(uint32_t));
|
||||||
|
|
||||||
uint32_t status = pic32mx_write_word(bank, address, value);
|
uint32_t status = pic32mx_write_word(bank, address, value);
|
||||||
if (status & NVMCON_NVMERR ) {
|
if (status & NVMCON_NVMERR) {
|
||||||
LOG_ERROR("Flash write error NVMERR (status = 0x%08" PRIx32 ")", status);
|
LOG_ERROR("Flash write error NVMERR (status = 0x%08" PRIx32 ")", status);
|
||||||
retval = ERROR_FLASH_OPERATION_FAILED;
|
retval = ERROR_FLASH_OPERATION_FAILED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (status & NVMCON_LVDERR ) {
|
if (status & NVMCON_LVDERR) {
|
||||||
LOG_ERROR("Flash write error LVDERR (status = 0x%08" PRIx32 ")", status);
|
LOG_ERROR("Flash write error LVDERR (status = 0x%08" PRIx32 ")", status);
|
||||||
retval = ERROR_FLASH_OPERATION_FAILED;
|
retval = ERROR_FLASH_OPERATION_FAILED;
|
||||||
break;
|
break;
|
||||||
|
@ -564,9 +564,9 @@ static int pic32mx_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t of
|
||||||
memcpy(&value, buffer + bytes_written, sizeof(uint32_t));
|
memcpy(&value, buffer + bytes_written, sizeof(uint32_t));
|
||||||
|
|
||||||
status = pic32mx_write_word(bank, address, value);
|
status = pic32mx_write_word(bank, address, value);
|
||||||
if (status & NVMCON_NVMERR )
|
if (status & NVMCON_NVMERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & NVMCON_LVDERR )
|
if (status & NVMCON_LVDERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
bytes_written += 4;
|
bytes_written += 4;
|
||||||
|
@ -580,9 +580,9 @@ static int pic32mx_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t of
|
||||||
memcpy(&value, buffer + bytes_written, bytes_remaining);
|
memcpy(&value, buffer + bytes_written, bytes_remaining);
|
||||||
|
|
||||||
status = pic32mx_write_word(bank, address, value);
|
status = pic32mx_write_word(bank, address, value);
|
||||||
if (status & NVMCON_NVMERR )
|
if (status & NVMCON_NVMERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & NVMCON_LVDERR )
|
if (status & NVMCON_LVDERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -607,10 +607,10 @@ static int pic32mx_probe(struct flash_bank_s *bank)
|
||||||
device_id,
|
device_id,
|
||||||
(unsigned)((device_id >> 1)&0x7ff),
|
(unsigned)((device_id >> 1)&0x7ff),
|
||||||
(unsigned)((device_id >> 12)&0xff),
|
(unsigned)((device_id >> 12)&0xff),
|
||||||
(unsigned)((device_id >> 20)&0xfff) );
|
(unsigned)((device_id >> 20)&0xfff));
|
||||||
|
|
||||||
if (((device_id >> 1)&0x7ff) != PIC32MX_MANUF_ID) {
|
if (((device_id >> 1)&0x7ff) != PIC32MX_MANUF_ID) {
|
||||||
LOG_WARNING("Cannot identify target as a PIC32MX family." );
|
LOG_WARNING("Cannot identify target as a PIC32MX family.");
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -626,7 +626,7 @@ static int pic32mx_probe(struct flash_bank_s *bank)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (pic32mx_devs[i].name == NULL) {
|
if (pic32mx_devs[i].name == NULL) {
|
||||||
LOG_WARNING("Cannot identify target as a PIC32MX family." );
|
LOG_WARNING("Cannot identify target as a PIC32MX family.");
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -646,7 +646,7 @@ static int pic32mx_probe(struct flash_bank_s *bank)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LOG_INFO("flash size = %dkbytes", num_pages );
|
LOG_INFO("flash size = %dkbytes", num_pages);
|
||||||
|
|
||||||
/* calculate numbers of pages */
|
/* calculate numbers of pages */
|
||||||
num_pages /= (page_size / 1024);
|
num_pages /= (page_size / 1024);
|
||||||
|
@ -847,13 +847,13 @@ static int pic32mx_chip_erase(struct flash_bank_s *bank)
|
||||||
|
|
||||||
target_write_u32(target, PIC32MX_FLASH_CR, FLASH_LOCK);
|
target_write_u32(target, PIC32MX_FLASH_CR, FLASH_LOCK);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("pic32mx device protected");
|
LOG_ERROR("pic32mx device protected");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("pic32mx device programming failed");
|
LOG_ERROR("pic32mx device programming failed");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -931,9 +931,9 @@ static int pic32mx_handle_pgm_word_command(struct command_context_s *cmd_ctx, ch
|
||||||
|
|
||||||
res = ERROR_OK;
|
res = ERROR_OK;
|
||||||
status = pic32mx_write_word(bank, address, value);
|
status = pic32mx_write_word(bank, address, value);
|
||||||
if (status & NVMCON_NVMERR )
|
if (status & NVMCON_NVMERR)
|
||||||
res = ERROR_FLASH_OPERATION_FAILED;
|
res = ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & NVMCON_LVDERR )
|
if (status & NVMCON_LVDERR)
|
||||||
res = ERROR_FLASH_OPERATION_FAILED;
|
res = ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
if (res == ERROR_OK)
|
if (res == ERROR_OK)
|
||||||
|
|
|
@ -182,9 +182,9 @@ static int stm32x_erase_options(struct flash_bank_s *bank)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
/* clear readout protection and complementary option bytes
|
/* clear readout protection and complementary option bytes
|
||||||
|
@ -218,9 +218,9 @@ static int stm32x_write_options(struct flash_bank_s *bank)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
/* write protection byte 1 */
|
/* write protection byte 1 */
|
||||||
|
@ -228,9 +228,9 @@ static int stm32x_write_options(struct flash_bank_s *bank)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
/* write protection byte 2 */
|
/* write protection byte 2 */
|
||||||
|
@ -238,9 +238,9 @@ static int stm32x_write_options(struct flash_bank_s *bank)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
/* write protection byte 3 */
|
/* write protection byte 3 */
|
||||||
|
@ -248,9 +248,9 @@ static int stm32x_write_options(struct flash_bank_s *bank)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
/* write protection byte 4 */
|
/* write protection byte 4 */
|
||||||
|
@ -258,9 +258,9 @@ static int stm32x_write_options(struct flash_bank_s *bank)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
/* write readout protection bit */
|
/* write readout protection bit */
|
||||||
|
@ -268,9 +268,9 @@ static int stm32x_write_options(struct flash_bank_s *bank)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
|
||||||
target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);
|
target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);
|
||||||
|
@ -378,9 +378,9 @@ static int stm32x_erase(struct flash_bank_s *bank, int first, int last)
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 10);
|
status = stm32x_wait_status_busy(bank, 10);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
bank->sectors[i].is_erased = 1;
|
bank->sectors[i].is_erased = 1;
|
||||||
}
|
}
|
||||||
|
@ -445,7 +445,7 @@ static int stm32x_protect(struct flash_bank_s *bank, int set, int first, int las
|
||||||
reg = (i / stm32x_info->ppage_size) / 8;
|
reg = (i / stm32x_info->ppage_size) / 8;
|
||||||
bit = (i / stm32x_info->ppage_size) - (reg * 8);
|
bit = (i / stm32x_info->ppage_size) - (reg * 8);
|
||||||
|
|
||||||
if (set )
|
if (set)
|
||||||
prot_reg[reg] &= ~(1 << bit);
|
prot_reg[reg] &= ~(1 << bit);
|
||||||
else
|
else
|
||||||
prot_reg[reg] |= (1 << bit);
|
prot_reg[reg] |= (1 << bit);
|
||||||
|
@ -459,7 +459,7 @@ static int stm32x_protect(struct flash_bank_s *bank, int set, int first, int las
|
||||||
reg = (i / stm32x_info->ppage_size) / 8;
|
reg = (i / stm32x_info->ppage_size) / 8;
|
||||||
bit = (i / stm32x_info->ppage_size) - (reg * 8);
|
bit = (i / stm32x_info->ppage_size) - (reg * 8);
|
||||||
|
|
||||||
if (set )
|
if (set)
|
||||||
prot_reg[reg] &= ~(1 << bit);
|
prot_reg[reg] &= ~(1 << bit);
|
||||||
else
|
else
|
||||||
prot_reg[reg] |= (1 << bit);
|
prot_reg[reg] |= (1 << bit);
|
||||||
|
@ -658,12 +658,12 @@ static int stm32x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t off
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 5);
|
status = stm32x_wait_status_busy(bank, 5);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("flash memory not erased before writing");
|
LOG_ERROR("flash memory not erased before writing");
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("flash memory write protected");
|
LOG_ERROR("flash memory write protected");
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
@ -684,12 +684,12 @@ static int stm32x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t off
|
||||||
|
|
||||||
status = stm32x_wait_status_busy(bank, 5);
|
status = stm32x_wait_status_busy(bank, 5);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("flash memory not erased before writing");
|
LOG_ERROR("flash memory not erased before writing");
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("flash memory write protected");
|
LOG_ERROR("flash memory write protected");
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
@ -720,7 +720,7 @@ static int stm32x_probe(struct flash_bank_s *bank)
|
||||||
|
|
||||||
/* read stm32 device id register */
|
/* read stm32 device id register */
|
||||||
target_read_u32(target, 0xE0042000, &device_id);
|
target_read_u32(target, 0xE0042000, &device_id);
|
||||||
LOG_INFO("device id = 0x%08" PRIx32 "", device_id );
|
LOG_INFO("device id = 0x%08" PRIx32 "", device_id);
|
||||||
|
|
||||||
/* get flash size from target */
|
/* get flash size from target */
|
||||||
if (target_read_u16(target, 0x1FFFF7E0, &num_pages) != ERROR_OK)
|
if (target_read_u16(target, 0x1FFFF7E0, &num_pages) != ERROR_OK)
|
||||||
|
@ -740,7 +740,7 @@ static int stm32x_probe(struct flash_bank_s *bank)
|
||||||
if (num_pages == 0xffff)
|
if (num_pages == 0xffff)
|
||||||
{
|
{
|
||||||
/* number of sectors incorrect on revA */
|
/* number of sectors incorrect on revA */
|
||||||
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash" );
|
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 128k flash");
|
||||||
num_pages = 128;
|
num_pages = 128;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -755,7 +755,7 @@ static int stm32x_probe(struct flash_bank_s *bank)
|
||||||
if (num_pages == 0xffff)
|
if (num_pages == 0xffff)
|
||||||
{
|
{
|
||||||
/* number of sectors incorrect on revA */
|
/* number of sectors incorrect on revA */
|
||||||
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash" );
|
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 32k flash");
|
||||||
num_pages = 32;
|
num_pages = 32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -770,7 +770,7 @@ static int stm32x_probe(struct flash_bank_s *bank)
|
||||||
if (num_pages == 0xffff)
|
if (num_pages == 0xffff)
|
||||||
{
|
{
|
||||||
/* number of sectors incorrect on revZ */
|
/* number of sectors incorrect on revZ */
|
||||||
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash" );
|
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 512k flash");
|
||||||
num_pages = 512;
|
num_pages = 512;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -785,17 +785,17 @@ static int stm32x_probe(struct flash_bank_s *bank)
|
||||||
if (num_pages == 0xffff)
|
if (num_pages == 0xffff)
|
||||||
{
|
{
|
||||||
/* number of sectors incorrect on revZ */
|
/* number of sectors incorrect on revZ */
|
||||||
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash" );
|
LOG_WARNING("STM32 flash size failed, probe inaccurate - assuming 256k flash");
|
||||||
num_pages = 256;
|
num_pages = 256;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_WARNING("Cannot identify target as a STM32 family." );
|
LOG_WARNING("Cannot identify target as a STM32 family.");
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO("flash size = %dkbytes", num_pages );
|
LOG_INFO("flash size = %dkbytes", num_pages);
|
||||||
|
|
||||||
/* calculate numbers of pages */
|
/* calculate numbers of pages */
|
||||||
num_pages /= (page_size / 1024);
|
num_pages /= (page_size / 1024);
|
||||||
|
@ -1188,13 +1188,13 @@ static int stm32x_mass_erase(struct flash_bank_s *bank)
|
||||||
|
|
||||||
target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);
|
target_write_u32(target, STM32_FLASH_CR, FLASH_LOCK);
|
||||||
|
|
||||||
if (status & FLASH_WRPRTERR )
|
if (status & FLASH_WRPRTERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("stm32x device protected");
|
LOG_ERROR("stm32x device protected");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status & FLASH_PGERR )
|
if (status & FLASH_PGERR)
|
||||||
{
|
{
|
||||||
LOG_ERROR("stm32x device programming failed");
|
LOG_ERROR("stm32x device programming failed");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
|
@ -634,7 +634,7 @@ static int str7x_handle_part_id_command(struct command_context_s *cmd_ctx, char
|
||||||
|
|
||||||
static int str7x_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
static int str7x_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
||||||
{
|
{
|
||||||
snprintf(buf, buf_size, "str7x flash driver info" );
|
snprintf(buf, buf_size, "str7x flash driver info");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -305,7 +305,7 @@ static int str9x_erase(struct flash_bank_s *bank, int first, int last)
|
||||||
{
|
{
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
if (status & 0x80 )
|
if (status & 0x80)
|
||||||
break;
|
break;
|
||||||
alive_sleep(1);
|
alive_sleep(1);
|
||||||
}
|
}
|
||||||
|
@ -327,7 +327,7 @@ static int str9x_erase(struct flash_bank_s *bank, int first, int last)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status & 0x22 )
|
if (status & 0x22)
|
||||||
{
|
{
|
||||||
LOG_ERROR("error erasing flash bank, status: 0x%x", status);
|
LOG_ERROR("error erasing flash bank, status: 0x%x", status);
|
||||||
return ERROR_FLASH_OPERATION_FAILED;
|
return ERROR_FLASH_OPERATION_FAILED;
|
||||||
|
@ -365,7 +365,7 @@ static int str9x_protect(struct flash_bank_s *bank,
|
||||||
adr = bank->base + bank->sectors[i].offset;
|
adr = bank->base + bank->sectors[i].offset;
|
||||||
|
|
||||||
target_write_u16(target, adr, 0x60);
|
target_write_u16(target, adr, 0x60);
|
||||||
if (set )
|
if (set)
|
||||||
target_write_u16(target, adr, 0x01);
|
target_write_u16(target, adr, 0x01);
|
||||||
else
|
else
|
||||||
target_write_u16(target, adr, 0xD0);
|
target_write_u16(target, adr, 0xD0);
|
||||||
|
@ -578,7 +578,7 @@ static int str9x_write(struct flash_bank_s *bank,
|
||||||
for (timeout = 0; timeout < 1000; timeout++)
|
for (timeout = 0; timeout < 1000; timeout++)
|
||||||
{
|
{
|
||||||
target_read_u8(target, bank_adr, &status);
|
target_read_u8(target, bank_adr, &status);
|
||||||
if (status & 0x80 )
|
if (status & 0x80)
|
||||||
break;
|
break;
|
||||||
alive_sleep(1);
|
alive_sleep(1);
|
||||||
}
|
}
|
||||||
|
@ -627,7 +627,7 @@ static int str9x_write(struct flash_bank_s *bank,
|
||||||
for (timeout = 0; timeout < 1000; timeout++)
|
for (timeout = 0; timeout < 1000; timeout++)
|
||||||
{
|
{
|
||||||
target_read_u8(target, bank_adr, &status);
|
target_read_u8(target, bank_adr, &status);
|
||||||
if (status & 0x80 )
|
if (status & 0x80)
|
||||||
break;
|
break;
|
||||||
alive_sleep(1);
|
alive_sleep(1);
|
||||||
}
|
}
|
||||||
|
@ -665,7 +665,7 @@ static int str9x_handle_part_id_command(struct command_context_s *cmd_ctx,
|
||||||
|
|
||||||
static int str9x_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
static int str9x_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
||||||
{
|
{
|
||||||
snprintf(buf, buf_size, "str9x flash driver info" );
|
snprintf(buf, buf_size, "str9x flash driver info");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ static int str9xpec_register_commands(struct command_context_s *cmd_ctx)
|
||||||
|
|
||||||
int str9xpec_set_instr(jtag_tap_t *tap, uint32_t new_instr, tap_state_t end_state)
|
int str9xpec_set_instr(jtag_tap_t *tap, uint32_t new_instr, tap_state_t end_state)
|
||||||
{
|
{
|
||||||
if (tap == NULL ){
|
if (tap == NULL){
|
||||||
return ERROR_TARGET_INVALID;
|
return ERROR_TARGET_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ static int str9xpec_blank_check(struct flash_bank_s *bank, int first, int last)
|
||||||
tap = str9xpec_info->tap;
|
tap = str9xpec_info->tap;
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
str9xpec_isc_enable(bank );
|
str9xpec_isc_enable(bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
|
@ -438,7 +438,7 @@ static int str9xpec_erase_area(struct flash_bank_s *bank, int first, int last)
|
||||||
tap = str9xpec_info->tap;
|
tap = str9xpec_info->tap;
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
str9xpec_isc_enable(bank );
|
str9xpec_isc_enable(bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
|
@ -518,7 +518,7 @@ static int str9xpec_lock_device(struct flash_bank_s *bank)
|
||||||
tap = str9xpec_info->tap;
|
tap = str9xpec_info->tap;
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
str9xpec_isc_enable(bank );
|
str9xpec_isc_enable(bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
|
@ -575,7 +575,7 @@ static int str9xpec_protect(struct flash_bank_s *bank, int set, int first, int l
|
||||||
/* last bank: 0xFF signals a full device protect */
|
/* last bank: 0xFF signals a full device protect */
|
||||||
if (last == 0xFF)
|
if (last == 0xFF)
|
||||||
{
|
{
|
||||||
if (set )
|
if (set)
|
||||||
{
|
{
|
||||||
status = str9xpec_lock_device(bank);
|
status = str9xpec_lock_device(bank);
|
||||||
}
|
}
|
||||||
|
@ -589,7 +589,7 @@ static int str9xpec_protect(struct flash_bank_s *bank, int set, int first, int l
|
||||||
{
|
{
|
||||||
for (i = first; i <= last; i++)
|
for (i = first; i <= last; i++)
|
||||||
{
|
{
|
||||||
if (set )
|
if (set)
|
||||||
buf_set_u32(str9xpec_info->options, str9xpec_info->sector_bits[i], 1, 1);
|
buf_set_u32(str9xpec_info->options, str9xpec_info->sector_bits[i], 1, 1);
|
||||||
else
|
else
|
||||||
buf_set_u32(str9xpec_info->options, str9xpec_info->sector_bits[i], 1, 0);
|
buf_set_u32(str9xpec_info->options, str9xpec_info->sector_bits[i], 1, 0);
|
||||||
|
@ -845,7 +845,7 @@ static int str9xpec_erase_check(struct flash_bank_s *bank)
|
||||||
|
|
||||||
static int str9xpec_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
static int str9xpec_info(struct flash_bank_s *bank, char *buf, int buf_size)
|
||||||
{
|
{
|
||||||
snprintf(buf, buf_size, "str9xpec flash driver info" );
|
snprintf(buf, buf_size, "str9xpec flash driver info");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -919,13 +919,13 @@ static int str9xpec_write_options(struct flash_bank_s *bank)
|
||||||
tap = str9xpec_info->tap;
|
tap = str9xpec_info->tap;
|
||||||
|
|
||||||
/* erase config options first */
|
/* erase config options first */
|
||||||
status = str9xpec_erase_area(bank, 0xFE, 0xFE );
|
status = str9xpec_erase_area(bank, 0xFE, 0xFE);
|
||||||
|
|
||||||
if ((status & ISC_STATUS_ERROR) != STR9XPEC_ISC_SUCCESS)
|
if ((status & ISC_STATUS_ERROR) != STR9XPEC_ISC_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
str9xpec_isc_enable(bank );
|
str9xpec_isc_enable(bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!str9xpec_info->isc_enable) {
|
if (!str9xpec_info->isc_enable) {
|
||||||
|
|
|
@ -80,7 +80,7 @@ int buf_cmp(const uint8_t *buf1, const uint8_t *buf2, int size)
|
||||||
{
|
{
|
||||||
/* last byte */
|
/* last byte */
|
||||||
/* mask out bits that don't really belong to the buffer if size isn't a multiple of 8 bits */
|
/* mask out bits that don't really belong to the buffer if size isn't a multiple of 8 bits */
|
||||||
if ((size % 8) && (i == num_bytes -1 ))
|
if ((size % 8) && (i == num_bytes -1))
|
||||||
{
|
{
|
||||||
if ((buf1[i] & ((1 << (size % 8)) - 1)) != (buf2[i] & ((1 << (size % 8)) - 1)))
|
if ((buf1[i] & ((1 << (size % 8)) - 1)) != (buf2[i] & ((1 << (size % 8)) - 1)))
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -104,7 +104,7 @@ int buf_cmp_mask(const uint8_t *buf1, const uint8_t *buf2, const uint8_t *mask,
|
||||||
{
|
{
|
||||||
/* last byte */
|
/* last byte */
|
||||||
/* mask out bits that don't really belong to the buffer if size isn't a multiple of 8 bits */
|
/* mask out bits that don't really belong to the buffer if size isn't a multiple of 8 bits */
|
||||||
if ((size % 8) && (i == num_bytes -1 ))
|
if ((size % 8) && (i == num_bytes -1))
|
||||||
{
|
{
|
||||||
if ((buf1[i] & ((1 << (size % 8)) - 1) & mask[i]) !=
|
if ((buf1[i] & ((1 << (size % 8)) - 1) & mask[i]) !=
|
||||||
(buf2[i] & ((1 << (size % 8)) - 1) & mask[i]))
|
(buf2[i] & ((1 << (size % 8)) - 1) & mask[i]))
|
||||||
|
|
|
@ -238,7 +238,7 @@ command_t* register_command(command_context_t *context, command_t *parent, char
|
||||||
|
|
||||||
/* we now need to add an overrideable proc */
|
/* we now need to add an overrideable proc */
|
||||||
const char *override_name = alloc_printf("proc %s%s%s {args} {if {[catch {eval ocd_%s%s%s $args}]==0} {return \"\"} else { return -code error }", t1, t2, t3, t1, t2, t3);
|
const char *override_name = alloc_printf("proc %s%s%s {args} {if {[catch {eval ocd_%s%s%s $args}]==0} {return \"\"} else { return -code error }", t1, t2, t3, t1, t2, t3);
|
||||||
Jim_Eval_Named(interp, override_name, __THIS__FILE__, __LINE__ );
|
Jim_Eval_Named(interp, override_name, __THIS__FILE__, __LINE__);
|
||||||
free((void *)override_name);
|
free((void *)override_name);
|
||||||
|
|
||||||
/* accumulate help text in Tcl helptext list. */
|
/* accumulate help text in Tcl helptext list. */
|
||||||
|
@ -348,8 +348,8 @@ int unregister_command(command_context_t *context, char *name)
|
||||||
|
|
||||||
void command_output_text(command_context_t *context, const char *data)
|
void command_output_text(command_context_t *context, const char *data)
|
||||||
{
|
{
|
||||||
if (context && context->output_handler && data ){
|
if (context && context->output_handler && data){
|
||||||
context->output_handler(context, data );
|
context->output_handler(context, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,7 +405,7 @@ void command_print(command_context_t *context, const char *format, ...)
|
||||||
int run_command(command_context_t *context, command_t *c, char *words[], int num_words)
|
int run_command(command_context_t *context, command_t *c, char *words[], int num_words)
|
||||||
{
|
{
|
||||||
int start_word = 0;
|
int start_word = 0;
|
||||||
if (!((context->mode == COMMAND_CONFIG) || (c->mode == COMMAND_ANY) || (c->mode == context->mode) ))
|
if (!((context->mode == COMMAND_CONFIG) || (c->mode == COMMAND_ANY) || (c->mode == context->mode)))
|
||||||
{
|
{
|
||||||
/* Config commands can not run after the config stage */
|
/* Config commands can not run after the config stage */
|
||||||
LOG_ERROR("Command '%s' only runs during configuration stage", c->name);
|
LOG_ERROR("Command '%s' only runs during configuration stage", c->name);
|
||||||
|
@ -466,7 +466,7 @@ int command_run_line(command_context_t *context, char *line)
|
||||||
retcode = Jim_SetAssocData(interp, "retval", NULL, &retval);
|
retcode = Jim_SetAssocData(interp, "retval", NULL, &retval);
|
||||||
if (retcode == JIM_OK)
|
if (retcode == JIM_OK)
|
||||||
{
|
{
|
||||||
retcode = Jim_Eval_Named(interp, line, __THIS__FILE__, __LINE__ );
|
retcode = Jim_Eval_Named(interp, line, __THIS__FILE__, __LINE__);
|
||||||
|
|
||||||
Jim_DeleteAssocData(interp, "retval");
|
Jim_DeleteAssocData(interp, "retval");
|
||||||
}
|
}
|
||||||
|
@ -673,7 +673,7 @@ static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
|
|
||||||
log_add_callback(tcl_output, tclOutput);
|
log_add_callback(tcl_output, tclOutput);
|
||||||
|
|
||||||
retcode = Jim_Eval_Named(interp, str, __THIS__FILE__, __LINE__ );
|
retcode = Jim_Eval_Named(interp, str, __THIS__FILE__, __LINE__);
|
||||||
|
|
||||||
log_remove_callback(tcl_output, tclOutput);
|
log_remove_callback(tcl_output, tclOutput);
|
||||||
|
|
||||||
|
@ -704,7 +704,7 @@ command_context_t* command_init()
|
||||||
Jim_RegisterCoreCommands(interp);
|
Jim_RegisterCoreCommands(interp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_MSC_VER )
|
#if defined(_MSC_VER)
|
||||||
/* WinXX - is generic, the forward
|
/* WinXX - is generic, the forward
|
||||||
* looking problem is this:
|
* looking problem is this:
|
||||||
*
|
*
|
||||||
|
@ -715,16 +715,16 @@ command_context_t* command_init()
|
||||||
HostOs = "winxx";
|
HostOs = "winxx";
|
||||||
#elif defined(__LINUX__)
|
#elif defined(__LINUX__)
|
||||||
HostOs = "linux";
|
HostOs = "linux";
|
||||||
#elif defined(__DARWIN__ )
|
#elif defined(__DARWIN__)
|
||||||
HostOs = "darwin";
|
HostOs = "darwin";
|
||||||
#elif defined(__CYGWIN__ )
|
#elif defined(__CYGWIN__)
|
||||||
HostOs = "cygwin";
|
HostOs = "cygwin";
|
||||||
#elif defined(__MINGW32__ )
|
#elif defined(__MINGW32__)
|
||||||
HostOs = "mingw32";
|
HostOs = "mingw32";
|
||||||
#else
|
#else
|
||||||
HostOs = "other";
|
HostOs = "other";
|
||||||
#endif
|
#endif
|
||||||
Jim_SetGlobalVariableStr(interp, "ocd_HOSTOS", Jim_NewStringObj(interp, HostOs , strlen(HostOs)) );
|
Jim_SetGlobalVariableStr(interp, "ocd_HOSTOS", Jim_NewStringObj(interp, HostOs , strlen(HostOs)));
|
||||||
|
|
||||||
Jim_CreateCommand(interp, "ocd_find", jim_find, NULL, NULL);
|
Jim_CreateCommand(interp, "ocd_find", jim_find, NULL, NULL);
|
||||||
Jim_CreateCommand(interp, "echo", jim_echo, NULL, NULL);
|
Jim_CreateCommand(interp, "echo", jim_echo, NULL, NULL);
|
||||||
|
|
|
@ -199,7 +199,7 @@ int handle_meminfo_command(struct command_context_s *cmd_ctx, char *cmd, char **
|
||||||
}
|
}
|
||||||
prev = info.fordblks;
|
prev = info.fordblks;
|
||||||
|
|
||||||
command_print(cmd_ctx, "Available ram: %d", info.fordblks );
|
command_print(cmd_ctx, "Available ram: %d", info.fordblks);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -325,34 +325,34 @@ void copyfile(char *name2, char *name1)
|
||||||
|
|
||||||
fd1 = open(name1, O_WRONLY | O_CREAT, 0664);
|
fd1 = open(name1, O_WRONLY | O_CREAT, 0664);
|
||||||
if (fd1 < 0)
|
if (fd1 < 0)
|
||||||
SHOW_RESULT(open, fd1 );
|
SHOW_RESULT(open, fd1);
|
||||||
|
|
||||||
fd2 = open(name2, O_RDONLY);
|
fd2 = open(name2, O_RDONLY);
|
||||||
if (fd2 < 0)
|
if (fd2 < 0)
|
||||||
SHOW_RESULT(open, fd2 );
|
SHOW_RESULT(open, fd2);
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
done = read(fd2, buf, IOSIZE );
|
done = read(fd2, buf, IOSIZE);
|
||||||
if (done < 0)
|
if (done < 0)
|
||||||
{
|
{
|
||||||
SHOW_RESULT(read, done );
|
SHOW_RESULT(read, done);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (done == 0 ) break;
|
if (done == 0) break;
|
||||||
|
|
||||||
wrote = write(fd1, buf, done);
|
wrote = write(fd1, buf, done);
|
||||||
if (wrote != done ) SHOW_RESULT(write, wrote );
|
if (wrote != done) SHOW_RESULT(write, wrote);
|
||||||
|
|
||||||
if (wrote != done ) break;
|
if (wrote != done) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = close(fd1);
|
err = close(fd1);
|
||||||
if (err < 0 ) SHOW_RESULT(close, err );
|
if (err < 0) SHOW_RESULT(close, err);
|
||||||
|
|
||||||
err = close(fd2);
|
err = close(fd2);
|
||||||
if (err < 0 ) SHOW_RESULT(close, err );
|
if (err < 0) SHOW_RESULT(close, err);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,7 +372,7 @@ void copydir(char *name, char *destdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
dirp = opendir(name);
|
dirp = opendir(name);
|
||||||
if (dirp == NULL ) SHOW_RESULT(opendir, -1 );
|
if (dirp == NULL) SHOW_RESULT(opendir, -1);
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
@ -421,7 +421,7 @@ void copydir(char *name, char *destdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = closedir(dirp);
|
err = closedir(dirp);
|
||||||
if (err < 0 ) SHOW_RESULT(stat, err );
|
if (err < 0) SHOW_RESULT(stat, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
328
src/helper/jim.c
328
src/helper/jim.c
|
@ -117,25 +117,25 @@ static Jim_HashTableType *getJimVariablesHashTableType(void);
|
||||||
* ---------------------------------------------------------------------------*/
|
* ---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
jim_vasprintf(const char *fmt, va_list ap )
|
jim_vasprintf(const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
#ifndef HAVE_VASPRINTF
|
#ifndef HAVE_VASPRINTF
|
||||||
/* yucky way */
|
/* yucky way */
|
||||||
static char buf[2048];
|
static char buf[2048];
|
||||||
vsnprintf(buf, sizeof(buf), fmt, ap );
|
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||||
/* garentee termination */
|
/* garentee termination */
|
||||||
buf[sizeof(buf)-1] = 0;
|
buf[sizeof(buf)-1] = 0;
|
||||||
#else
|
#else
|
||||||
char *buf;
|
char *buf;
|
||||||
int result;
|
int result;
|
||||||
result = vasprintf(&buf, fmt, ap );
|
result = vasprintf(&buf, fmt, ap);
|
||||||
if (result < 0) exit(-1);
|
if (result < 0) exit(-1);
|
||||||
#endif
|
#endif
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
jim_vasprintf_done(void *buf )
|
jim_vasprintf_done(void *buf)
|
||||||
{
|
{
|
||||||
#ifndef HAVE_VASPRINTF
|
#ifndef HAVE_VASPRINTF
|
||||||
(void)(buf);
|
(void)(buf);
|
||||||
|
@ -421,7 +421,7 @@ int Jim_StringToWide(const char *str, jim_wide *widePtr, int base)
|
||||||
#else
|
#else
|
||||||
*widePtr = strtol(str, &endptr, base);
|
*widePtr = strtol(str, &endptr, base);
|
||||||
#endif
|
#endif
|
||||||
if ((str[0] == '\0') || (str == endptr) )
|
if ((str[0] == '\0') || (str == endptr))
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
if (endptr[0] != '\0') {
|
if (endptr[0] != '\0') {
|
||||||
while (*endptr) {
|
while (*endptr) {
|
||||||
|
@ -438,7 +438,7 @@ int Jim_StringToIndex(const char *str, int *intPtr)
|
||||||
char *endptr;
|
char *endptr;
|
||||||
|
|
||||||
*intPtr = strtol(str, &endptr, 10);
|
*intPtr = strtol(str, &endptr, 10);
|
||||||
if ((str[0] == '\0') || (str == endptr) )
|
if ((str[0] == '\0') || (str == endptr))
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
if (endptr[0] != '\0') {
|
if (endptr[0] != '\0') {
|
||||||
while (*endptr) {
|
while (*endptr) {
|
||||||
|
@ -495,7 +495,7 @@ int Jim_StringToDouble(const char *str, double *doublePtr)
|
||||||
char *endptr;
|
char *endptr;
|
||||||
|
|
||||||
*doublePtr = strtod(str, &endptr);
|
*doublePtr = strtod(str, &endptr);
|
||||||
if (str[0] == '\0' || endptr[0] != '\0' || (str == endptr) )
|
if (str[0] == '\0' || endptr[0] != '\0' || (str == endptr))
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
}
|
}
|
||||||
|
@ -544,10 +544,10 @@ void Jim_Panic(Jim_Interp *interp, const char *fmt, ...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This may actually crash... we do it last */
|
/* This may actually crash... we do it last */
|
||||||
if (interp && interp->cookie_stderr ){
|
if (interp && interp->cookie_stderr){
|
||||||
Jim_fprintf(interp, interp->cookie_stderr, JIM_NL "JIM INTERPRETER PANIC: ");
|
Jim_fprintf(interp, interp->cookie_stderr, JIM_NL "JIM INTERPRETER PANIC: ");
|
||||||
Jim_vfprintf(interp, interp->cookie_stderr, fmt, ap );
|
Jim_vfprintf(interp, interp->cookie_stderr, fmt, ap);
|
||||||
Jim_fprintf(interp, interp->cookie_stderr, JIM_NL JIM_NL );
|
Jim_fprintf(interp, interp->cookie_stderr, JIM_NL JIM_NL);
|
||||||
}
|
}
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
@ -2055,17 +2055,17 @@ void Jim_AppendString(Jim_Interp *interp, Jim_Obj *objPtr, const char *str,
|
||||||
StringAppendString(objPtr, str, len);
|
StringAppendString(objPtr, str, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jim_AppendString_sprintf(Jim_Interp *interp, Jim_Obj *objPtr, const char *fmt, ... )
|
void Jim_AppendString_sprintf(Jim_Interp *interp, Jim_Obj *objPtr, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, fmt );
|
va_start(ap, fmt);
|
||||||
buf = jim_vasprintf(fmt, ap );
|
buf = jim_vasprintf(fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
if (buf ){
|
if (buf){
|
||||||
Jim_AppendString(interp, objPtr, buf, -1 );
|
Jim_AppendString(interp, objPtr, buf, -1);
|
||||||
jim_vasprintf_done(buf);
|
jim_vasprintf_done(buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2283,10 +2283,10 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
haveprec = 0;
|
haveprec = 0;
|
||||||
prec = -1; /* not found yet */
|
prec = -1; /* not found yet */
|
||||||
next_fmt:
|
next_fmt:
|
||||||
if (fmtLen <= 0 ){
|
if (fmtLen <= 0){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (*fmt ){
|
switch (*fmt){
|
||||||
/* terminals */
|
/* terminals */
|
||||||
case 'b': /* binary - not all printfs() do this */
|
case 'b': /* binary - not all printfs() do this */
|
||||||
case 's': /* string */
|
case 's': /* string */
|
||||||
|
@ -2341,11 +2341,11 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
case '8':
|
case '8':
|
||||||
case '9':
|
case '9':
|
||||||
accum = 0;
|
accum = 0;
|
||||||
while (isdigit(*fmt) && (fmtLen > 0) ){
|
while (isdigit(*fmt) && (fmtLen > 0)){
|
||||||
accum = (accum * 10) + (*fmt - '0');
|
accum = (accum * 10) + (*fmt - '0');
|
||||||
fmt++; fmtLen--;
|
fmt++; fmtLen--;
|
||||||
}
|
}
|
||||||
if (inprec ){
|
if (inprec){
|
||||||
haveprec = 1;
|
haveprec = 1;
|
||||||
prec = accum;
|
prec = accum;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2356,24 +2356,24 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
/* suck up the next item as an integer */
|
/* suck up the next item as an integer */
|
||||||
fmt++; fmtLen--;
|
fmt++; fmtLen--;
|
||||||
objc--;
|
objc--;
|
||||||
if (objc <= 0 ){
|
if (objc <= 0){
|
||||||
goto not_enough_args;
|
goto not_enough_args;
|
||||||
}
|
}
|
||||||
if (Jim_GetWide(interp,objv[0],&wideValue )== JIM_ERR ){
|
if (Jim_GetWide(interp,objv[0],&wideValue)== JIM_ERR){
|
||||||
Jim_FreeNewObj(interp, resObjPtr );
|
Jim_FreeNewObj(interp, resObjPtr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (inprec ){
|
if (inprec){
|
||||||
haveprec = 1;
|
haveprec = 1;
|
||||||
prec = wideValue;
|
prec = wideValue;
|
||||||
if (prec < 0 ){
|
if (prec < 0){
|
||||||
/* man 3 printf says */
|
/* man 3 printf says */
|
||||||
/* if prec is negative, it is zero */
|
/* if prec is negative, it is zero */
|
||||||
prec = 0;
|
prec = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
width = wideValue;
|
width = wideValue;
|
||||||
if (width < 0 ){
|
if (width < 0){
|
||||||
ljust = 1;
|
ljust = 1;
|
||||||
width = -width;
|
width = -width;
|
||||||
}
|
}
|
||||||
|
@ -2402,33 +2402,33 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
*/
|
*/
|
||||||
cp = fmt_str;
|
cp = fmt_str;
|
||||||
*cp++ = '%';
|
*cp++ = '%';
|
||||||
if (altfm ){
|
if (altfm){
|
||||||
*cp++ = '#';
|
*cp++ = '#';
|
||||||
}
|
}
|
||||||
if (forceplus ){
|
if (forceplus){
|
||||||
*cp++ = '+';
|
*cp++ = '+';
|
||||||
} else if (spad ){
|
} else if (spad){
|
||||||
/* PLUS overrides */
|
/* PLUS overrides */
|
||||||
*cp++ = ' ';
|
*cp++ = ' ';
|
||||||
}
|
}
|
||||||
if (ljust ){
|
if (ljust){
|
||||||
*cp++ = '-';
|
*cp++ = '-';
|
||||||
}
|
}
|
||||||
if (zpad ){
|
if (zpad){
|
||||||
*cp++ = '0';
|
*cp++ = '0';
|
||||||
}
|
}
|
||||||
if (width > 0 ){
|
if (width > 0){
|
||||||
sprintf(cp, "%d", width );
|
sprintf(cp, "%d", width);
|
||||||
/* skip ahead */
|
/* skip ahead */
|
||||||
cp = strchr(cp,0);
|
cp = strchr(cp,0);
|
||||||
}
|
}
|
||||||
/* did we find a period? */
|
/* did we find a period? */
|
||||||
if (inprec ){
|
if (inprec){
|
||||||
/* then add it */
|
/* then add it */
|
||||||
*cp++ = '.';
|
*cp++ = '.';
|
||||||
/* did something occur after the period? */
|
/* did something occur after the period? */
|
||||||
if (haveprec ){
|
if (haveprec){
|
||||||
sprintf(cp, "%d", prec );
|
sprintf(cp, "%d", prec);
|
||||||
}
|
}
|
||||||
cp = strchr(cp,0);
|
cp = strchr(cp,0);
|
||||||
}
|
}
|
||||||
|
@ -2441,7 +2441,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
*cp++ = 's';
|
*cp++ = 's';
|
||||||
*cp = 0;
|
*cp = 0;
|
||||||
/* BUG: we do not handled embeded NULLs */
|
/* BUG: we do not handled embeded NULLs */
|
||||||
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, Jim_GetString(objv[0], NULL ));
|
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, Jim_GetString(objv[0], NULL));
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
*cp++ = 'c';
|
*cp++ = 'c';
|
||||||
|
@ -2451,7 +2451,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
c = (char) wideValue;
|
c = (char) wideValue;
|
||||||
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, c );
|
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, c);
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
case 'F':
|
case 'F':
|
||||||
|
@ -2461,11 +2461,11 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
case 'E':
|
case 'E':
|
||||||
*cp++ = *fmt;
|
*cp++ = *fmt;
|
||||||
*cp = 0;
|
*cp = 0;
|
||||||
if (Jim_GetDouble(interp, objv[0], &doubleValue ) == JIM_ERR ){
|
if (Jim_GetDouble(interp, objv[0], &doubleValue) == JIM_ERR){
|
||||||
Jim_FreeNewObj(interp, resObjPtr );
|
Jim_FreeNewObj(interp, resObjPtr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, doubleValue );
|
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, doubleValue);
|
||||||
break;
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
case 'd':
|
case 'd':
|
||||||
|
@ -2475,7 +2475,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'X':
|
case 'X':
|
||||||
/* jim widevaluse are 64bit */
|
/* jim widevaluse are 64bit */
|
||||||
if (sizeof(jim_wide) == sizeof(long long) ){
|
if (sizeof(jim_wide) == sizeof(long long)){
|
||||||
*cp++ = 'l';
|
*cp++ = 'l';
|
||||||
*cp++ = 'l';
|
*cp++ = 'l';
|
||||||
} else {
|
} else {
|
||||||
|
@ -2487,7 +2487,7 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
Jim_FreeNewObj(interp, resObjPtr);
|
Jim_FreeNewObj(interp, resObjPtr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, wideValue );
|
snprintf(sprintf_buf, JIM_MAX_FMT, fmt_str, wideValue);
|
||||||
break;
|
break;
|
||||||
case '%':
|
case '%':
|
||||||
sprintf_buf[0] = '%';
|
sprintf_buf[0] = '%';
|
||||||
|
@ -2504,12 +2504,12 @@ static Jim_Obj *Jim_FormatString_Inner(Jim_Interp *interp, Jim_Obj *fmtObjPtr,
|
||||||
}
|
}
|
||||||
/* force terminate */
|
/* force terminate */
|
||||||
#if 0
|
#if 0
|
||||||
printf("FMT was: %s\n", fmt_str );
|
printf("FMT was: %s\n", fmt_str);
|
||||||
printf("RES was: |%s|\n", sprintf_buf );
|
printf("RES was: |%s|\n", sprintf_buf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sprintf_buf[ JIM_MAX_FMT - 1] = 0;
|
sprintf_buf[ JIM_MAX_FMT - 1] = 0;
|
||||||
Jim_AppendString(interp, resObjPtr, sprintf_buf, strlen(sprintf_buf) );
|
Jim_AppendString(interp, resObjPtr, sprintf_buf, strlen(sprintf_buf));
|
||||||
/* next obj */
|
/* next obj */
|
||||||
objv++;
|
objv++;
|
||||||
fmt++;
|
fmt++;
|
||||||
|
@ -2626,13 +2626,13 @@ int Jim_GetNvp(Jim_Interp *interp,
|
||||||
Jim_Nvp *n;
|
Jim_Nvp *n;
|
||||||
int e;
|
int e;
|
||||||
|
|
||||||
e = Jim_Nvp_name2value_obj(interp, nvp_table, objPtr, &n );
|
e = Jim_Nvp_name2value_obj(interp, nvp_table, objPtr, &n);
|
||||||
if (e == JIM_ERR ){
|
if (e == JIM_ERR){
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Success? found? */
|
/* Success? found? */
|
||||||
if (n->name ){
|
if (n->name){
|
||||||
/* remove const */
|
/* remove const */
|
||||||
*result = (Jim_Nvp *)n;
|
*result = (Jim_Nvp *)n;
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
|
@ -4426,7 +4426,7 @@ Jim_Interp *Jim_CreateInterp(void)
|
||||||
i->cookie_stderr = stderr;
|
i->cookie_stderr = stderr;
|
||||||
i->cb_fwrite = ((size_t (*)(const void *, size_t, size_t, void *))(fwrite));
|
i->cb_fwrite = ((size_t (*)(const void *, size_t, size_t, void *))(fwrite));
|
||||||
i->cb_fread = ((size_t (*)(void *, size_t, size_t, void *))(fread));
|
i->cb_fread = ((size_t (*)(void *, size_t, size_t, void *))(fread));
|
||||||
i->cb_vfprintf = ((int (*)(void *, const char *fmt, va_list ))(vfprintf));
|
i->cb_vfprintf = ((int (*)(void *, const char *fmt, va_list))(vfprintf));
|
||||||
i->cb_fflush = ((int (*)(void *))(fflush));
|
i->cb_fflush = ((int (*)(void *))(fflush));
|
||||||
i->cb_fgets = ((char * (*)(char *, int, void *))(fgets));
|
i->cb_fgets = ((char * (*)(char *, int, void *))(fgets));
|
||||||
|
|
||||||
|
@ -5433,7 +5433,7 @@ void Jim_ListInsertElements(Jim_Interp *interp, Jim_Obj *listPtr, int index,
|
||||||
SetListFromAny(interp, listPtr);
|
SetListFromAny(interp, listPtr);
|
||||||
if (index >= 0 && index > listPtr->internalRep.listValue.len)
|
if (index >= 0 && index > listPtr->internalRep.listValue.len)
|
||||||
index = listPtr->internalRep.listValue.len;
|
index = listPtr->internalRep.listValue.len;
|
||||||
else if (index < 0 )
|
else if (index < 0)
|
||||||
index = 0;
|
index = 0;
|
||||||
Jim_InvalidateStringRep(listPtr);
|
Jim_InvalidateStringRep(listPtr);
|
||||||
ListInsertElements(listPtr, index, objc, objVec);
|
ListInsertElements(listPtr, index, objc, objVec);
|
||||||
|
@ -6353,11 +6353,11 @@ int JimParseExprNumber(struct JimParserCtx *pc)
|
||||||
pc->p++; pc->len--;
|
pc->p++; pc->len--;
|
||||||
}
|
}
|
||||||
while (isdigit((int)*pc->p)
|
while (isdigit((int)*pc->p)
|
||||||
|| (allowhex && isxdigit((int)*pc->p) )
|
|| (allowhex && isxdigit((int)*pc->p))
|
||||||
|| (allowdot && *pc->p == '.')
|
|| (allowdot && *pc->p == '.')
|
||||||
|| (pc->p-pc->tstart == 1 && *pc->tstart == '0' &&
|
|| (pc->p-pc->tstart == 1 && *pc->tstart == '0' &&
|
||||||
(*pc->p == 'x' || *pc->p == 'X'))
|
(*pc->p == 'x' || *pc->p == 'X'))
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if ((*pc->p == 'x') || (*pc->p == 'X')) {
|
if ((*pc->p == 'x') || (*pc->p == 'X')) {
|
||||||
allowhex = 1;
|
allowhex = 1;
|
||||||
|
@ -8894,8 +8894,8 @@ int Jim_Eval_Named(Jim_Interp *interp, const char *script, const char *filename,
|
||||||
Jim_IncrRefCount(scriptObjPtr);
|
Jim_IncrRefCount(scriptObjPtr);
|
||||||
|
|
||||||
|
|
||||||
if (filename ){
|
if (filename){
|
||||||
JimSetSourceInfo(interp, scriptObjPtr, filename, lineno );
|
JimSetSourceInfo(interp, scriptObjPtr, filename, lineno);
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = Jim_EvalObj(interp, scriptObjPtr);
|
retval = Jim_EvalObj(interp, scriptObjPtr);
|
||||||
|
@ -8905,7 +8905,7 @@ int Jim_Eval_Named(Jim_Interp *interp, const char *script, const char *filename,
|
||||||
|
|
||||||
int Jim_Eval(Jim_Interp *interp, const char *script)
|
int Jim_Eval(Jim_Interp *interp, const char *script)
|
||||||
{
|
{
|
||||||
return Jim_Eval_Named(interp, script, NULL, 0 );
|
return Jim_Eval_Named(interp, script, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -8963,7 +8963,7 @@ int Jim_EvalFile(Jim_Interp *interp, const char *filename)
|
||||||
const int cwd_len = 2048;
|
const int cwd_len = 2048;
|
||||||
char *cwd = malloc(cwd_len);
|
char *cwd = malloc(cwd_len);
|
||||||
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
|
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
|
||||||
if (!getcwd(cwd, cwd_len )) strcpy(cwd, "unknown");
|
if (!getcwd(cwd, cwd_len)) strcpy(cwd, "unknown");
|
||||||
Jim_AppendStrings(interp, Jim_GetResult(interp),
|
Jim_AppendStrings(interp, Jim_GetResult(interp),
|
||||||
"Error loading script \"", filename, "\"",
|
"Error loading script \"", filename, "\"",
|
||||||
" cwd: ", cwd,
|
" cwd: ", cwd,
|
||||||
|
@ -9359,12 +9359,12 @@ void JimRegisterCoreApi(Jim_Interp *interp)
|
||||||
JIM_REGISTER_API(StackPop);
|
JIM_REGISTER_API(StackPop);
|
||||||
JIM_REGISTER_API(StackPeek);
|
JIM_REGISTER_API(StackPeek);
|
||||||
JIM_REGISTER_API(FreeStackElements);
|
JIM_REGISTER_API(FreeStackElements);
|
||||||
JIM_REGISTER_API(fprintf );
|
JIM_REGISTER_API(fprintf);
|
||||||
JIM_REGISTER_API(vfprintf );
|
JIM_REGISTER_API(vfprintf);
|
||||||
JIM_REGISTER_API(fwrite );
|
JIM_REGISTER_API(fwrite);
|
||||||
JIM_REGISTER_API(fread );
|
JIM_REGISTER_API(fread);
|
||||||
JIM_REGISTER_API(fflush );
|
JIM_REGISTER_API(fflush);
|
||||||
JIM_REGISTER_API(fgets );
|
JIM_REGISTER_API(fgets);
|
||||||
JIM_REGISTER_API(GetNvp);
|
JIM_REGISTER_API(GetNvp);
|
||||||
JIM_REGISTER_API(Nvp_name2value);
|
JIM_REGISTER_API(Nvp_name2value);
|
||||||
JIM_REGISTER_API(Nvp_name2value_simple);
|
JIM_REGISTER_API(Nvp_name2value_simple);
|
||||||
|
@ -10217,7 +10217,7 @@ static int JimForeachMapHelper(Jim_Interp *interp, int argc,
|
||||||
if (count > nbrOfLoops)
|
if (count > nbrOfLoops)
|
||||||
nbrOfLoops = count;
|
nbrOfLoops = count;
|
||||||
}
|
}
|
||||||
for (; nbrOfLoops-- > 0; ) {
|
for (; nbrOfLoops-- > 0;) {
|
||||||
for (i = 0; i < nbrOfLists; ++i) {
|
for (i = 0; i < nbrOfLists; ++i) {
|
||||||
int varIdx = 0, var = i * 2;
|
int varIdx = 0, var = i * 2;
|
||||||
while (varIdx < listsEnd[var]) {
|
while (varIdx < listsEnd[var]) {
|
||||||
|
@ -12276,7 +12276,7 @@ static void Jim_RegisterCoreProcedures(Jim_Interp *interp)
|
||||||
"proc lambdaFinalizer {name val} {\n"
|
"proc lambdaFinalizer {name val} {\n"
|
||||||
" rename $name {}\n"
|
" rename $name {}\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jim_RegisterCoreCommands(Jim_Interp *interp)
|
void Jim_RegisterCoreCommands(Jim_Interp *interp)
|
||||||
|
@ -12399,66 +12399,66 @@ out:
|
||||||
* Jim's idea of STDIO..
|
* Jim's idea of STDIO..
|
||||||
* ---------------------------------------------------------------------------*/
|
* ---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
int Jim_fprintf(Jim_Interp *interp, void *cookie, const char *fmt, ... )
|
int Jim_fprintf(Jim_Interp *interp, void *cookie, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap,fmt);
|
va_start(ap,fmt);
|
||||||
r = Jim_vfprintf(interp, cookie, fmt,ap );
|
r = Jim_vfprintf(interp, cookie, fmt,ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Jim_vfprintf(Jim_Interp *interp, void *cookie, const char *fmt, va_list ap )
|
int Jim_vfprintf(Jim_Interp *interp, void *cookie, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
if ((interp == NULL) || (interp->cb_vfprintf == NULL) ){
|
if ((interp == NULL) || (interp->cb_vfprintf == NULL)){
|
||||||
errno = ENOTSUP;
|
errno = ENOTSUP;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return (*(interp->cb_vfprintf))(cookie, fmt, ap );
|
return (*(interp->cb_vfprintf))(cookie, fmt, ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t Jim_fwrite(Jim_Interp *interp, const void *ptr, size_t size, size_t n, void *cookie )
|
size_t Jim_fwrite(Jim_Interp *interp, const void *ptr, size_t size, size_t n, void *cookie)
|
||||||
{
|
{
|
||||||
if ((interp == NULL) || (interp->cb_fwrite == NULL) ){
|
if ((interp == NULL) || (interp->cb_fwrite == NULL)){
|
||||||
errno = ENOTSUP;
|
errno = ENOTSUP;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return (*(interp->cb_fwrite))(ptr, size, n, cookie);
|
return (*(interp->cb_fwrite))(ptr, size, n, cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t Jim_fread(Jim_Interp *interp, void *ptr, size_t size, size_t n, void *cookie )
|
size_t Jim_fread(Jim_Interp *interp, void *ptr, size_t size, size_t n, void *cookie)
|
||||||
{
|
{
|
||||||
if ((interp == NULL) || (interp->cb_fread == NULL) ){
|
if ((interp == NULL) || (interp->cb_fread == NULL)){
|
||||||
errno = ENOTSUP;
|
errno = ENOTSUP;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return (*(interp->cb_fread))(ptr, size, n, cookie);
|
return (*(interp->cb_fread))(ptr, size, n, cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Jim_fflush(Jim_Interp *interp, void *cookie )
|
int Jim_fflush(Jim_Interp *interp, void *cookie)
|
||||||
{
|
{
|
||||||
if ((interp == NULL) || (interp->cb_fflush == NULL) ){
|
if ((interp == NULL) || (interp->cb_fflush == NULL)){
|
||||||
/* pretend all is well */
|
/* pretend all is well */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return (*(interp->cb_fflush))(cookie );
|
return (*(interp->cb_fflush))(cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* Jim_fgets(Jim_Interp *interp, char *s, int size, void *cookie )
|
char* Jim_fgets(Jim_Interp *interp, char *s, int size, void *cookie)
|
||||||
{
|
{
|
||||||
if ((interp == NULL) || (interp->cb_fgets == NULL) ){
|
if ((interp == NULL) || (interp->cb_fgets == NULL)){
|
||||||
errno = ENOTSUP;
|
errno = ENOTSUP;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return (*(interp->cb_fgets))(s, size, cookie );
|
return (*(interp->cb_fgets))(s, size, cookie);
|
||||||
}
|
}
|
||||||
Jim_Nvp *
|
Jim_Nvp *
|
||||||
Jim_Nvp_name2value_simple(const Jim_Nvp *p, const char *name )
|
Jim_Nvp_name2value_simple(const Jim_Nvp *p, const char *name)
|
||||||
{
|
{
|
||||||
while (p->name ){
|
while (p->name){
|
||||||
if (0 == strcmp(name, p->name ) ){
|
if (0 == strcmp(name, p->name)){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
|
@ -12467,10 +12467,10 @@ Jim_Nvp_name2value_simple(const Jim_Nvp *p, const char *name )
|
||||||
}
|
}
|
||||||
|
|
||||||
Jim_Nvp *
|
Jim_Nvp *
|
||||||
Jim_Nvp_name2value_nocase_simple(const Jim_Nvp *p, const char *name )
|
Jim_Nvp_name2value_nocase_simple(const Jim_Nvp *p, const char *name)
|
||||||
{
|
{
|
||||||
while (p->name ){
|
while (p->name){
|
||||||
if (0 == strcasecmp(name, p->name ) ){
|
if (0 == strcasecmp(name, p->name)){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
|
@ -12482,9 +12482,9 @@ int
|
||||||
Jim_Nvp_name2value_obj(Jim_Interp *interp,
|
Jim_Nvp_name2value_obj(Jim_Interp *interp,
|
||||||
const Jim_Nvp *p,
|
const Jim_Nvp *p,
|
||||||
Jim_Obj *o,
|
Jim_Obj *o,
|
||||||
Jim_Nvp **result )
|
Jim_Nvp **result)
|
||||||
{
|
{
|
||||||
return Jim_Nvp_name2value(interp, p, Jim_GetString(o, NULL ), result );
|
return Jim_Nvp_name2value(interp, p, Jim_GetString(o, NULL), result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12496,15 +12496,15 @@ Jim_Nvp_name2value(Jim_Interp *interp,
|
||||||
{
|
{
|
||||||
const Jim_Nvp *p;
|
const Jim_Nvp *p;
|
||||||
|
|
||||||
p = Jim_Nvp_name2value_simple(_p, name );
|
p = Jim_Nvp_name2value_simple(_p, name);
|
||||||
|
|
||||||
/* result */
|
/* result */
|
||||||
if (result ){
|
if (result){
|
||||||
*result = (Jim_Nvp *)(p);
|
*result = (Jim_Nvp *)(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* found? */
|
/* found? */
|
||||||
if (p->name ){
|
if (p->name){
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
} else {
|
} else {
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
|
@ -12512,23 +12512,23 @@ Jim_Nvp_name2value(Jim_Interp *interp,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_Nvp_name2value_obj_nocase(Jim_Interp *interp, const Jim_Nvp *p, Jim_Obj *o, Jim_Nvp **puthere )
|
Jim_Nvp_name2value_obj_nocase(Jim_Interp *interp, const Jim_Nvp *p, Jim_Obj *o, Jim_Nvp **puthere)
|
||||||
{
|
{
|
||||||
return Jim_Nvp_name2value_nocase(interp, p, Jim_GetString(o, NULL ), puthere );
|
return Jim_Nvp_name2value_nocase(interp, p, Jim_GetString(o, NULL), puthere);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_Nvp_name2value_nocase(Jim_Interp *interp, const Jim_Nvp *_p, const char *name, Jim_Nvp **puthere )
|
Jim_Nvp_name2value_nocase(Jim_Interp *interp, const Jim_Nvp *_p, const char *name, Jim_Nvp **puthere)
|
||||||
{
|
{
|
||||||
const Jim_Nvp *p;
|
const Jim_Nvp *p;
|
||||||
|
|
||||||
p = Jim_Nvp_name2value_nocase_simple(_p, name );
|
p = Jim_Nvp_name2value_nocase_simple(_p, name);
|
||||||
|
|
||||||
if (puthere ){
|
if (puthere){
|
||||||
*puthere = (Jim_Nvp *)(p);
|
*puthere = (Jim_Nvp *)(p);
|
||||||
}
|
}
|
||||||
/* found */
|
/* found */
|
||||||
if (p->name ){
|
if (p->name){
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
} else {
|
} else {
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
|
@ -12537,24 +12537,24 @@ Jim_Nvp_name2value_nocase(Jim_Interp *interp, const Jim_Nvp *_p, const char *nam
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_Nvp_value2name_obj(Jim_Interp *interp, const Jim_Nvp *p, Jim_Obj *o, Jim_Nvp **result )
|
Jim_Nvp_value2name_obj(Jim_Interp *interp, const Jim_Nvp *p, Jim_Obj *o, Jim_Nvp **result)
|
||||||
{
|
{
|
||||||
int e;;
|
int e;;
|
||||||
jim_wide w;
|
jim_wide w;
|
||||||
|
|
||||||
e = Jim_GetWide(interp, o, &w );
|
e = Jim_GetWide(interp, o, &w);
|
||||||
if (e != JIM_OK ){
|
if (e != JIM_OK){
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Jim_Nvp_value2name(interp, p, w, result );
|
return Jim_Nvp_value2name(interp, p, w, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
Jim_Nvp *
|
Jim_Nvp *
|
||||||
Jim_Nvp_value2name_simple(const Jim_Nvp *p, int value )
|
Jim_Nvp_value2name_simple(const Jim_Nvp *p, int value)
|
||||||
{
|
{
|
||||||
while (p->name ){
|
while (p->name){
|
||||||
if (value == p->value ){
|
if (value == p->value){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
|
@ -12564,17 +12564,17 @@ Jim_Nvp_value2name_simple(const Jim_Nvp *p, int value )
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_Nvp_value2name(Jim_Interp *interp, const Jim_Nvp *_p, int value, Jim_Nvp **result )
|
Jim_Nvp_value2name(Jim_Interp *interp, const Jim_Nvp *_p, int value, Jim_Nvp **result)
|
||||||
{
|
{
|
||||||
const Jim_Nvp *p;
|
const Jim_Nvp *p;
|
||||||
|
|
||||||
p = Jim_Nvp_value2name_simple(_p, value );
|
p = Jim_Nvp_value2name_simple(_p, value);
|
||||||
|
|
||||||
if (result ){
|
if (result){
|
||||||
*result = (Jim_Nvp *)(p);
|
*result = (Jim_Nvp *)(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->name ){
|
if (p->name){
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
} else {
|
} else {
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
|
@ -12585,7 +12585,7 @@ Jim_Nvp_value2name(Jim_Interp *interp, const Jim_Nvp *_p, int value, Jim_Nvp **r
|
||||||
int
|
int
|
||||||
Jim_GetOpt_Setup(Jim_GetOptInfo *p, Jim_Interp *interp, int argc, Jim_Obj * const * argv)
|
Jim_GetOpt_Setup(Jim_GetOptInfo *p, Jim_Interp *interp, int argc, Jim_Obj * const * argv)
|
||||||
{
|
{
|
||||||
memset(p, 0, sizeof(*p) );
|
memset(p, 0, sizeof(*p));
|
||||||
p->interp = interp;
|
p->interp = interp;
|
||||||
p->argc = argc;
|
p->argc = argc;
|
||||||
p->argv = argv;
|
p->argv = argv;
|
||||||
|
@ -12594,37 +12594,37 @@ Jim_GetOpt_Setup(Jim_GetOptInfo *p, Jim_Interp *interp, int argc, Jim_Obj * cons
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Jim_GetOpt_Debug(Jim_GetOptInfo *p )
|
Jim_GetOpt_Debug(Jim_GetOptInfo *p)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
Jim_fprintf(p->interp, p->interp->cookie_stderr, "---args---\n");
|
Jim_fprintf(p->interp, p->interp->cookie_stderr, "---args---\n");
|
||||||
for (x = 0 ; x < p->argc ; x++ ){
|
for (x = 0 ; x < p->argc ; x++){
|
||||||
Jim_fprintf(p->interp, p->interp->cookie_stderr,
|
Jim_fprintf(p->interp, p->interp->cookie_stderr,
|
||||||
"%2d) %s\n",
|
"%2d) %s\n",
|
||||||
x,
|
x,
|
||||||
Jim_GetString(p->argv[x], NULL ) );
|
Jim_GetString(p->argv[x], NULL));
|
||||||
}
|
}
|
||||||
Jim_fprintf(p->interp, p->interp->cookie_stderr, "-------\n");
|
Jim_fprintf(p->interp, p->interp->cookie_stderr, "-------\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_GetOpt_Obj(Jim_GetOptInfo *goi, Jim_Obj **puthere )
|
Jim_GetOpt_Obj(Jim_GetOptInfo *goi, Jim_Obj **puthere)
|
||||||
{
|
{
|
||||||
Jim_Obj *o;
|
Jim_Obj *o;
|
||||||
|
|
||||||
o = NULL; // failure
|
o = NULL; // failure
|
||||||
if (goi->argc ){
|
if (goi->argc){
|
||||||
// success
|
// success
|
||||||
o = goi->argv[0];
|
o = goi->argv[0];
|
||||||
goi->argc -= 1;
|
goi->argc -= 1;
|
||||||
goi->argv += 1;
|
goi->argv += 1;
|
||||||
}
|
}
|
||||||
if (puthere ){
|
if (puthere){
|
||||||
*puthere = o;
|
*puthere = o;
|
||||||
}
|
}
|
||||||
if (o != NULL ){
|
if (o != NULL){
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
} else {
|
} else {
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
|
@ -12632,17 +12632,17 @@ Jim_GetOpt_Obj(Jim_GetOptInfo *goi, Jim_Obj **puthere )
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_GetOpt_String(Jim_GetOptInfo *goi, char **puthere, int *len )
|
Jim_GetOpt_String(Jim_GetOptInfo *goi, char **puthere, int *len)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
Jim_Obj *o;
|
Jim_Obj *o;
|
||||||
const char *cp;
|
const char *cp;
|
||||||
|
|
||||||
|
|
||||||
r = Jim_GetOpt_Obj(goi, &o );
|
r = Jim_GetOpt_Obj(goi, &o);
|
||||||
if (r == JIM_OK ){
|
if (r == JIM_OK){
|
||||||
cp = Jim_GetString(o, len );
|
cp = Jim_GetString(o, len);
|
||||||
if (puthere ){
|
if (puthere){
|
||||||
/* remove const */
|
/* remove const */
|
||||||
*puthere = (char *)(cp);
|
*puthere = (char *)(cp);
|
||||||
}
|
}
|
||||||
|
@ -12651,42 +12651,42 @@ Jim_GetOpt_String(Jim_GetOptInfo *goi, char **puthere, int *len )
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_GetOpt_Double(Jim_GetOptInfo *goi, double *puthere )
|
Jim_GetOpt_Double(Jim_GetOptInfo *goi, double *puthere)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
Jim_Obj *o;
|
Jim_Obj *o;
|
||||||
double _safe;
|
double _safe;
|
||||||
|
|
||||||
if (puthere == NULL ){
|
if (puthere == NULL){
|
||||||
puthere = &_safe;
|
puthere = &_safe;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = Jim_GetOpt_Obj(goi, &o );
|
r = Jim_GetOpt_Obj(goi, &o);
|
||||||
if (r == JIM_OK ){
|
if (r == JIM_OK){
|
||||||
r = Jim_GetDouble(goi->interp, o, puthere );
|
r = Jim_GetDouble(goi->interp, o, puthere);
|
||||||
if (r != JIM_OK ){
|
if (r != JIM_OK){
|
||||||
Jim_SetResult_sprintf(goi->interp,
|
Jim_SetResult_sprintf(goi->interp,
|
||||||
"not a number: %s",
|
"not a number: %s",
|
||||||
Jim_GetString(o, NULL ) );
|
Jim_GetString(o, NULL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_GetOpt_Wide(Jim_GetOptInfo *goi, jim_wide *puthere )
|
Jim_GetOpt_Wide(Jim_GetOptInfo *goi, jim_wide *puthere)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
Jim_Obj *o;
|
Jim_Obj *o;
|
||||||
jim_wide _safe;
|
jim_wide _safe;
|
||||||
|
|
||||||
if (puthere == NULL ){
|
if (puthere == NULL){
|
||||||
puthere = &_safe;
|
puthere = &_safe;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = Jim_GetOpt_Obj(goi, &o );
|
r = Jim_GetOpt_Obj(goi, &o);
|
||||||
if (r == JIM_OK ){
|
if (r == JIM_OK){
|
||||||
r = Jim_GetWide(goi->interp, o, puthere );
|
r = Jim_GetWide(goi->interp, o, puthere);
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -12699,16 +12699,16 @@ int Jim_GetOpt_Nvp(Jim_GetOptInfo *goi,
|
||||||
Jim_Obj *o;
|
Jim_Obj *o;
|
||||||
int e;
|
int e;
|
||||||
|
|
||||||
if (puthere == NULL ){
|
if (puthere == NULL){
|
||||||
puthere = &_safe;
|
puthere = &_safe;
|
||||||
}
|
}
|
||||||
|
|
||||||
e = Jim_GetOpt_Obj(goi, &o );
|
e = Jim_GetOpt_Obj(goi, &o);
|
||||||
if (e == JIM_OK ){
|
if (e == JIM_OK){
|
||||||
e = Jim_Nvp_name2value_obj(goi->interp,
|
e = Jim_Nvp_name2value_obj(goi->interp,
|
||||||
nvp,
|
nvp,
|
||||||
o,
|
o,
|
||||||
puthere );
|
puthere);
|
||||||
}
|
}
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
|
@ -12717,18 +12717,18 @@ int Jim_GetOpt_Nvp(Jim_GetOptInfo *goi,
|
||||||
void
|
void
|
||||||
Jim_GetOpt_NvpUnknown(Jim_GetOptInfo *goi,
|
Jim_GetOpt_NvpUnknown(Jim_GetOptInfo *goi,
|
||||||
const Jim_Nvp *nvptable,
|
const Jim_Nvp *nvptable,
|
||||||
int hadprefix )
|
int hadprefix)
|
||||||
{
|
{
|
||||||
if (hadprefix ){
|
if (hadprefix){
|
||||||
Jim_SetResult_NvpUnknown(goi->interp,
|
Jim_SetResult_NvpUnknown(goi->interp,
|
||||||
goi->argv[-2],
|
goi->argv[-2],
|
||||||
goi->argv[-1],
|
goi->argv[-1],
|
||||||
nvptable );
|
nvptable);
|
||||||
} else {
|
} else {
|
||||||
Jim_SetResult_NvpUnknown(goi->interp,
|
Jim_SetResult_NvpUnknown(goi->interp,
|
||||||
NULL,
|
NULL,
|
||||||
goi->argv[-1],
|
goi->argv[-1],
|
||||||
nvptable );
|
nvptable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12742,17 +12742,17 @@ Jim_GetOpt_Enum(Jim_GetOptInfo *goi,
|
||||||
Jim_Obj *o;
|
Jim_Obj *o;
|
||||||
int e;
|
int e;
|
||||||
|
|
||||||
if (puthere == NULL ){
|
if (puthere == NULL){
|
||||||
puthere = &_safe;
|
puthere = &_safe;
|
||||||
}
|
}
|
||||||
e = Jim_GetOpt_Obj(goi, &o );
|
e = Jim_GetOpt_Obj(goi, &o);
|
||||||
if (e == JIM_OK ){
|
if (e == JIM_OK){
|
||||||
e = Jim_GetEnum(goi->interp,
|
e = Jim_GetEnum(goi->interp,
|
||||||
o,
|
o,
|
||||||
lookup,
|
lookup,
|
||||||
puthere,
|
puthere,
|
||||||
"option",
|
"option",
|
||||||
JIM_ERRMSG );
|
JIM_ERRMSG);
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -12760,16 +12760,16 @@ Jim_GetOpt_Enum(Jim_GetOptInfo *goi,
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Jim_SetResult_sprintf(Jim_Interp *interp, const char *fmt,... )
|
Jim_SetResult_sprintf(Jim_Interp *interp, const char *fmt,...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
va_start(ap,fmt);
|
va_start(ap,fmt);
|
||||||
buf = jim_vasprintf(fmt, ap );
|
buf = jim_vasprintf(fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
if (buf ){
|
if (buf){
|
||||||
Jim_SetResultString(interp, buf, -1 );
|
Jim_SetResultString(interp, buf, -1);
|
||||||
jim_vasprintf_done(buf);
|
jim_vasprintf_done(buf);
|
||||||
}
|
}
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
|
@ -12780,23 +12780,23 @@ void
|
||||||
Jim_SetResult_NvpUnknown(Jim_Interp *interp,
|
Jim_SetResult_NvpUnknown(Jim_Interp *interp,
|
||||||
Jim_Obj *param_name,
|
Jim_Obj *param_name,
|
||||||
Jim_Obj *param_value,
|
Jim_Obj *param_value,
|
||||||
const Jim_Nvp *nvp )
|
const Jim_Nvp *nvp)
|
||||||
{
|
{
|
||||||
if (param_name ){
|
if (param_name){
|
||||||
Jim_SetResult_sprintf(interp,
|
Jim_SetResult_sprintf(interp,
|
||||||
"%s: Unknown: %s, try one of: ",
|
"%s: Unknown: %s, try one of: ",
|
||||||
Jim_GetString(param_name, NULL ),
|
Jim_GetString(param_name, NULL),
|
||||||
Jim_GetString(param_value, NULL ) );
|
Jim_GetString(param_value, NULL));
|
||||||
} else {
|
} else {
|
||||||
Jim_SetResult_sprintf(interp,
|
Jim_SetResult_sprintf(interp,
|
||||||
"Unknown param: %s, try one of: ",
|
"Unknown param: %s, try one of: ",
|
||||||
Jim_GetString(param_value, NULL ) );
|
Jim_GetString(param_value, NULL));
|
||||||
}
|
}
|
||||||
while (nvp->name ){
|
while (nvp->name){
|
||||||
const char *a;
|
const char *a;
|
||||||
const char *b;
|
const char *b;
|
||||||
|
|
||||||
if ((nvp + 1)->name ){
|
if ((nvp + 1)->name){
|
||||||
a = nvp->name;
|
a = nvp->name;
|
||||||
b = ", ";
|
b = ", ";
|
||||||
} else {
|
} else {
|
||||||
|
@ -12805,7 +12805,7 @@ Jim_SetResult_NvpUnknown(Jim_Interp *interp,
|
||||||
}
|
}
|
||||||
Jim_AppendStrings(interp,
|
Jim_AppendStrings(interp,
|
||||||
Jim_GetResult(interp),
|
Jim_GetResult(interp),
|
||||||
a, b, NULL );
|
a, b, NULL);
|
||||||
nvp++;
|
nvp++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12814,22 +12814,22 @@ Jim_SetResult_NvpUnknown(Jim_Interp *interp,
|
||||||
static Jim_Obj *debug_string_obj;
|
static Jim_Obj *debug_string_obj;
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
Jim_Debug_ArgvString(Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
Jim_Debug_ArgvString(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
if (debug_string_obj ){
|
if (debug_string_obj){
|
||||||
Jim_FreeObj(interp, debug_string_obj );
|
Jim_FreeObj(interp, debug_string_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_string_obj = Jim_NewEmptyStringObj(interp );
|
debug_string_obj = Jim_NewEmptyStringObj(interp);
|
||||||
for (x = 0 ; x < argc ; x++ ){
|
for (x = 0 ; x < argc ; x++){
|
||||||
Jim_AppendStrings(interp,
|
Jim_AppendStrings(interp,
|
||||||
debug_string_obj,
|
debug_string_obj,
|
||||||
Jim_GetString(argv[x], NULL ),
|
Jim_GetString(argv[x], NULL),
|
||||||
" ",
|
" ",
|
||||||
NULL );
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Jim_GetString(debug_string_obj, NULL );
|
return Jim_GetString(debug_string_obj, NULL);
|
||||||
}
|
}
|
||||||
|
|
140
src/helper/jim.h
140
src/helper/jim.h
|
@ -530,11 +530,11 @@ typedef struct Jim_Interp {
|
||||||
void *cookie_stdin; /* input file pointer, 'stdin' by default */
|
void *cookie_stdin; /* input file pointer, 'stdin' by default */
|
||||||
void *cookie_stdout; /* output file pointer, 'stdout' by default */
|
void *cookie_stdout; /* output file pointer, 'stdout' by default */
|
||||||
void *cookie_stderr; /* errors file pointer, 'stderr' by default */
|
void *cookie_stderr; /* errors file pointer, 'stderr' by default */
|
||||||
size_t (*cb_fwrite )(const void *ptr, size_t size, size_t n, void *cookie );
|
size_t (*cb_fwrite)(const void *ptr, size_t size, size_t n, void *cookie);
|
||||||
size_t (*cb_fread )(void *ptr, size_t size, size_t n, void *cookie );
|
size_t (*cb_fread)(void *ptr, size_t size, size_t n, void *cookie);
|
||||||
int (*cb_vfprintf)(void *cookie, const char *fmt, va_list ap );
|
int (*cb_vfprintf)(void *cookie, const char *fmt, va_list ap);
|
||||||
int (*cb_fflush )(void *cookie );
|
int (*cb_fflush)(void *cookie);
|
||||||
char *(*cb_fgets )(char *s, int size, void *cookie );
|
char *(*cb_fgets)(char *s, int size, void *cookie);
|
||||||
} Jim_Interp;
|
} Jim_Interp;
|
||||||
|
|
||||||
/* Currently provided as macro that performs the increment.
|
/* Currently provided as macro that performs the increment.
|
||||||
|
@ -591,11 +591,11 @@ typedef struct Jim_Reference {
|
||||||
* };
|
* };
|
||||||
*
|
*
|
||||||
* Jim_Nvp *result
|
* Jim_Nvp *result
|
||||||
* e = Jim_Nvp_name2value(interp, yn, "y", &result );
|
* e = Jim_Nvp_name2value(interp, yn, "y", &result);
|
||||||
* returns &yn[0];
|
* returns &yn[0];
|
||||||
* e = Jim_Nvp_name2value(interp, yn, "n", &result );
|
* e = Jim_Nvp_name2value(interp, yn, "n", &result);
|
||||||
* returns &yn[1];
|
* returns &yn[1];
|
||||||
* e = Jim_Nvp_name2value(interp, yn, "Blah", &result );
|
* e = Jim_Nvp_name2value(interp, yn, "Blah", &result);
|
||||||
* returns &yn[4];
|
* returns &yn[4];
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
|
@ -629,7 +629,7 @@ typedef struct {
|
||||||
|
|
||||||
#ifdef DOXYGEN
|
#ifdef DOXYGEN
|
||||||
#define JIM_STATIC
|
#define JIM_STATIC
|
||||||
#define JIM_API(X ) X
|
#define JIM_API(X) X
|
||||||
#else
|
#else
|
||||||
#ifndef __JIM_CORE__
|
#ifndef __JIM_CORE__
|
||||||
# if defined JIM_EMBEDDED
|
# if defined JIM_EMBEDDED
|
||||||
|
@ -650,7 +650,7 @@ typedef struct {
|
||||||
#endif /* DOXYGEN */
|
#endif /* DOXYGEN */
|
||||||
|
|
||||||
/** Set the result - printf() style */
|
/** Set the result - printf() style */
|
||||||
JIM_STATIC int JIM_API(Jim_SetResult_sprintf )(Jim_Interp *p, const char *fmt, ... );
|
JIM_STATIC int JIM_API(Jim_SetResult_sprintf)(Jim_Interp *p, const char *fmt, ...);
|
||||||
|
|
||||||
/* Memory allocation */
|
/* Memory allocation */
|
||||||
JIM_STATIC void * JIM_API(Jim_Alloc) (int size);
|
JIM_STATIC void * JIM_API(Jim_Alloc) (int size);
|
||||||
|
@ -660,7 +660,7 @@ JIM_STATIC char * JIM_API(Jim_StrDup) (const char *s);
|
||||||
/* evaluation */
|
/* evaluation */
|
||||||
JIM_STATIC int JIM_API(Jim_Eval)(Jim_Interp *interp, const char *script);
|
JIM_STATIC int JIM_API(Jim_Eval)(Jim_Interp *interp, const char *script);
|
||||||
/* in C code, you can do this and get better error messages */
|
/* in C code, you can do this and get better error messages */
|
||||||
/* Jim_Eval_Named(interp, "some tcl commands", __FILE__, __LINE__ ); */
|
/* Jim_Eval_Named(interp, "some tcl commands", __FILE__, __LINE__); */
|
||||||
JIM_STATIC int JIM_API(Jim_Eval_Named)(Jim_Interp *interp, const char *script,const char *filename, int lineno);
|
JIM_STATIC int JIM_API(Jim_Eval_Named)(Jim_Interp *interp, const char *script,const char *filename, int lineno);
|
||||||
JIM_STATIC int JIM_API(Jim_EvalGlobal)(Jim_Interp *interp, const char *script);
|
JIM_STATIC int JIM_API(Jim_EvalGlobal)(Jim_Interp *interp, const char *script);
|
||||||
JIM_STATIC int JIM_API(Jim_EvalFile)(Jim_Interp *interp, const char *filename);
|
JIM_STATIC int JIM_API(Jim_EvalFile)(Jim_Interp *interp, const char *filename);
|
||||||
|
@ -721,7 +721,7 @@ JIM_STATIC Jim_Obj * JIM_API(Jim_NewStringObjNoAlloc) (Jim_Interp *interp,
|
||||||
JIM_STATIC void JIM_API(Jim_AppendString) (Jim_Interp *interp, Jim_Obj *objPtr,
|
JIM_STATIC void JIM_API(Jim_AppendString) (Jim_Interp *interp, Jim_Obj *objPtr,
|
||||||
const char *str, int len);
|
const char *str, int len);
|
||||||
JIM_STATIC void JIM_API(Jim_AppendString_sprintf) (Jim_Interp *interp, Jim_Obj *objPtr,
|
JIM_STATIC void JIM_API(Jim_AppendString_sprintf) (Jim_Interp *interp, Jim_Obj *objPtr,
|
||||||
const char *fmt, ... );
|
const char *fmt, ...);
|
||||||
JIM_STATIC void JIM_API(Jim_AppendObj) (Jim_Interp *interp, Jim_Obj *objPtr,
|
JIM_STATIC void JIM_API(Jim_AppendObj) (Jim_Interp *interp, Jim_Obj *objPtr,
|
||||||
Jim_Obj *appendObjPtr);
|
Jim_Obj *appendObjPtr);
|
||||||
JIM_STATIC void JIM_API(Jim_AppendStrings) (Jim_Interp *interp,
|
JIM_STATIC void JIM_API(Jim_AppendStrings) (Jim_Interp *interp,
|
||||||
|
@ -911,31 +911,31 @@ JIM_STATIC int JIM_API(Jim_InteractivePrompt) (Jim_Interp *interp);
|
||||||
JIM_STATIC void JIM_API(Jim_Panic) (Jim_Interp *interp, const char *fmt, ...);
|
JIM_STATIC void JIM_API(Jim_Panic) (Jim_Interp *interp, const char *fmt, ...);
|
||||||
|
|
||||||
/* Jim's STDIO */
|
/* Jim's STDIO */
|
||||||
JIM_STATIC int JIM_API(Jim_fprintf )(Jim_Interp *interp, void *cookie, const char *fmt, ... );
|
JIM_STATIC int JIM_API(Jim_fprintf)(Jim_Interp *interp, void *cookie, const char *fmt, ...);
|
||||||
JIM_STATIC int JIM_API(Jim_vfprintf )(Jim_Interp *interp, void *cookie, const char *fmt, va_list ap );
|
JIM_STATIC int JIM_API(Jim_vfprintf)(Jim_Interp *interp, void *cookie, const char *fmt, va_list ap);
|
||||||
JIM_STATIC size_t JIM_API(Jim_fwrite )(Jim_Interp *interp, const void *ptr, size_t size, size_t nmeb, void *cookie );
|
JIM_STATIC size_t JIM_API(Jim_fwrite)(Jim_Interp *interp, const void *ptr, size_t size, size_t nmeb, void *cookie);
|
||||||
JIM_STATIC size_t JIM_API(Jim_fread )(Jim_Interp *interp, void *ptr, size_t size, size_t nmeb, void *cookie );
|
JIM_STATIC size_t JIM_API(Jim_fread)(Jim_Interp *interp, void *ptr, size_t size, size_t nmeb, void *cookie);
|
||||||
JIM_STATIC int JIM_API(Jim_fflush )(Jim_Interp *interp, void *cookie );
|
JIM_STATIC int JIM_API(Jim_fflush)(Jim_Interp *interp, void *cookie);
|
||||||
JIM_STATIC char * JIM_API(Jim_fgets )(Jim_Interp *interp, char *s, int size, void *cookie );
|
JIM_STATIC char * JIM_API(Jim_fgets)(Jim_Interp *interp, char *s, int size, void *cookie);
|
||||||
|
|
||||||
/* Name Value Pairs Operations */
|
/* Name Value Pairs Operations */
|
||||||
JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_name2value_simple)(const Jim_Nvp *nvp_table, const char *name );
|
JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_name2value_simple)(const Jim_Nvp *nvp_table, const char *name);
|
||||||
JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_name2value_nocase_simple)(const Jim_Nvp *nvp_table, const char *name );
|
JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_name2value_nocase_simple)(const Jim_Nvp *nvp_table, const char *name);
|
||||||
JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_value2name_simple)(const Jim_Nvp *nvp_table, int v );
|
JIM_STATIC Jim_Nvp *JIM_API(Jim_Nvp_value2name_simple)(const Jim_Nvp *nvp_table, int v);
|
||||||
|
|
||||||
JIM_STATIC int JIM_API(Jim_Nvp_name2value)(Jim_Interp *interp, const Jim_Nvp *nvp_table, const char *name, Jim_Nvp **result );
|
JIM_STATIC int JIM_API(Jim_Nvp_name2value)(Jim_Interp *interp, const Jim_Nvp *nvp_table, const char *name, Jim_Nvp **result);
|
||||||
JIM_STATIC int JIM_API(Jim_Nvp_name2value_nocase)(Jim_Interp *interp, const Jim_Nvp *nvp_table, const char *name, Jim_Nvp **result);
|
JIM_STATIC int JIM_API(Jim_Nvp_name2value_nocase)(Jim_Interp *interp, const Jim_Nvp *nvp_table, const char *name, Jim_Nvp **result);
|
||||||
JIM_STATIC int JIM_API(Jim_Nvp_value2name)(Jim_Interp *interp, const Jim_Nvp *nvp_table, int value, Jim_Nvp **result );
|
JIM_STATIC int JIM_API(Jim_Nvp_value2name)(Jim_Interp *interp, const Jim_Nvp *nvp_table, int value, Jim_Nvp **result);
|
||||||
|
|
||||||
JIM_STATIC int JIM_API(Jim_Nvp_name2value_obj)(Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *name_obj, Jim_Nvp **result );
|
JIM_STATIC int JIM_API(Jim_Nvp_name2value_obj)(Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *name_obj, Jim_Nvp **result);
|
||||||
JIM_STATIC int JIM_API(Jim_Nvp_name2value_obj_nocase)(Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *name_obj, Jim_Nvp **result );
|
JIM_STATIC int JIM_API(Jim_Nvp_name2value_obj_nocase)(Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *name_obj, Jim_Nvp **result);
|
||||||
JIM_STATIC int JIM_API(Jim_Nvp_value2name_obj)(Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *value_obj, Jim_Nvp **result );
|
JIM_STATIC int JIM_API(Jim_Nvp_value2name_obj)(Jim_Interp *interp, const Jim_Nvp *nvp_table, Jim_Obj *value_obj, Jim_Nvp **result);
|
||||||
|
|
||||||
/** prints a nice 'unknown' parameter error message to the 'result' */
|
/** prints a nice 'unknown' parameter error message to the 'result' */
|
||||||
JIM_STATIC void JIM_API(Jim_SetResult_NvpUnknown)(Jim_Interp *interp,
|
JIM_STATIC void JIM_API(Jim_SetResult_NvpUnknown)(Jim_Interp *interp,
|
||||||
Jim_Obj *param_name,
|
Jim_Obj *param_name,
|
||||||
Jim_Obj *param_value,
|
Jim_Obj *param_value,
|
||||||
const Jim_Nvp *nvp_table );
|
const Jim_Nvp *nvp_table);
|
||||||
|
|
||||||
|
|
||||||
/** Debug: convert argc/argv into a printable string for printf() debug
|
/** Debug: convert argc/argv into a printable string for printf() debug
|
||||||
|
@ -950,12 +950,12 @@ JIM_STATIC void JIM_API(Jim_SetResult_NvpUnknown)(Jim_Interp *interp,
|
||||||
*
|
*
|
||||||
* For example might want do this:
|
* For example might want do this:
|
||||||
* \code
|
* \code
|
||||||
* fp = fopen("some.file.log", "a" );
|
* fp = fopen("some.file.log", "a");
|
||||||
* fprintf(fp, "PARAMS are: %s\n", Jim_DebugArgvString(interp, argc, argv ) );
|
* fprintf(fp, "PARAMS are: %s\n", Jim_DebugArgvString(interp, argc, argv));
|
||||||
* fclose(fp);
|
* fclose(fp);
|
||||||
* \endcode
|
* \endcode
|
||||||
*/
|
*/
|
||||||
JIM_STATIC const char *JIM_API(Jim_Debug_ArgvString )(Jim_Interp *interp, int argc, Jim_Obj *const *argv );
|
JIM_STATIC const char *JIM_API(Jim_Debug_ArgvString)(Jim_Interp *interp, int argc, Jim_Obj *const *argv);
|
||||||
|
|
||||||
|
|
||||||
/** A TCL -ish GetOpt like code.
|
/** A TCL -ish GetOpt like code.
|
||||||
|
@ -983,33 +983,33 @@ typedef struct jim_getopt {
|
||||||
* \code
|
* \code
|
||||||
* Jim_GetOptInfo goi;
|
* Jim_GetOptInfo goi;
|
||||||
*
|
*
|
||||||
* Jim_GetOpt_Setup(&goi, interp, argc, argv );
|
* Jim_GetOpt_Setup(&goi, interp, argc, argv);
|
||||||
*
|
*
|
||||||
* while (goi.argc ){
|
* while (goi.argc){
|
||||||
* e = Jim_GetOpt_Nvp(&goi, nvp_options, &n );
|
* e = Jim_GetOpt_Nvp(&goi, nvp_options, &n);
|
||||||
* if (e != JIM_OK ){
|
* if (e != JIM_OK){
|
||||||
* Jim_GetOpt_NvpUnknown(&goi, nvp_options, 0 );
|
* Jim_GetOpt_NvpUnknown(&goi, nvp_options, 0);
|
||||||
* return e;
|
* return e;
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* switch (n->value ){
|
* switch (n->value){
|
||||||
* case ALIVE:
|
* case ALIVE:
|
||||||
* printf("Option ALIVE specified\n");
|
* printf("Option ALIVE specified\n");
|
||||||
* break;
|
* break;
|
||||||
* case FIRST:
|
* case FIRST:
|
||||||
* if (goi.argc < 1 ){
|
* if (goi.argc < 1){
|
||||||
* .. not enough args error ..
|
* .. not enough args error ..
|
||||||
* }
|
* }
|
||||||
* Jim_GetOpt_String(&goi, &cp, NULL );
|
* Jim_GetOpt_String(&goi, &cp, NULL);
|
||||||
* printf("FIRSTNAME: %s\n", cp );
|
* printf("FIRSTNAME: %s\n", cp);
|
||||||
* case AGE:
|
* case AGE:
|
||||||
* Jim_GetOpt_Wide(&goi, &w );
|
* Jim_GetOpt_Wide(&goi, &w);
|
||||||
* printf("AGE: %d\n", (int)(w) );
|
* printf("AGE: %d\n", (int)(w));
|
||||||
* break;
|
* break;
|
||||||
* case POLITICS:
|
* case POLITICS:
|
||||||
* e = Jim_GetOpt_Nvp(&goi, nvp_politics, &n );
|
* e = Jim_GetOpt_Nvp(&goi, nvp_politics, &n);
|
||||||
* if (e != JIM_OK ){
|
* if (e != JIM_OK){
|
||||||
* Jim_GetOpt_NvpUnknown(&goi, nvp_politics, 1 );
|
* Jim_GetOpt_NvpUnknown(&goi, nvp_politics, 1);
|
||||||
* return e;
|
* return e;
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
@ -1029,20 +1029,20 @@ typedef struct jim_getopt {
|
||||||
* \code
|
* \code
|
||||||
* Jim_GetOptInfo goi;
|
* Jim_GetOptInfo goi;
|
||||||
*
|
*
|
||||||
* Jim_GetOptSetup(&goi, interp, argc, argv );
|
* Jim_GetOptSetup(&goi, interp, argc, argv);
|
||||||
* \endcode
|
* \endcode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
JIM_STATIC int JIM_API(Jim_GetOpt_Setup )(Jim_GetOptInfo *goi,
|
JIM_STATIC int JIM_API(Jim_GetOpt_Setup)(Jim_GetOptInfo *goi,
|
||||||
Jim_Interp *interp,
|
Jim_Interp *interp,
|
||||||
int argc,
|
int argc,
|
||||||
Jim_Obj * const * argv );
|
Jim_Obj * const * argv);
|
||||||
|
|
||||||
|
|
||||||
/** Debug - Dump parameters to stderr
|
/** Debug - Dump parameters to stderr
|
||||||
* \param goi - current parameters
|
* \param goi - current parameters
|
||||||
*/
|
*/
|
||||||
JIM_STATIC void JIM_API(Jim_GetOpt_Debug )(Jim_GetOptInfo *goi);
|
JIM_STATIC void JIM_API(Jim_GetOpt_Debug)(Jim_GetOptInfo *goi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1052,7 +1052,7 @@ JIM_STATIC void JIM_API(Jim_GetOpt_Debug )(Jim_GetOptInfo *goi);
|
||||||
* \param puthere - where param is put
|
* \param puthere - where param is put
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JIM_STATIC int JIM_API(Jim_GetOpt_Obj)(Jim_GetOptInfo *goi, Jim_Obj **puthere );
|
JIM_STATIC int JIM_API(Jim_GetOpt_Obj)(Jim_GetOptInfo *goi, Jim_Obj **puthere);
|
||||||
|
|
||||||
/** Remove argv[0] as string.
|
/** Remove argv[0] as string.
|
||||||
*
|
*
|
||||||
|
@ -1060,7 +1060,7 @@ JIM_STATIC int JIM_API(Jim_GetOpt_Obj)(Jim_GetOptInfo *goi, Jim_Obj **puthere );
|
||||||
* \param puthere - where param is put
|
* \param puthere - where param is put
|
||||||
* \param len - return its length
|
* \param len - return its length
|
||||||
*/
|
*/
|
||||||
JIM_STATIC int JIM_API(Jim_GetOpt_String )(Jim_GetOptInfo *goi, char **puthere, int *len );
|
JIM_STATIC int JIM_API(Jim_GetOpt_String)(Jim_GetOptInfo *goi, char **puthere, int *len);
|
||||||
|
|
||||||
/** Remove argv[0] as double.
|
/** Remove argv[0] as double.
|
||||||
*
|
*
|
||||||
|
@ -1068,14 +1068,14 @@ JIM_STATIC int JIM_API(Jim_GetOpt_String )(Jim_GetOptInfo *goi, char **puthere,
|
||||||
* \param puthere - where param is put.
|
* \param puthere - where param is put.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JIM_STATIC int JIM_API(Jim_GetOpt_Double )(Jim_GetOptInfo *goi, double *puthere );
|
JIM_STATIC int JIM_API(Jim_GetOpt_Double)(Jim_GetOptInfo *goi, double *puthere);
|
||||||
|
|
||||||
/** Remove argv[0] as wide.
|
/** Remove argv[0] as wide.
|
||||||
*
|
*
|
||||||
* \param goi - get opt info
|
* \param goi - get opt info
|
||||||
* \param puthere - where param is put.
|
* \param puthere - where param is put.
|
||||||
*/
|
*/
|
||||||
JIM_STATIC int JIM_API(Jim_GetOpt_Wide )(Jim_GetOptInfo *goi, jim_wide *puthere );
|
JIM_STATIC int JIM_API(Jim_GetOpt_Wide)(Jim_GetOptInfo *goi, jim_wide *puthere);
|
||||||
|
|
||||||
/** Remove argv[0] as NVP.
|
/** Remove argv[0] as NVP.
|
||||||
*
|
*
|
||||||
|
@ -1084,7 +1084,7 @@ JIM_STATIC int JIM_API(Jim_GetOpt_Wide )(Jim_GetOptInfo *goi, jim_wide *puthere
|
||||||
* \param puthere - where param is put.
|
* \param puthere - where param is put.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JIM_STATIC int JIM_API(Jim_GetOpt_Nvp)(Jim_GetOptInfo *goi, const Jim_Nvp *lookup, Jim_Nvp **puthere );
|
JIM_STATIC int JIM_API(Jim_GetOpt_Nvp)(Jim_GetOptInfo *goi, const Jim_Nvp *lookup, Jim_Nvp **puthere);
|
||||||
|
|
||||||
/** Create an appropriate error message for an NVP.
|
/** Create an appropriate error message for an NVP.
|
||||||
*
|
*
|
||||||
|
@ -1102,25 +1102,25 @@ JIM_STATIC int JIM_API(Jim_GetOpt_Nvp)(Jim_GetOptInfo *goi, const Jim_Nvp *looku
|
||||||
* Example:
|
* Example:
|
||||||
* \code
|
* \code
|
||||||
*
|
*
|
||||||
* while (goi.argc ){
|
* while (goi.argc){
|
||||||
* // Get the next option
|
* // Get the next option
|
||||||
* e = Jim_GetOpt_Nvp(&goi, cmd_options, &n );
|
* e = Jim_GetOpt_Nvp(&goi, cmd_options, &n);
|
||||||
* if (e != JIM_OK ){
|
* if (e != JIM_OK){
|
||||||
* // option was not recognized
|
* // option was not recognized
|
||||||
* // pass 'hadprefix = 0' because there is no prefix
|
* // pass 'hadprefix = 0' because there is no prefix
|
||||||
* Jim_GetOpt_NvpUnknown(&goi, cmd_options, 0 );
|
* Jim_GetOpt_NvpUnknown(&goi, cmd_options, 0);
|
||||||
* return e;
|
* return e;
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* switch (n->value ){
|
* switch (n->value){
|
||||||
* case OPT_SEX:
|
* case OPT_SEX:
|
||||||
* // handle: --sex male | female | lots | needmore
|
* // handle: --sex male | female | lots | needmore
|
||||||
* e = Jim_GetOpt_Nvp(&goi, &nvp_sex, &n );
|
* e = Jim_GetOpt_Nvp(&goi, &nvp_sex, &n);
|
||||||
* if (e != JIM_OK ){
|
* if (e != JIM_OK){
|
||||||
* Jim_GetOpt_NvpUnknown(&ogi, nvp_sex, 1 );
|
* Jim_GetOpt_NvpUnknown(&ogi, nvp_sex, 1);
|
||||||
* return e;
|
* return e;
|
||||||
* }
|
* }
|
||||||
* printf("Code: (%d) is %s\n", n->value, n->name );
|
* printf("Code: (%d) is %s\n", n->value, n->name);
|
||||||
* break;
|
* break;
|
||||||
* case ...:
|
* case ...:
|
||||||
* [snip]
|
* [snip]
|
||||||
|
@ -1129,7 +1129,7 @@ JIM_STATIC int JIM_API(Jim_GetOpt_Nvp)(Jim_GetOptInfo *goi, const Jim_Nvp *looku
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JIM_STATIC void JIM_API(Jim_GetOpt_NvpUnknown)(Jim_GetOptInfo *goi, const Jim_Nvp *lookup, int hadprefix );
|
JIM_STATIC void JIM_API(Jim_GetOpt_NvpUnknown)(Jim_GetOptInfo *goi, const Jim_Nvp *lookup, int hadprefix);
|
||||||
|
|
||||||
|
|
||||||
/** Remove argv[0] as Enum
|
/** Remove argv[0] as Enum
|
||||||
|
@ -1139,7 +1139,7 @@ JIM_STATIC void JIM_API(Jim_GetOpt_NvpUnknown)(Jim_GetOptInfo *goi, const Jim_Nv
|
||||||
* \param puthere - where param is put.
|
* \param puthere - where param is put.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JIM_STATIC int JIM_API(Jim_GetOpt_Enum)(Jim_GetOptInfo *goi, const char * const * lookup, int *puthere );
|
JIM_STATIC int JIM_API(Jim_GetOpt_Enum)(Jim_GetOptInfo *goi, const char * const * lookup, int *puthere);
|
||||||
|
|
||||||
|
|
||||||
#undef JIM_STATIC
|
#undef JIM_STATIC
|
||||||
|
@ -1272,12 +1272,12 @@ static void Jim_InitExtension(Jim_Interp *interp)
|
||||||
JIM_GET_API(StackPop);
|
JIM_GET_API(StackPop);
|
||||||
JIM_GET_API(StackPeek);
|
JIM_GET_API(StackPeek);
|
||||||
JIM_GET_API(FreeStackElements);
|
JIM_GET_API(FreeStackElements);
|
||||||
JIM_GET_API(fprintf );
|
JIM_GET_API(fprintf);
|
||||||
JIM_GET_API(vfprintf );
|
JIM_GET_API(vfprintf);
|
||||||
JIM_GET_API(fwrite );
|
JIM_GET_API(fwrite);
|
||||||
JIM_GET_API(fread );
|
JIM_GET_API(fread);
|
||||||
JIM_GET_API(fflush );
|
JIM_GET_API(fflush);
|
||||||
JIM_GET_API(fgets );
|
JIM_GET_API(fgets);
|
||||||
JIM_GET_API(Nvp_name2value);
|
JIM_GET_API(Nvp_name2value);
|
||||||
JIM_GET_API(Nvp_name2value_nocase);
|
JIM_GET_API(Nvp_name2value_nocase);
|
||||||
JIM_GET_API(Nvp_name2value_simple);
|
JIM_GET_API(Nvp_name2value_simple);
|
||||||
|
|
|
@ -85,7 +85,7 @@ extern int debug_level;
|
||||||
/* Avoid fn call and building parameter list if we're not outputting the information.
|
/* Avoid fn call and building parameter list if we're not outputting the information.
|
||||||
* Matters on feeble CPUs for DEBUG/INFO statements that are involved frequently */
|
* Matters on feeble CPUs for DEBUG/INFO statements that are involved frequently */
|
||||||
|
|
||||||
#define LOG_LEVEL_IS(FOO ) ((debug_level) >= (FOO))
|
#define LOG_LEVEL_IS(FOO) ((debug_level) >= (FOO))
|
||||||
|
|
||||||
#define LOG_DEBUG(expr ...) \
|
#define LOG_DEBUG(expr ...) \
|
||||||
((debug_level >= LOG_LVL_DEBUG) ? log_printf_lf (LOG_LVL_DEBUG, __FILE__, __LINE__, __FUNCTION__, expr) , 0 : 0)
|
((debug_level >= LOG_LVL_DEBUG) ? log_printf_lf (LOG_LVL_DEBUG, __FILE__, __LINE__, __FUNCTION__, expr) , 0 : 0)
|
||||||
|
|
|
@ -161,7 +161,7 @@ int win_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct time
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/* generic socket functions for Windows and Posix */
|
/* generic socket functions for Windows and Posix */
|
||||||
static __inline int write_socket(int handle, const void *buffer, unsigned int count )
|
static __inline int write_socket(int handle, const void *buffer, unsigned int count)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
return send(handle, buffer, count, 0);
|
return send(handle, buffer, count, 0);
|
||||||
|
@ -170,7 +170,7 @@ static __inline int write_socket(int handle, const void *buffer, unsigned int co
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline int read_socket(int handle, void *buffer, unsigned int count )
|
static __inline int read_socket(int handle, void *buffer, unsigned int count)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
return recv(handle, buffer, count, 0);
|
return recv(handle, buffer, count, 0);
|
||||||
|
@ -192,7 +192,7 @@ static __inline void socket_nonblock(int fd)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
unsigned long nonblock = 1;
|
unsigned long nonblock = 1;
|
||||||
ioctlsocket(fd, FIONBIO, &nonblock );
|
ioctlsocket(fd, FIONBIO, &nonblock);
|
||||||
#else
|
#else
|
||||||
int oldopts = fcntl(fd, F_GETFL, 0);
|
int oldopts = fcntl(fd, F_GETFL, 0);
|
||||||
fcntl(fd, F_SETFL, oldopts | O_NONBLOCK);
|
fcntl(fd, F_SETFL, oldopts | O_NONBLOCK);
|
||||||
|
|
|
@ -395,20 +395,20 @@ int amt_jtagaccel_get_giveio_access(void)
|
||||||
OSVERSIONINFO version;
|
OSVERSIONINFO version;
|
||||||
|
|
||||||
version.dwOSVersionInfoSize = sizeof version;
|
version.dwOSVersionInfoSize = sizeof version;
|
||||||
if (!GetVersionEx(&version )) {
|
if (!GetVersionEx(&version)) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (version.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
if (version.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
if (h == INVALID_HANDLE_VALUE) {
|
if (h == INVALID_HANDLE_VALUE) {
|
||||||
errno = ENODEV;
|
errno = ENODEV;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(h );
|
CloseHandle(h);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -266,7 +266,7 @@ int bitbang_execute_queue(void)
|
||||||
break;
|
break;
|
||||||
case JTAG_RUNTEST:
|
case JTAG_RUNTEST:
|
||||||
#ifdef _DEBUG_JTAG_IO_
|
#ifdef _DEBUG_JTAG_IO_
|
||||||
LOG_DEBUG("runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, tap_state_name(cmd->cmd.runtest->end_state) );
|
LOG_DEBUG("runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, tap_state_name(cmd->cmd.runtest->end_state));
|
||||||
#endif
|
#endif
|
||||||
bitbang_end_state(cmd->cmd.runtest->end_state);
|
bitbang_end_state(cmd->cmd.runtest->end_state);
|
||||||
bitbang_runtest(cmd->cmd.runtest->num_cycles);
|
bitbang_runtest(cmd->cmd.runtest->num_cycles);
|
||||||
|
@ -295,7 +295,7 @@ int bitbang_execute_queue(void)
|
||||||
break;
|
break;
|
||||||
case JTAG_SCAN:
|
case JTAG_SCAN:
|
||||||
#ifdef _DEBUG_JTAG_IO_
|
#ifdef _DEBUG_JTAG_IO_
|
||||||
LOG_DEBUG("%s scan end in %s", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", tap_state_name(cmd->cmd.scan->end_state) );
|
LOG_DEBUG("%s scan end in %s", (cmd->cmd.scan->ir_scan) ? "IR" : "DR", tap_state_name(cmd->cmd.scan->end_state));
|
||||||
#endif
|
#endif
|
||||||
bitbang_end_state(cmd->cmd.scan->end_state);
|
bitbang_end_state(cmd->cmd.scan->end_state);
|
||||||
scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
|
scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
|
||||||
|
|
|
@ -83,7 +83,7 @@ void bitq_in_proc(void)
|
||||||
bitq_in_bufsize *= 2;
|
bitq_in_bufsize *= 2;
|
||||||
}
|
}
|
||||||
/* if necessary, allocate buffer and check for malloc error */
|
/* if necessary, allocate buffer and check for malloc error */
|
||||||
if (bitq_in_buffer == NULL && (bitq_in_buffer = malloc(bitq_in_bufsize) ) == NULL)
|
if (bitq_in_buffer == NULL && (bitq_in_buffer = malloc(bitq_in_bufsize)) == NULL)
|
||||||
{
|
{
|
||||||
LOG_ERROR("malloc error");
|
LOG_ERROR("malloc error");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
|
@ -95,7 +95,7 @@ void bitq_in_proc(void)
|
||||||
/* field scanning */
|
/* field scanning */
|
||||||
while (bitq_in_state.bit_pos < field->num_bits)
|
while (bitq_in_state.bit_pos < field->num_bits)
|
||||||
{
|
{
|
||||||
if ((tdo = bitq_interface->in() ) < 0 )
|
if ((tdo = bitq_interface->in()) < 0)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG_JTAG_IO_
|
#ifdef _DEBUG_JTAG_IO_
|
||||||
LOG_DEBUG("bitq in EOF");
|
LOG_DEBUG("bitq in EOF");
|
||||||
|
@ -131,7 +131,7 @@ void bitq_io(int tms, int tdi, int tdo_req)
|
||||||
{
|
{
|
||||||
bitq_interface->out(tms, tdi, tdo_req);
|
bitq_interface->out(tms, tdi, tdo_req);
|
||||||
/* check and process the input queue */
|
/* check and process the input queue */
|
||||||
if (bitq_interface->in_rdy() )
|
if (bitq_interface->in_rdy())
|
||||||
bitq_in_proc();
|
bitq_in_proc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,14 +184,14 @@ void bitq_path_move(pathmove_command_t* cmd)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(
|
LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(
|
||||||
tap_get_state() ), tap_state_name(cmd->path[i]) );
|
tap_get_state()), tap_state_name(cmd->path[i]));
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
tap_set_state(cmd->path[i]);
|
tap_set_state(cmd->path[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
tap_set_end_state(tap_get_state() );
|
tap_set_end_state(tap_get_state());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -208,8 +208,8 @@ void bitq_runtest(int num_cycles)
|
||||||
bitq_io(0, 0, 0);
|
bitq_io(0, 0, 0);
|
||||||
|
|
||||||
/* finish in end_state */
|
/* finish in end_state */
|
||||||
if (tap_get_state() != tap_get_end_state() )
|
if (tap_get_state() != tap_get_end_state())
|
||||||
bitq_state_move(tap_get_end_state() );
|
bitq_state_move(tap_get_end_state());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -241,7 +241,7 @@ void bitq_scan_field(scan_field_t* field, int pause)
|
||||||
out_ptr = field->out_value;
|
out_ptr = field->out_value;
|
||||||
for (bit_cnt = field->num_bits; bit_cnt > 1; bit_cnt--)
|
for (bit_cnt = field->num_bits; bit_cnt > 1; bit_cnt--)
|
||||||
{
|
{
|
||||||
bitq_io(0, ((*out_ptr) & out_mask ) != 0, tdo_req);
|
bitq_io(0, ((*out_ptr) & out_mask) != 0, tdo_req);
|
||||||
if (out_mask == 0x80)
|
if (out_mask == 0x80)
|
||||||
{
|
{
|
||||||
out_mask = 0x01;
|
out_mask = 0x01;
|
||||||
|
@ -251,7 +251,7 @@ void bitq_scan_field(scan_field_t* field, int pause)
|
||||||
out_mask <<= 1;
|
out_mask <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bitq_io(pause, ((*out_ptr) & out_mask ) != 0, tdo_req);
|
bitq_io(pause, ((*out_ptr) & out_mask) != 0, tdo_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pause)
|
if (pause)
|
||||||
|
@ -298,12 +298,12 @@ int bitq_execute_queue(void)
|
||||||
#ifdef _DEBUG_JTAG_IO_
|
#ifdef _DEBUG_JTAG_IO_
|
||||||
LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
|
LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
|
||||||
#endif
|
#endif
|
||||||
if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST) ) )
|
if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
|
||||||
{
|
{
|
||||||
tap_set_state(TAP_RESET);
|
tap_set_state(TAP_RESET);
|
||||||
}
|
}
|
||||||
bitq_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
|
bitq_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
|
||||||
if (bitq_interface->in_rdy() )
|
if (bitq_interface->in_rdy())
|
||||||
bitq_in_proc();
|
bitq_in_proc();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -320,7 +320,7 @@ int bitq_execute_queue(void)
|
||||||
LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state);
|
LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state);
|
||||||
#endif
|
#endif
|
||||||
bitq_end_state(cmd->cmd.statemove->end_state);
|
bitq_end_state(cmd->cmd.statemove->end_state);
|
||||||
bitq_state_move(tap_get_end_state() ); /* uncoditional TAP move */
|
bitq_state_move(tap_get_end_state()); /* uncoditional TAP move */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JTAG_PATHMOVE:
|
case JTAG_PATHMOVE:
|
||||||
|
@ -341,8 +341,8 @@ int bitq_execute_queue(void)
|
||||||
#endif
|
#endif
|
||||||
bitq_end_state(cmd->cmd.scan->end_state);
|
bitq_end_state(cmd->cmd.scan->end_state);
|
||||||
bitq_scan(cmd->cmd.scan);
|
bitq_scan(cmd->cmd.scan);
|
||||||
if (tap_get_state() != tap_get_end_state() )
|
if (tap_get_state() != tap_get_end_state())
|
||||||
bitq_state_move(tap_get_end_state() );
|
bitq_state_move(tap_get_end_state());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JTAG_SLEEP:
|
case JTAG_SLEEP:
|
||||||
|
@ -350,7 +350,7 @@ int bitq_execute_queue(void)
|
||||||
LOG_DEBUG("sleep %i", cmd->cmd.sleep->us);
|
LOG_DEBUG("sleep %i", cmd->cmd.sleep->us);
|
||||||
#endif
|
#endif
|
||||||
bitq_interface->sleep(cmd->cmd.sleep->us);
|
bitq_interface->sleep(cmd->cmd.sleep->us);
|
||||||
if (bitq_interface->in_rdy() )
|
if (bitq_interface->in_rdy())
|
||||||
bitq_in_proc();
|
bitq_in_proc();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,7 @@ int jtag_build_buffer(const scan_command_t *cmd, uint8_t **buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _DEBUG_JTAG_IO_
|
#ifdef _DEBUG_JTAG_IO_
|
||||||
//LOG_DEBUG("bit_count totalling: %i", bit_count );
|
//LOG_DEBUG("bit_count totalling: %i", bit_count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return bit_count;
|
return bit_count;
|
||||||
|
|
|
@ -505,16 +505,16 @@ int jtag_add_statemove(tap_state_t goal_state)
|
||||||
|
|
||||||
LOG_DEBUG("cur_state=%s goal_state=%s",
|
LOG_DEBUG("cur_state=%s goal_state=%s",
|
||||||
tap_state_name(cur_state),
|
tap_state_name(cur_state),
|
||||||
tap_state_name(goal_state) );
|
tap_state_name(goal_state));
|
||||||
|
|
||||||
|
|
||||||
if (goal_state == cur_state )
|
if (goal_state == cur_state)
|
||||||
; /* nothing to do */
|
; /* nothing to do */
|
||||||
else if (goal_state == TAP_RESET )
|
else if (goal_state == TAP_RESET)
|
||||||
{
|
{
|
||||||
jtag_add_tlr();
|
jtag_add_tlr();
|
||||||
}
|
}
|
||||||
else if (tap_is_state_stable(cur_state) && tap_is_state_stable(goal_state) )
|
else if (tap_is_state_stable(cur_state) && tap_is_state_stable(goal_state))
|
||||||
{
|
{
|
||||||
unsigned tms_bits = tap_get_tms_path(cur_state, goal_state);
|
unsigned tms_bits = tap_get_tms_path(cur_state, goal_state);
|
||||||
unsigned tms_count = tap_get_tms_path_len(cur_state, goal_state);
|
unsigned tms_count = tap_get_tms_path_len(cur_state, goal_state);
|
||||||
|
@ -532,7 +532,7 @@ int jtag_add_statemove(tap_state_t goal_state)
|
||||||
jtag_add_pathmove(tms_count, moves);
|
jtag_add_pathmove(tms_count, moves);
|
||||||
}
|
}
|
||||||
else if (tap_state_transition(cur_state, true) == goal_state
|
else if (tap_state_transition(cur_state, true) == goal_state
|
||||||
|| tap_state_transition(cur_state, false) == goal_state )
|
|| tap_state_transition(cur_state, false) == goal_state)
|
||||||
{
|
{
|
||||||
jtag_add_pathmove(1, &goal_state);
|
jtag_add_pathmove(1, &goal_state);
|
||||||
}
|
}
|
||||||
|
@ -868,7 +868,7 @@ static void jtag_examine_chain_display(enum log_levels level, const char *msg,
|
||||||
(unsigned int)idcode,
|
(unsigned int)idcode,
|
||||||
(unsigned int)EXTRACT_MFG(idcode),
|
(unsigned int)EXTRACT_MFG(idcode),
|
||||||
(unsigned int)EXTRACT_PART(idcode),
|
(unsigned int)EXTRACT_PART(idcode),
|
||||||
(unsigned int)EXTRACT_VER(idcode) );
|
(unsigned int)EXTRACT_VER(idcode));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool jtag_idcode_is_final(uint32_t idcode)
|
static bool jtag_idcode_is_final(uint32_t idcode)
|
||||||
|
@ -1026,7 +1026,7 @@ int jtag_validate_chain(void)
|
||||||
total_ir_length = 0;
|
total_ir_length = 0;
|
||||||
for (;;){
|
for (;;){
|
||||||
tap = jtag_tap_next_enabled(tap);
|
tap = jtag_tap_next_enabled(tap);
|
||||||
if (tap == NULL ){
|
if (tap == NULL){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
total_ir_length += tap->ir_length;
|
total_ir_length += tap->ir_length;
|
||||||
|
@ -1050,7 +1050,7 @@ int jtag_validate_chain(void)
|
||||||
int val;
|
int val;
|
||||||
for (;;){
|
for (;;){
|
||||||
tap = jtag_tap_next_enabled(tap);
|
tap = jtag_tap_next_enabled(tap);
|
||||||
if (tap == NULL ){
|
if (tap == NULL){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1151,7 +1151,7 @@ static int jtag_init_inner(struct command_context_s *cmd_ctx)
|
||||||
LOG_DEBUG("Init JTAG chain");
|
LOG_DEBUG("Init JTAG chain");
|
||||||
|
|
||||||
tap = jtag_tap_next_enabled(NULL);
|
tap = jtag_tap_next_enabled(NULL);
|
||||||
if (tap == NULL ){
|
if (tap == NULL){
|
||||||
LOG_ERROR("There are no enabled taps?");
|
LOG_ERROR("There are no enabled taps?");
|
||||||
return ERROR_JTAG_INIT_FAILED;
|
return ERROR_JTAG_INIT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -418,7 +418,7 @@ int interface_jtag_add_runtest(int num_cycles, tap_state_t state)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int interface_jtag_add_clocks(int num_cycles )
|
int interface_jtag_add_clocks(int num_cycles)
|
||||||
{
|
{
|
||||||
/* allocate memory for a new list member */
|
/* allocate memory for a new list member */
|
||||||
jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
|
jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
|
||||||
|
|
|
@ -85,22 +85,22 @@ static int dummy_read(void)
|
||||||
static void dummy_write(int tck, int tms, int tdi)
|
static void dummy_write(int tck, int tms, int tdi)
|
||||||
{
|
{
|
||||||
/* TAP standard: "state transitions occur on rising edge of clock" */
|
/* TAP standard: "state transitions occur on rising edge of clock" */
|
||||||
if (tck != dummy_clock )
|
if (tck != dummy_clock)
|
||||||
{
|
{
|
||||||
if (tck )
|
if (tck)
|
||||||
{
|
{
|
||||||
tap_state_t old_state = dummy_state;
|
tap_state_t old_state = dummy_state;
|
||||||
dummy_state = tap_state_transition(old_state, tms );
|
dummy_state = tap_state_transition(old_state, tms);
|
||||||
|
|
||||||
if (old_state != dummy_state )
|
if (old_state != dummy_state)
|
||||||
{
|
{
|
||||||
if (clock_count )
|
if (clock_count)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("dummy_tap: %d stable clocks", clock_count);
|
LOG_DEBUG("dummy_tap: %d stable clocks", clock_count);
|
||||||
clock_count = 0;
|
clock_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("dummy_tap: %s", tap_state_name(dummy_state) );
|
LOG_DEBUG("dummy_tap: %s", tap_state_name(dummy_state));
|
||||||
|
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
if (dummy_state == TAP_DRCAPTURE)
|
if (dummy_state == TAP_DRCAPTURE)
|
||||||
|
@ -126,7 +126,7 @@ static void dummy_reset(int trst, int srst)
|
||||||
if (trst || (srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
|
if (trst || (srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST)))
|
||||||
dummy_state = TAP_RESET;
|
dummy_state = TAP_RESET;
|
||||||
|
|
||||||
LOG_DEBUG("reset to: %s", tap_state_name(dummy_state) );
|
LOG_DEBUG("reset to: %s", tap_state_name(dummy_state));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dummy_khz(int khz, int *jtag_speed)
|
static int dummy_khz(int khz, int *jtag_speed)
|
||||||
|
|
|
@ -1588,7 +1588,7 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd)
|
||||||
DEBUG_JTAG_IO("pathmove: %i states, current: %s end: %s", num_states,
|
DEBUG_JTAG_IO("pathmove: %i states, current: %s end: %s", num_states,
|
||||||
tap_state_name(tap_get_state()),
|
tap_state_name(tap_get_state()),
|
||||||
tap_state_name(path[num_states-1])
|
tap_state_name(path[num_states-1])
|
||||||
);
|
);
|
||||||
|
|
||||||
/* only send the maximum buffer size that FT2232C can handle */
|
/* only send the maximum buffer size that FT2232C can handle */
|
||||||
predicted_size = 3 * CEIL(num_states, 7);
|
predicted_size = 3 * CEIL(num_states, 7);
|
||||||
|
|
|
@ -422,20 +422,20 @@ static int gw16012_get_giveio_access(void)
|
||||||
OSVERSIONINFO version;
|
OSVERSIONINFO version;
|
||||||
|
|
||||||
version.dwOSVersionInfoSize = sizeof version;
|
version.dwOSVersionInfoSize = sizeof version;
|
||||||
if (!GetVersionEx(&version )) {
|
if (!GetVersionEx(&version)) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (version.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
if (version.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
if (h == INVALID_HANDLE_VALUE) {
|
if (h == INVALID_HANDLE_VALUE) {
|
||||||
errno = ENODEV;
|
errno = ENODEV;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(h );
|
CloseHandle(h);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -524,7 +524,7 @@ static int gw16012_init_device(void)
|
||||||
LOG_WARNING("No gw16012 port specified, using default '0x378' (LPT1)");
|
LOG_WARNING("No gw16012 port specified, using default '0x378' (LPT1)");
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("requesting privileges for parallel port 0x%lx...", (long unsigned)(gw16012_port) );
|
LOG_DEBUG("requesting privileges for parallel port 0x%lx...", (long unsigned)(gw16012_port));
|
||||||
#if PARPORT_USE_GIVEIO == 1
|
#if PARPORT_USE_GIVEIO == 1
|
||||||
if (gw16012_get_giveio_access() != 0)
|
if (gw16012_get_giveio_access() != 0)
|
||||||
#else /* PARPORT_USE_GIVEIO */
|
#else /* PARPORT_USE_GIVEIO */
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
*/
|
*/
|
||||||
static tap_state_t state_follower = TAP_RESET;
|
static tap_state_t state_follower = TAP_RESET;
|
||||||
|
|
||||||
void tap_set_state_impl(tap_state_t new_state )
|
void tap_set_state_impl(tap_state_t new_state)
|
||||||
{
|
{
|
||||||
/* this is the state we think the TAPs are in now, was cur_state */
|
/* this is the state we think the TAPs are in now, was cur_state */
|
||||||
state_follower = new_state;
|
state_follower = new_state;
|
||||||
|
@ -57,7 +57,7 @@ tap_state_t tap_get_state()
|
||||||
*/
|
*/
|
||||||
static tap_state_t end_state_follower = TAP_RESET;
|
static tap_state_t end_state_follower = TAP_RESET;
|
||||||
|
|
||||||
void tap_set_end_state(tap_state_t new_end_state )
|
void tap_set_end_state(tap_state_t new_end_state)
|
||||||
{
|
{
|
||||||
/* this is the state we think the TAPs will be in at completion of the
|
/* this is the state we think the TAPs will be in at completion of the
|
||||||
current TAP operation, was end_state
|
current TAP operation, was end_state
|
||||||
|
@ -71,13 +71,13 @@ tap_state_t tap_get_end_state()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int tap_move_ndx(tap_state_t astate )
|
int tap_move_ndx(tap_state_t astate)
|
||||||
{
|
{
|
||||||
/* given a stable state, return the index into the tms_seqs[] array within tap_get_tms_path() */
|
/* given a stable state, return the index into the tms_seqs[] array within tap_get_tms_path() */
|
||||||
|
|
||||||
int ndx;
|
int ndx;
|
||||||
|
|
||||||
switch (astate )
|
switch (astate)
|
||||||
{
|
{
|
||||||
case TAP_RESET: ndx = 0; break;
|
case TAP_RESET: ndx = 0; break;
|
||||||
case TAP_DRSHIFT: ndx = 2; break;
|
case TAP_DRSHIFT: ndx = 2; break;
|
||||||
|
@ -86,7 +86,7 @@ int tap_move_ndx(tap_state_t astate )
|
||||||
case TAP_IRSHIFT: ndx = 4; break;
|
case TAP_IRSHIFT: ndx = 4; break;
|
||||||
case TAP_IRPAUSE: ndx = 5; break;
|
case TAP_IRPAUSE: ndx = 5; break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR("fatal: unstable state \"%s\" used in tap_move_ndx()", tap_state_name(astate) );
|
LOG_ERROR("fatal: unstable state \"%s\" used in tap_move_ndx()", tap_state_name(astate));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,13 +193,13 @@ typedef const struct tms_sequences tms_table[6][6];
|
||||||
|
|
||||||
static tms_table *tms_seqs=&short_tms_seqs;
|
static tms_table *tms_seqs=&short_tms_seqs;
|
||||||
|
|
||||||
int tap_get_tms_path(tap_state_t from, tap_state_t to )
|
int tap_get_tms_path(tap_state_t from, tap_state_t to)
|
||||||
{
|
{
|
||||||
return (*tms_seqs)[tap_move_ndx(from)][tap_move_ndx(to)].bits;
|
return (*tms_seqs)[tap_move_ndx(from)][tap_move_ndx(to)].bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int tap_get_tms_path_len(tap_state_t from, tap_state_t to )
|
int tap_get_tms_path_len(tap_state_t from, tap_state_t to)
|
||||||
{
|
{
|
||||||
return (*tms_seqs)[tap_move_ndx(from)][tap_move_ndx(to)].bit_count;
|
return (*tms_seqs)[tap_move_ndx(from)][tap_move_ndx(to)].bit_count;
|
||||||
}
|
}
|
||||||
|
@ -212,7 +212,7 @@ bool tap_is_state_stable(tap_state_t astate)
|
||||||
/* A switch () is used because it is symbol dependent
|
/* A switch () is used because it is symbol dependent
|
||||||
(not value dependent like an array), and can also check bounds.
|
(not value dependent like an array), and can also check bounds.
|
||||||
*/
|
*/
|
||||||
switch (astate )
|
switch (astate)
|
||||||
{
|
{
|
||||||
case TAP_RESET:
|
case TAP_RESET:
|
||||||
case TAP_IDLE:
|
case TAP_IDLE:
|
||||||
|
@ -278,7 +278,7 @@ tap_state_t tap_state_transition(tap_state_t cur_state, bool tms)
|
||||||
new_state = TAP_IREXIT2;
|
new_state = TAP_IREXIT2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR("fatal: invalid argument cur_state=%d", cur_state );
|
LOG_ERROR("fatal: invalid argument cur_state=%d", cur_state);
|
||||||
exit(1);
|
exit(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -318,7 +318,7 @@ tap_state_t tap_state_transition(tap_state_t cur_state, bool tms)
|
||||||
new_state = TAP_IRPAUSE;
|
new_state = TAP_IRPAUSE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR("fatal: invalid argument cur_state=%d", cur_state );
|
LOG_ERROR("fatal: invalid argument cur_state=%d", cur_state);
|
||||||
exit(1);
|
exit(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -331,7 +331,7 @@ const char* tap_state_name(tap_state_t state)
|
||||||
{
|
{
|
||||||
const char* ret;
|
const char* ret;
|
||||||
|
|
||||||
switch (state )
|
switch (state)
|
||||||
{
|
{
|
||||||
case TAP_RESET: ret = "RESET"; break;
|
case TAP_RESET: ret = "RESET"; break;
|
||||||
case TAP_IDLE: ret = "RUN/IDLE"; break;
|
case TAP_IDLE: ret = "RUN/IDLE"; break;
|
||||||
|
@ -359,9 +359,9 @@ tap_state_t tap_state_by_name(const char *name)
|
||||||
{
|
{
|
||||||
tap_state_t x;
|
tap_state_t x;
|
||||||
|
|
||||||
for (x = 0 ; x < TAP_NUM_STATES ; x++ ){
|
for (x = 0 ; x < TAP_NUM_STATES ; x++){
|
||||||
/* be nice to the human */
|
/* be nice to the human */
|
||||||
if (0 == strcasecmp(name, tap_state_name(x) ) ){
|
if (0 == strcasecmp(name, tap_state_name(x))){
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ void tap_set_state_impl(tap_state_t new_state);
|
||||||
#if defined(_DEBUG_JTAG_IO_)
|
#if defined(_DEBUG_JTAG_IO_)
|
||||||
#define tap_set_state(new_state) \
|
#define tap_set_state(new_state) \
|
||||||
do { \
|
do { \
|
||||||
LOG_DEBUG("tap_set_state(%s)", tap_state_name(new_state) ); \
|
LOG_DEBUG("tap_set_state(%s)", tap_state_name(new_state)); \
|
||||||
tap_set_state_impl(new_state); \
|
tap_set_state_impl(new_state); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -263,20 +263,20 @@ static int parport_get_giveio_access(void)
|
||||||
OSVERSIONINFO version;
|
OSVERSIONINFO version;
|
||||||
|
|
||||||
version.dwOSVersionInfoSize = sizeof version;
|
version.dwOSVersionInfoSize = sizeof version;
|
||||||
if (!GetVersionEx(&version )) {
|
if (!GetVersionEx(&version)) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (version.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
if (version.dwPlatformId != VER_PLATFORM_WIN32_NT)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
if (h == INVALID_HANDLE_VALUE) {
|
if (h == INVALID_HANDLE_VALUE) {
|
||||||
errno = ENODEV;
|
errno = ENODEV;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(h );
|
CloseHandle(h);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,11 +41,11 @@
|
||||||
|
|
||||||
#define DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(tms, tdi, tdo) ((0x8 << 4) | (\
|
#define DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(tms, tdi, tdo) ((0x8 << 4) | (\
|
||||||
(tms) ? (1 << 0) : 0 \
|
(tms) ? (1 << 0) : 0 \
|
||||||
) | (\
|
) | (\
|
||||||
(tdi) ? (1 << 1) : 0 \
|
(tdi) ? (1 << 1) : 0 \
|
||||||
) | (\
|
) | (\
|
||||||
(tdo) ? (1 << 3) : 0 \
|
(tdo) ? (1 << 3) : 0 \
|
||||||
))
|
))
|
||||||
/* Single bit shift. */
|
/* Single bit shift. */
|
||||||
/* tms and tdi are the levels shifted out on TMS and TDI, respectively. */
|
/* tms and tdi are the levels shifted out on TMS and TDI, respectively. */
|
||||||
/* tdo indicates whether a byte will be returned in the reply buffer with its least significant bit set to reflect TDO */
|
/* tdo indicates whether a byte will be returned in the reply buffer with its least significant bit set to reflect TDO */
|
||||||
|
|
|
@ -137,14 +137,14 @@ ep1_generic_commandl(
|
||||||
usb_buffer_p,
|
usb_buffer_p,
|
||||||
0,
|
0,
|
||||||
sizeof(usb_buffer) - (usb_buffer_p - usb_buffer)
|
sizeof(usb_buffer) - (usb_buffer_p - usb_buffer)
|
||||||
);
|
);
|
||||||
|
|
||||||
usb_ret = usb_bulk_write(
|
usb_ret = usb_bulk_write(
|
||||||
pHDev,
|
pHDev,
|
||||||
USB_EP1OUT_ADDR,
|
USB_EP1OUT_ADDR,
|
||||||
(char *)usb_buffer, sizeof(usb_buffer),
|
(char *)usb_buffer, sizeof(usb_buffer),
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
return(usb_ret);
|
return(usb_ret);
|
||||||
}
|
}
|
||||||
|
@ -170,7 +170,7 @@ ep1_memory_read(
|
||||||
usb_buffer + 4,
|
usb_buffer + 4,
|
||||||
0,
|
0,
|
||||||
sizeof(usb_buffer) - 4
|
sizeof(usb_buffer) - 4
|
||||||
);
|
);
|
||||||
|
|
||||||
remain = length;
|
remain = length;
|
||||||
count = 0;
|
count = 0;
|
||||||
|
@ -190,7 +190,7 @@ ep1_memory_read(
|
||||||
pHDev, USB_EP1OUT_ADDR,
|
pHDev, USB_EP1OUT_ADDR,
|
||||||
usb_buffer, sizeof(usb_buffer),
|
usb_buffer, sizeof(usb_buffer),
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
if (usb_ret < sizeof(usb_buffer)) {
|
if (usb_ret < sizeof(usb_buffer)) {
|
||||||
break;
|
break;
|
||||||
|
@ -200,7 +200,7 @@ ep1_memory_read(
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
buffer, length,
|
buffer, length,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
if (usb_ret < length) {
|
if (usb_ret < length) {
|
||||||
break;
|
break;
|
||||||
|
@ -250,18 +250,18 @@ ep1_memory_write(
|
||||||
usb_buffer + 4,
|
usb_buffer + 4,
|
||||||
buffer,
|
buffer,
|
||||||
length
|
length
|
||||||
);
|
);
|
||||||
memset(
|
memset(
|
||||||
usb_buffer + 4 + length,
|
usb_buffer + 4 + length,
|
||||||
0,
|
0,
|
||||||
sizeof(usb_buffer) - 4 - length
|
sizeof(usb_buffer) - 4 - length
|
||||||
);
|
);
|
||||||
|
|
||||||
usb_ret = usb_bulk_write(
|
usb_ret = usb_bulk_write(
|
||||||
pHDev, USB_EP1OUT_ADDR,
|
pHDev, USB_EP1OUT_ADDR,
|
||||||
(char *)usb_buffer, sizeof(usb_buffer),
|
(char *)usb_buffer, sizeof(usb_buffer),
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
if ((size_t)usb_ret < sizeof(usb_buffer)) {
|
if ((size_t)usb_ret < sizeof(usb_buffer)) {
|
||||||
break;
|
break;
|
||||||
|
@ -345,7 +345,7 @@ dtc_load_from_buffer(
|
||||||
usb_err = ep1_generic_commandl(
|
usb_err = ep1_generic_commandl(
|
||||||
pHDev, 1,
|
pHDev, 1,
|
||||||
EP1_CMD_DTC_STOP
|
EP1_CMD_DTC_STOP
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
while (length) {
|
while (length) {
|
||||||
|
@ -380,7 +380,7 @@ dtc_load_from_buffer(
|
||||||
pHDev,
|
pHDev,
|
||||||
DTC_LOAD_BUFFER,
|
DTC_LOAD_BUFFER,
|
||||||
header->length + 1, buffer
|
header->length + 1, buffer
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
/* Load it into the DTC. */
|
/* Load it into the DTC. */
|
||||||
|
@ -389,7 +389,7 @@ dtc_load_from_buffer(
|
||||||
EP1_CMD_DTC_LOAD,
|
EP1_CMD_DTC_LOAD,
|
||||||
(DTC_LOAD_BUFFER >> 8),
|
(DTC_LOAD_BUFFER >> 8),
|
||||||
DTC_LOAD_BUFFER
|
DTC_LOAD_BUFFER
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -400,7 +400,7 @@ dtc_load_from_buffer(
|
||||||
EP1_CMD_DTC_CALL,
|
EP1_CMD_DTC_CALL,
|
||||||
buffer[0],
|
buffer[0],
|
||||||
EP1_CMD_DTC_WAIT
|
EP1_CMD_DTC_WAIT
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -414,7 +414,7 @@ dtc_load_from_buffer(
|
||||||
pHDev,
|
pHDev,
|
||||||
ST7_USB_BUF_EP0OUT + lut_start,
|
ST7_USB_BUF_EP0OUT + lut_start,
|
||||||
header->length + 1, buffer
|
header->length + 1, buffer
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -452,7 +452,7 @@ dtc_start_download(void) {
|
||||||
ST7_EP2TXR >> 8,
|
ST7_EP2TXR >> 8,
|
||||||
ST7_EP2TXR,
|
ST7_EP2TXR,
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
/* read back ep2txr */
|
/* read back ep2txr */
|
||||||
|
@ -460,7 +460,7 @@ dtc_start_download(void) {
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)&ep2txr, 1,
|
(char *)&ep2txr, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
usb_err = ep1_generic_commandl(
|
usb_err = ep1_generic_commandl(
|
||||||
|
@ -479,7 +479,7 @@ dtc_start_download(void) {
|
||||||
EP1_CMD_DTC_CALL, /* start running the DTC */
|
EP1_CMD_DTC_CALL, /* start running the DTC */
|
||||||
dtc_entry_download,
|
dtc_entry_download,
|
||||||
EP1_CMD_DTC_GET_CACHED_STATUS
|
EP1_CMD_DTC_GET_CACHED_STATUS
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
/* wait for completion */
|
/* wait for completion */
|
||||||
|
@ -487,7 +487,7 @@ dtc_start_download(void) {
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)&ep2txr, 1,
|
(char *)&ep2txr, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
return(usb_err);
|
return(usb_err);
|
||||||
}
|
}
|
||||||
|
@ -513,7 +513,7 @@ dtc_run_download(
|
||||||
USB_EP2OUT_ADDR,
|
USB_EP2OUT_ADDR,
|
||||||
(char *)command_buffer, USB_EP2BANK_SIZE,
|
(char *)command_buffer, USB_EP2BANK_SIZE,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
|
|
||||||
|
@ -526,7 +526,7 @@ dtc_run_download(
|
||||||
DTC_STATUS_POLL_BYTE >> 8,
|
DTC_STATUS_POLL_BYTE >> 8,
|
||||||
DTC_STATUS_POLL_BYTE,
|
DTC_STATUS_POLL_BYTE,
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
usb_err = usb_bulk_read(
|
usb_err = usb_bulk_read(
|
||||||
|
@ -534,7 +534,7 @@ dtc_run_download(
|
||||||
USB_EP1IN_ADDR,
|
USB_EP1IN_ADDR,
|
||||||
(char *)ep2_buffer, 1,
|
(char *)ep2_buffer, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
if (usb_err < 0) return(usb_err);
|
if (usb_err < 0) return(usb_err);
|
||||||
|
|
||||||
if (ep2_buffer[0] & 0x01) break;
|
if (ep2_buffer[0] & 0x01) break;
|
||||||
|
@ -542,7 +542,7 @@ dtc_run_download(
|
||||||
if (!--i) {
|
if (!--i) {
|
||||||
LOG_ERROR("%s, %d: too many retries waiting for DTC status\n",
|
LOG_ERROR("%s, %d: too many retries waiting for DTC status\n",
|
||||||
__FILE__, __LINE__
|
__FILE__, __LINE__
|
||||||
);
|
);
|
||||||
return(-ETIMEDOUT);
|
return(-ETIMEDOUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -555,12 +555,12 @@ dtc_run_download(
|
||||||
USB_EP2IN_ADDR,
|
USB_EP2IN_ADDR,
|
||||||
(char *)ep2_buffer, sizeof(ep2_buffer),
|
(char *)ep2_buffer, sizeof(ep2_buffer),
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
if (usb_err < (int)sizeof(ep2_buffer)) {
|
if (usb_err < (int)sizeof(ep2_buffer)) {
|
||||||
LOG_ERROR("%s, %d: Read of endpoint 2 returned %d\n",
|
LOG_ERROR("%s, %d: Read of endpoint 2 returned %d\n",
|
||||||
__FILE__, __LINE__, usb_err
|
__FILE__, __LINE__, usb_err
|
||||||
);
|
);
|
||||||
return(usb_err);
|
return(usb_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -692,7 +692,7 @@ dtc_queue_run(void) {
|
||||||
usb_err = dtc_run_download(pHDev,
|
usb_err = dtc_run_download(pHDev,
|
||||||
dtc_queue.cmd_buffer, dtc_queue.cmd_index,
|
dtc_queue.cmd_buffer, dtc_queue.cmd_index,
|
||||||
NULL, 0
|
NULL, 0
|
||||||
);
|
);
|
||||||
if (usb_err < 0) {
|
if (usb_err < 0) {
|
||||||
LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
|
LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -701,7 +701,7 @@ dtc_queue_run(void) {
|
||||||
usb_err = dtc_run_download(pHDev,
|
usb_err = dtc_run_download(pHDev,
|
||||||
dtc_queue.cmd_buffer, dtc_queue.cmd_index,
|
dtc_queue.cmd_buffer, dtc_queue.cmd_index,
|
||||||
reply_buffer, dtc_queue.reply_index
|
reply_buffer, dtc_queue.reply_index
|
||||||
);
|
);
|
||||||
if (usb_err < 0) {
|
if (usb_err < 0) {
|
||||||
LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
|
LOG_ERROR("dtc_run_download: %s\n", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -715,7 +715,7 @@ dtc_queue_run(void) {
|
||||||
rq_p = dtc_queue.rq_head;
|
rq_p = dtc_queue.rq_head;
|
||||||
rq_p != NULL;
|
rq_p != NULL;
|
||||||
rq_p = rq_next
|
rq_p = rq_next
|
||||||
) {
|
) {
|
||||||
tdo_p = rq_p->scan.buffer + (rq_p->scan.offset / 8);
|
tdo_p = rq_p->scan.buffer + (rq_p->scan.offset / 8);
|
||||||
tdo_mask = 1 << (rq_p->scan.offset % 8);
|
tdo_mask = 1 << (rq_p->scan.offset % 8);
|
||||||
|
|
||||||
|
@ -730,7 +730,7 @@ dtc_queue_run(void) {
|
||||||
;
|
;
|
||||||
bit_cnt;
|
bit_cnt;
|
||||||
bit_cnt--
|
bit_cnt--
|
||||||
) {
|
) {
|
||||||
if (*dtc_p & dtc_mask) {
|
if (*dtc_p & dtc_mask) {
|
||||||
*tdo_p |= tdo_mask;
|
*tdo_p |= tdo_mask;
|
||||||
} else {
|
} else {
|
||||||
|
@ -755,9 +755,9 @@ dtc_queue_run(void) {
|
||||||
x = *dtc_p++;
|
x = *dtc_p++;
|
||||||
if ((
|
if ((
|
||||||
rq_p->scan.type == SCAN_IN
|
rq_p->scan.type == SCAN_IN
|
||||||
) && (
|
) && (
|
||||||
rq_p->scan.offset != rq_p->scan.size - 1
|
rq_p->scan.offset != rq_p->scan.size - 1
|
||||||
)) {
|
)) {
|
||||||
/* extra bits were sent as a full byte with padding on the end */
|
/* extra bits were sent as a full byte with padding on the end */
|
||||||
dtc_mask = 1 << (8 - 1);
|
dtc_mask = 1 << (8 - 1);
|
||||||
} else {
|
} else {
|
||||||
|
@ -768,7 +768,7 @@ dtc_queue_run(void) {
|
||||||
;
|
;
|
||||||
bit_cnt;
|
bit_cnt;
|
||||||
bit_cnt--
|
bit_cnt--
|
||||||
) {
|
) {
|
||||||
if (x & dtc_mask) {
|
if (x & dtc_mask) {
|
||||||
*tdo_p |= tdo_mask;
|
*tdo_p |= tdo_mask;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1004,7 +1004,7 @@ void rlink_reset(int trst, int srst)
|
||||||
ST7_PADR >> 8,
|
ST7_PADR >> 8,
|
||||||
ST7_PADR,
|
ST7_PADR,
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
if (usb_err < 0) {
|
if (usb_err < 0) {
|
||||||
LOG_ERROR("%s", usb_strerror());
|
LOG_ERROR("%s", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1014,7 +1014,7 @@ void rlink_reset(int trst, int srst)
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)&bitmap, 1,
|
(char *)&bitmap, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
if (usb_err < 1) {
|
if (usb_err < 1) {
|
||||||
LOG_ERROR("%s", usb_strerror());
|
LOG_ERROR("%s", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1039,7 +1039,7 @@ void rlink_reset(int trst, int srst)
|
||||||
ST7_PBDDR >> 8,
|
ST7_PBDDR >> 8,
|
||||||
ST7_PBDDR,
|
ST7_PBDDR,
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
if (usb_err < 0) {
|
if (usb_err < 0) {
|
||||||
LOG_ERROR("%s", usb_strerror());
|
LOG_ERROR("%s", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1049,7 +1049,7 @@ void rlink_reset(int trst, int srst)
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)&bitmap, 1,
|
(char *)&bitmap, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
if (usb_err < 1) {
|
if (usb_err < 1) {
|
||||||
LOG_ERROR("%s", usb_strerror());
|
LOG_ERROR("%s", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1070,7 +1070,7 @@ void rlink_reset(int trst, int srst)
|
||||||
1,
|
1,
|
||||||
bitmap,
|
bitmap,
|
||||||
EP1_CMD_DTC_GET_CACHED_STATUS
|
EP1_CMD_DTC_GET_CACHED_STATUS
|
||||||
);
|
);
|
||||||
if (usb_err < 0) {
|
if (usb_err < 0) {
|
||||||
LOG_ERROR("%s", usb_strerror());
|
LOG_ERROR("%s", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1080,7 +1080,7 @@ void rlink_reset(int trst, int srst)
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)&bitmap, 1,
|
(char *)&bitmap, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
if (usb_err < 1) {
|
if (usb_err < 1) {
|
||||||
LOG_ERROR("%s", usb_strerror());
|
LOG_ERROR("%s", usb_strerror());
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1120,7 +1120,7 @@ rlink_scan(
|
||||||
(!ir_scan && (tap_get_state() == TAP_DRSHIFT))
|
(!ir_scan && (tap_get_state() == TAP_DRSHIFT))
|
||||||
||
|
||
|
||||||
(ir_scan && (tap_get_state() == TAP_IRSHIFT))
|
(ir_scan && (tap_get_state() == TAP_IRSHIFT))
|
||||||
)) {
|
)) {
|
||||||
saved_end_state = tap_get_end_state();
|
saved_end_state = tap_get_end_state();
|
||||||
rlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
|
rlink_end_state(ir_scan ? TAP_IRSHIFT : TAP_DRSHIFT);
|
||||||
rlink_state_move();
|
rlink_state_move();
|
||||||
|
@ -1162,7 +1162,7 @@ rlink_scan(
|
||||||
/* make sure there's room for stop, byte op, and one byte */
|
/* make sure there's room for stop, byte op, and one byte */
|
||||||
if (
|
if (
|
||||||
(dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
|
(dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
|
||||||
) {
|
) {
|
||||||
dtc_queue_run();
|
dtc_queue_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1232,7 +1232,7 @@ rlink_scan(
|
||||||
type, buffer, scan_size, tdi_bit_offset,
|
type, buffer, scan_size, tdi_bit_offset,
|
||||||
chunk_bits,
|
chunk_bits,
|
||||||
cmd
|
cmd
|
||||||
) == NULL) {
|
) == NULL) {
|
||||||
LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
|
LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -1289,7 +1289,7 @@ rlink_scan(
|
||||||
(dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
|
(dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1 + 1))
|
||||||
||
|
||
|
||||||
(dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
|
(dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
|
||||||
) {
|
) {
|
||||||
dtc_queue_run();
|
dtc_queue_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1297,7 +1297,7 @@ rlink_scan(
|
||||||
type, buffer, scan_size, tdi_bit_offset,
|
type, buffer, scan_size, tdi_bit_offset,
|
||||||
extra_bits,
|
extra_bits,
|
||||||
cmd
|
cmd
|
||||||
) == NULL) {
|
) == NULL) {
|
||||||
LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
|
LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -1342,7 +1342,7 @@ rlink_scan(
|
||||||
(dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1))
|
(dtc_queue.cmd_index >= sizeof(dtc_queue.cmd_buffer) - (1 + 1))
|
||||||
||
|
||
|
||||||
(dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
|
(dtc_queue.reply_index >= USB_EP2IN_SIZE - (1))
|
||||||
) {
|
) {
|
||||||
dtc_queue_run();
|
dtc_queue_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1355,7 +1355,7 @@ rlink_scan(
|
||||||
type, buffer, scan_size, tdi_bit_offset,
|
type, buffer, scan_size, tdi_bit_offset,
|
||||||
1,
|
1,
|
||||||
cmd
|
cmd
|
||||||
) == NULL) {
|
) == NULL) {
|
||||||
LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
|
LOG_ERROR("enqueuing DTC reply entry: %s\n", strerror(errno));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -1393,7 +1393,7 @@ int rlink_execute_queue(void)
|
||||||
ep1_generic_commandl(pHDev, 2,
|
ep1_generic_commandl(pHDev, 2,
|
||||||
EP1_CMD_SET_PORTD_LEDS,
|
EP1_CMD_SET_PORTD_LEDS,
|
||||||
~(ST7_PD_NBUSY_LED)
|
~(ST7_PD_NBUSY_LED)
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (cmd)
|
while (cmd)
|
||||||
|
@ -1484,7 +1484,7 @@ int rlink_execute_queue(void)
|
||||||
ep1_generic_commandl(pHDev, 2,
|
ep1_generic_commandl(pHDev, 2,
|
||||||
EP1_CMD_SET_PORTD_LEDS,
|
EP1_CMD_SET_PORTD_LEDS,
|
||||||
~0
|
~0
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -1503,7 +1503,7 @@ int rlink_speed(int speed)
|
||||||
speed = rlink_speed_table[rlink_speed_table_size - 1].prescaler;
|
speed = rlink_speed_table[rlink_speed_table_size - 1].prescaler;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = rlink_speed_table_size; i--; ) {
|
for (i = rlink_speed_table_size; i--;) {
|
||||||
if (rlink_speed_table[i].prescaler == speed) {
|
if (rlink_speed_table[i].prescaler == speed) {
|
||||||
if (dtc_load_from_buffer(pHDev, rlink_speed_table[i].dtc, rlink_speed_table[i].dtc_size) != 0) {
|
if (dtc_load_from_buffer(pHDev, rlink_speed_table[i].dtc, rlink_speed_table[i].dtc_size) != 0) {
|
||||||
LOG_ERROR("An error occurred while trying to load DTC code for speed \"%d\".\n", speed);
|
LOG_ERROR("An error occurred while trying to load DTC code for speed \"%d\".\n", speed);
|
||||||
|
@ -1514,7 +1514,7 @@ int rlink_speed(int speed)
|
||||||
LOG_ERROR("%s, %d: starting DTC: %s",
|
LOG_ERROR("%s, %d: starting DTC: %s",
|
||||||
__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
usb_strerror()
|
usb_strerror()
|
||||||
);
|
);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1534,7 +1534,7 @@ int rlink_speed_div(
|
||||||
) {
|
) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = rlink_speed_table_size; i--; ) {
|
for (i = rlink_speed_table_size; i--;) {
|
||||||
if (rlink_speed_table[i].prescaler == speed) {
|
if (rlink_speed_table[i].prescaler == speed) {
|
||||||
*khz = rlink_speed_table[i].khz;
|
*khz = rlink_speed_table[i].khz;
|
||||||
return(ERROR_OK);
|
return(ERROR_OK);
|
||||||
|
@ -1558,7 +1558,7 @@ int rlink_khz(
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = rlink_speed_table_size; i--; ) {
|
for (i = rlink_speed_table_size; i--;) {
|
||||||
if (rlink_speed_table[i].khz <= khz) {
|
if (rlink_speed_table[i].khz <= khz) {
|
||||||
*speed = rlink_speed_table[i].prescaler;
|
*speed = rlink_speed_table[i].prescaler;
|
||||||
return(ERROR_OK);
|
return(ERROR_OK);
|
||||||
|
@ -1607,7 +1607,7 @@ int rlink_register_commands(struct command_context_s *cmd_ctx)
|
||||||
handle_dtc_directory_command,
|
handle_dtc_directory_command,
|
||||||
COMMAND_CONFIG,
|
COMMAND_CONFIG,
|
||||||
"The directory in which to search for DTC load images"
|
"The directory in which to search for DTC load images"
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -1636,26 +1636,26 @@ int rlink_init(void)
|
||||||
|
|
||||||
for (dev = bus->devices; dev; dev = dev->next)
|
for (dev = bus->devices; dev; dev = dev->next)
|
||||||
{
|
{
|
||||||
if ((dev->descriptor.idVendor == USB_IDVENDOR) && (dev->descriptor.idProduct == USB_IDPRODUCT) )
|
if ((dev->descriptor.idVendor == USB_IDVENDOR) && (dev->descriptor.idProduct == USB_IDPRODUCT))
|
||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
LOG_DEBUG("Found device on bus.\n");
|
LOG_DEBUG("Found device on bus.\n");
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (dev->descriptor.bNumConfigurations > 1 )
|
if (dev->descriptor.bNumConfigurations > 1)
|
||||||
{
|
{
|
||||||
LOG_ERROR("Whoops! NumConfigurations is not 1, don't know what to do...\n");
|
LOG_ERROR("Whoops! NumConfigurations is not 1, don't know what to do...\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dev->config->bNumInterfaces > 1 )
|
if (dev->config->bNumInterfaces > 1)
|
||||||
{
|
{
|
||||||
LOG_ERROR("Whoops! NumInterfaces is not 1, don't know what to do...\n");
|
LOG_ERROR("Whoops! NumInterfaces is not 1, don't know what to do...\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pHDev = usb_open(dev);
|
pHDev = usb_open(dev);
|
||||||
if (!pHDev )
|
if (!pHDev)
|
||||||
LOG_ERROR ("Failed to open device.\n");
|
LOG_ERROR ("Failed to open device.\n");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1686,7 +1686,7 @@ int rlink_init(void)
|
||||||
|
|
||||||
if (!i)
|
if (!i)
|
||||||
{
|
{
|
||||||
if (usb_set_altinterface(pHDev,0) )
|
if (usb_set_altinterface(pHDev,0))
|
||||||
{
|
{
|
||||||
LOG_ERROR("Failed to set interface.\n");
|
LOG_ERROR("Failed to set interface.\n");
|
||||||
break;
|
break;
|
||||||
|
@ -1700,13 +1700,13 @@ int rlink_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found )
|
if (!found)
|
||||||
{
|
{
|
||||||
LOG_ERROR("No device found on bus.\n");
|
LOG_ERROR("No device found on bus.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!success )
|
if (!success)
|
||||||
{
|
{
|
||||||
LOG_ERROR("Initialisation failed.");
|
LOG_ERROR("Initialisation failed.");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -1719,7 +1719,7 @@ int rlink_init(void)
|
||||||
j = ep1_generic_commandl(
|
j = ep1_generic_commandl(
|
||||||
pHDev, 1,
|
pHDev, 1,
|
||||||
EP1_CMD_GET_FWREV
|
EP1_CMD_GET_FWREV
|
||||||
);
|
);
|
||||||
if (j < USB_EP1OUT_SIZE) {
|
if (j < USB_EP1OUT_SIZE) {
|
||||||
LOG_ERROR("USB write error: %s", usb_strerror());
|
LOG_ERROR("USB write error: %s", usb_strerror());
|
||||||
return(ERROR_FAIL);
|
return(ERROR_FAIL);
|
||||||
|
@ -1728,7 +1728,7 @@ int rlink_init(void)
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)reply_buffer, sizeof(reply_buffer),
|
(char *)reply_buffer, sizeof(reply_buffer),
|
||||||
200
|
200
|
||||||
);
|
);
|
||||||
if (j != -ETIMEDOUT) break;
|
if (j != -ETIMEDOUT) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1761,13 +1761,13 @@ int rlink_init(void)
|
||||||
ST7_PEDR,
|
ST7_PEDR,
|
||||||
1,
|
1,
|
||||||
ST7_PE_ADAPTER_SENSE_OUT
|
ST7_PE_ADAPTER_SENSE_OUT
|
||||||
);
|
);
|
||||||
|
|
||||||
usb_bulk_read(
|
usb_bulk_read(
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)reply_buffer, 1,
|
(char *)reply_buffer, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) != 0) {
|
if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) != 0) {
|
||||||
LOG_WARNING("target detection problem\n");
|
LOG_WARNING("target detection problem\n");
|
||||||
|
@ -1786,13 +1786,13 @@ int rlink_init(void)
|
||||||
0x00, /* DR */
|
0x00, /* DR */
|
||||||
0x00, /* DDR */
|
0x00, /* DDR */
|
||||||
0x00 /* OR */
|
0x00 /* OR */
|
||||||
);
|
);
|
||||||
|
|
||||||
usb_bulk_read(
|
usb_bulk_read(
|
||||||
pHDev, USB_EP1IN_ADDR,
|
pHDev, USB_EP1IN_ADDR,
|
||||||
(char *)reply_buffer, 1,
|
(char *)reply_buffer, 1,
|
||||||
USB_TIMEOUT_MS
|
USB_TIMEOUT_MS
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) == 0) {
|
if ((reply_buffer[0] & ST7_PE_ADAPTER_SENSE_IN) == 0) {
|
||||||
|
@ -1813,7 +1813,7 @@ int rlink_init(void)
|
||||||
ST7_PBDDR,
|
ST7_PBDDR,
|
||||||
1,
|
1,
|
||||||
0x00
|
0x00
|
||||||
);
|
);
|
||||||
|
|
||||||
/* make sure DTC is stopped, set VPP control, set up ports A and B */
|
/* make sure DTC is stopped, set VPP control, set up ports A and B */
|
||||||
ep1_generic_commandl(
|
ep1_generic_commandl(
|
||||||
|
@ -1833,7 +1833,7 @@ int rlink_init(void)
|
||||||
ST7_PBDR,
|
ST7_PBDR,
|
||||||
1,
|
1,
|
||||||
0x00
|
0x00
|
||||||
);
|
);
|
||||||
|
|
||||||
/* set LED updating mode and make sure they're unlit */
|
/* set LED updating mode and make sure they're unlit */
|
||||||
ep1_generic_commandl(
|
ep1_generic_commandl(
|
||||||
|
@ -1845,7 +1845,7 @@ int rlink_init(void)
|
||||||
#endif
|
#endif
|
||||||
EP1_CMD_SET_PORTD_LEDS,
|
EP1_CMD_SET_PORTD_LEDS,
|
||||||
~0
|
~0
|
||||||
);
|
);
|
||||||
|
|
||||||
tap_state_queue_init();
|
tap_state_queue_init();
|
||||||
dtc_queue_init();
|
dtc_queue_init();
|
||||||
|
@ -1868,7 +1868,7 @@ int rlink_quit(void)
|
||||||
~0,
|
~0,
|
||||||
EP1_CMD_SET_PORTD_VPP,
|
EP1_CMD_SET_PORTD_VPP,
|
||||||
~0
|
~0
|
||||||
);
|
);
|
||||||
|
|
||||||
usb_release_interface(pHDev,0);
|
usb_release_interface(pHDev,0);
|
||||||
usb_close(pHDev);
|
usb_close(pHDev);
|
||||||
|
|
178
src/jtag/tcl.c
178
src/jtag/tcl.c
|
@ -228,11 +228,11 @@ static int jtag_tap_configure_cmd(Jim_GetOptInfo *goi, jtag_tap_t * tap)
|
||||||
switch (n->value) {
|
switch (n->value) {
|
||||||
case JCFG_EVENT:
|
case JCFG_EVENT:
|
||||||
if (goi->argc == 0) {
|
if (goi->argc == 0) {
|
||||||
Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ..." );
|
Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ...");
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
e = Jim_GetOpt_Nvp(goi, nvp_jtag_tap_event, &n );
|
e = Jim_GetOpt_Nvp(goi, nvp_jtag_tap_event, &n);
|
||||||
if (e != JIM_OK) {
|
if (e != JIM_OK) {
|
||||||
Jim_GetOpt_NvpUnknown(goi, nvp_jtag_tap_event, 1);
|
Jim_GetOpt_NvpUnknown(goi, nvp_jtag_tap_event, 1);
|
||||||
return e;
|
return e;
|
||||||
|
@ -306,7 +306,7 @@ static int is_bad_irval(int ir_length, jim_wide w)
|
||||||
return (w & v) != 0;
|
return (w & v) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int jim_newtap_cmd(Jim_GetOptInfo *goi )
|
static int jim_newtap_cmd(Jim_GetOptInfo *goi)
|
||||||
{
|
{
|
||||||
jtag_tap_t *pTap;
|
jtag_tap_t *pTap;
|
||||||
jim_wide w;
|
jim_wide w;
|
||||||
|
@ -340,20 +340,20 @@ static int jim_newtap_cmd(Jim_GetOptInfo *goi )
|
||||||
/*
|
/*
|
||||||
* we expect CHIP + TAP + OPTIONS
|
* we expect CHIP + TAP + OPTIONS
|
||||||
* */
|
* */
|
||||||
if (goi->argc < 3 ){
|
if (goi->argc < 3){
|
||||||
Jim_SetResult_sprintf(goi->interp, "Missing CHIP TAP OPTIONS ....");
|
Jim_SetResult_sprintf(goi->interp, "Missing CHIP TAP OPTIONS ....");
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
Jim_GetOpt_String(goi, &cp, NULL );
|
Jim_GetOpt_String(goi, &cp, NULL);
|
||||||
pTap->chip = strdup(cp);
|
pTap->chip = strdup(cp);
|
||||||
|
|
||||||
Jim_GetOpt_String(goi, &cp, NULL );
|
Jim_GetOpt_String(goi, &cp, NULL);
|
||||||
pTap->tapname = strdup(cp);
|
pTap->tapname = strdup(cp);
|
||||||
|
|
||||||
/* name + dot + name + null */
|
/* name + dot + name + null */
|
||||||
x = strlen(pTap->chip) + 1 + strlen(pTap->tapname) + 1;
|
x = strlen(pTap->chip) + 1 + strlen(pTap->tapname) + 1;
|
||||||
cp = malloc(x );
|
cp = malloc(x);
|
||||||
sprintf(cp, "%s.%s", pTap->chip, pTap->tapname );
|
sprintf(cp, "%s.%s", pTap->chip, pTap->tapname);
|
||||||
pTap->dotted_name = cp;
|
pTap->dotted_name = cp;
|
||||||
|
|
||||||
LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
|
LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
|
||||||
|
@ -367,14 +367,14 @@ static int jim_newtap_cmd(Jim_GetOptInfo *goi )
|
||||||
/* clear them as we find them */
|
/* clear them as we find them */
|
||||||
reqbits = (NTREQ_IRLEN | NTREQ_IRCAPTURE | NTREQ_IRMASK);
|
reqbits = (NTREQ_IRLEN | NTREQ_IRCAPTURE | NTREQ_IRMASK);
|
||||||
|
|
||||||
while (goi->argc ){
|
while (goi->argc){
|
||||||
e = Jim_GetOpt_Nvp(goi, opts, &n );
|
e = Jim_GetOpt_Nvp(goi, opts, &n);
|
||||||
if (e != JIM_OK ){
|
if (e != JIM_OK){
|
||||||
Jim_GetOpt_NvpUnknown(goi, opts, 0 );
|
Jim_GetOpt_NvpUnknown(goi, opts, 0);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
LOG_DEBUG("Processing option: %s", n->name );
|
LOG_DEBUG("Processing option: %s", n->name);
|
||||||
switch (n->value ){
|
switch (n->value){
|
||||||
case NTAP_OPT_ENABLED:
|
case NTAP_OPT_ENABLED:
|
||||||
pTap->disabled_after_reset = false;
|
pTap->disabled_after_reset = false;
|
||||||
break;
|
break;
|
||||||
|
@ -385,7 +385,7 @@ static int jim_newtap_cmd(Jim_GetOptInfo *goi )
|
||||||
{
|
{
|
||||||
uint32_t *new_expected_ids;
|
uint32_t *new_expected_ids;
|
||||||
|
|
||||||
e = Jim_GetOpt_Wide(goi, &w );
|
e = Jim_GetOpt_Wide(goi, &w);
|
||||||
if (e != JIM_OK) {
|
if (e != JIM_OK) {
|
||||||
Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name);
|
Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name);
|
||||||
return e;
|
return e;
|
||||||
|
@ -409,9 +409,9 @@ static int jim_newtap_cmd(Jim_GetOptInfo *goi )
|
||||||
case NTAP_OPT_IRLEN:
|
case NTAP_OPT_IRLEN:
|
||||||
case NTAP_OPT_IRMASK:
|
case NTAP_OPT_IRMASK:
|
||||||
case NTAP_OPT_IRCAPTURE:
|
case NTAP_OPT_IRCAPTURE:
|
||||||
e = Jim_GetOpt_Wide(goi, &w );
|
e = Jim_GetOpt_Wide(goi, &w);
|
||||||
if (e != JIM_OK ){
|
if (e != JIM_OK){
|
||||||
Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name );
|
Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
switch (n->value){
|
switch (n->value){
|
||||||
|
@ -441,7 +441,7 @@ static int jim_newtap_cmd(Jim_GetOptInfo *goi )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} /* switch (n->value) */
|
} /* switch (n->value) */
|
||||||
} /* while (goi->argc ) */
|
} /* while (goi->argc) */
|
||||||
|
|
||||||
/* default is enabled-after-reset */
|
/* default is enabled-after-reset */
|
||||||
pTap->enabled = !pTap->disabled_after_reset;
|
pTap->enabled = !pTap->disabled_after_reset;
|
||||||
|
@ -475,7 +475,7 @@ static void jtag_tap_handle_event(jtag_tap_t *tap, enum jtag_event e)
|
||||||
tap->dotted_name,
|
tap->dotted_name,
|
||||||
e,
|
e,
|
||||||
Jim_Nvp_value2name_simple(nvp_jtag_tap_event, e)->name,
|
Jim_Nvp_value2name_simple(nvp_jtag_tap_event, e)->name,
|
||||||
Jim_GetString(jteap->body, NULL) );
|
Jim_GetString(jteap->body, NULL));
|
||||||
if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
|
if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
|
||||||
Jim_PrintErrorMessage(interp);
|
Jim_PrintErrorMessage(interp);
|
||||||
} else {
|
} else {
|
||||||
|
@ -498,7 +498,7 @@ static void jtag_tap_handle_event(jtag_tap_t *tap, enum jtag_event e)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
|
||||||
{
|
{
|
||||||
Jim_GetOptInfo goi;
|
Jim_GetOptInfo goi;
|
||||||
int e;
|
int e;
|
||||||
|
@ -532,44 +532,44 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
||||||
|
|
||||||
context = Jim_GetAssocData(interp, "context");
|
context = Jim_GetAssocData(interp, "context");
|
||||||
/* go past the command */
|
/* go past the command */
|
||||||
Jim_GetOpt_Setup(&goi, interp, argc-1, argv + 1 );
|
Jim_GetOpt_Setup(&goi, interp, argc-1, argv + 1);
|
||||||
|
|
||||||
e = Jim_GetOpt_Nvp(&goi, jtag_cmds, &n );
|
e = Jim_GetOpt_Nvp(&goi, jtag_cmds, &n);
|
||||||
if (e != JIM_OK ){
|
if (e != JIM_OK){
|
||||||
Jim_GetOpt_NvpUnknown(&goi, jtag_cmds, 0 );
|
Jim_GetOpt_NvpUnknown(&goi, jtag_cmds, 0);
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
Jim_SetEmptyResult(goi.interp );
|
Jim_SetEmptyResult(goi.interp);
|
||||||
switch (n->value ){
|
switch (n->value){
|
||||||
case JTAG_CMD_INTERFACE:
|
case JTAG_CMD_INTERFACE:
|
||||||
/* return the name of the interface */
|
/* return the name of the interface */
|
||||||
/* TCL code might need to know the exact type... */
|
/* TCL code might need to know the exact type... */
|
||||||
/* FUTURE: we allow this as a means to "set" the interface. */
|
/* FUTURE: we allow this as a means to "set" the interface. */
|
||||||
if (goi.argc != 0 ){
|
if (goi.argc != 0){
|
||||||
Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)");
|
Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)");
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
Jim_SetResultString(goi.interp, jtag_interface->name, -1 );
|
Jim_SetResultString(goi.interp, jtag_interface->name, -1);
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
case JTAG_CMD_INIT_RESET:
|
case JTAG_CMD_INIT_RESET:
|
||||||
if (goi.argc != 0 ){
|
if (goi.argc != 0){
|
||||||
Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)");
|
Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)");
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
e = jtag_init_reset(context);
|
e = jtag_init_reset(context);
|
||||||
if (e != ERROR_OK ){
|
if (e != ERROR_OK){
|
||||||
Jim_SetResult_sprintf(goi.interp, "error: %d", e);
|
Jim_SetResult_sprintf(goi.interp, "error: %d", e);
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
return JIM_OK;
|
return JIM_OK;
|
||||||
case JTAG_CMD_NEWTAP:
|
case JTAG_CMD_NEWTAP:
|
||||||
return jim_newtap_cmd(&goi );
|
return jim_newtap_cmd(&goi);
|
||||||
break;
|
break;
|
||||||
case JTAG_CMD_TAPISENABLED:
|
case JTAG_CMD_TAPISENABLED:
|
||||||
case JTAG_CMD_TAPENABLE:
|
case JTAG_CMD_TAPENABLE:
|
||||||
case JTAG_CMD_TAPDISABLE:
|
case JTAG_CMD_TAPDISABLE:
|
||||||
if (goi.argc != 1 ){
|
if (goi.argc != 1){
|
||||||
Jim_SetResultString(goi.interp, "Too many parameters",-1 );
|
Jim_SetResultString(goi.interp, "Too many parameters",-1);
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,7 +619,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JTAG_CMD_CGET:
|
case JTAG_CMD_CGET:
|
||||||
if (goi.argc < 2 ){
|
if (goi.argc < 2){
|
||||||
Jim_WrongNumArgs(goi.interp, 0, NULL, "?tap-name? -option ...");
|
Jim_WrongNumArgs(goi.interp, 0, NULL, "?tap-name? -option ...");
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
@ -628,8 +628,8 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
||||||
jtag_tap_t *t;
|
jtag_tap_t *t;
|
||||||
|
|
||||||
Jim_GetOpt_Obj(&goi, &o);
|
Jim_GetOpt_Obj(&goi, &o);
|
||||||
t = jtag_tap_by_jim_obj(goi.interp, o );
|
t = jtag_tap_by_jim_obj(goi.interp, o);
|
||||||
if (t == NULL ){
|
if (t == NULL){
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -639,7 +639,7 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JTAG_CMD_CONFIGURE:
|
case JTAG_CMD_CONFIGURE:
|
||||||
if (goi.argc < 3 ){
|
if (goi.argc < 3){
|
||||||
Jim_WrongNumArgs(goi.interp, 0, NULL, "?tap-name? -option ?VALUE? ...");
|
Jim_WrongNumArgs(goi.interp, 0, NULL, "?tap-name? -option ?VALUE? ...");
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
@ -648,8 +648,8 @@ static int jim_jtag_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv )
|
||||||
jtag_tap_t *t;
|
jtag_tap_t *t;
|
||||||
|
|
||||||
Jim_GetOpt_Obj(&goi, &o);
|
Jim_GetOpt_Obj(&goi, &o);
|
||||||
t = jtag_tap_by_jim_obj(goi.interp, o );
|
t = jtag_tap_by_jim_obj(goi.interp, o);
|
||||||
if (t == NULL ){
|
if (t == NULL){
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +806,7 @@ static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *c
|
||||||
* argv[ 3] = not actually used by anything but in the docs
|
* argv[ 3] = not actually used by anything but in the docs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (argc < 4 ){
|
if (argc < 4){
|
||||||
command_print(cmd_ctx, "OLD DEPRECATED SYNTAX: Please use the NEW syntax");
|
command_print(cmd_ctx, "OLD DEPRECATED SYNTAX: Please use the NEW syntax");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -814,41 +814,41 @@ static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *c
|
||||||
command_print(cmd_ctx, "jtag newtap CHIP TAP -irlen %s -ircapture %s -irvalue %s",
|
command_print(cmd_ctx, "jtag newtap CHIP TAP -irlen %s -ircapture %s -irvalue %s",
|
||||||
args[0],
|
args[0],
|
||||||
args[1],
|
args[1],
|
||||||
args[2] );
|
args[2]);
|
||||||
command_print(cmd_ctx, "Example: STM32 has 2 taps, the cortexM3(len4) + boundaryscan(len5)");
|
command_print(cmd_ctx, "Example: STM32 has 2 taps, the cortexM3(len4) + boundaryscan(len5)");
|
||||||
command_print(cmd_ctx, "jtag newtap stm32 cortexm3 ....., thus creating the tap: \"stm32.cortexm3\"");
|
command_print(cmd_ctx, "jtag newtap stm32 cortexm3 ....., thus creating the tap: \"stm32.cortexm3\"");
|
||||||
command_print(cmd_ctx, "jtag newtap stm32 boundary ....., and the tap: \"stm32.boundary\"");
|
command_print(cmd_ctx, "jtag newtap stm32 boundary ....., and the tap: \"stm32.boundary\"");
|
||||||
command_print(cmd_ctx, "And then refer to the taps by the dotted name.");
|
command_print(cmd_ctx, "And then refer to the taps by the dotted name.");
|
||||||
|
|
||||||
newargs[0] = Jim_NewStringObj(interp, "jtag", -1 );
|
newargs[0] = Jim_NewStringObj(interp, "jtag", -1);
|
||||||
newargs[1] = Jim_NewStringObj(interp, "newtap", -1 );
|
newargs[1] = Jim_NewStringObj(interp, "newtap", -1);
|
||||||
sprintf(buf, "chip%d", jtag_tap_count() );
|
sprintf(buf, "chip%d", jtag_tap_count());
|
||||||
newargs[2] = Jim_NewStringObj(interp, buf, -1 );
|
newargs[2] = Jim_NewStringObj(interp, buf, -1);
|
||||||
sprintf(buf, "tap%d", jtag_tap_count() );
|
sprintf(buf, "tap%d", jtag_tap_count());
|
||||||
newargs[3] = Jim_NewStringObj(interp, buf, -1 );
|
newargs[3] = Jim_NewStringObj(interp, buf, -1);
|
||||||
newargs[4] = Jim_NewStringObj(interp, "-irlen", -1 );
|
newargs[4] = Jim_NewStringObj(interp, "-irlen", -1);
|
||||||
newargs[5] = Jim_NewStringObj(interp, args[0], -1 );
|
newargs[5] = Jim_NewStringObj(interp, args[0], -1);
|
||||||
newargs[6] = Jim_NewStringObj(interp, "-ircapture", -1 );
|
newargs[6] = Jim_NewStringObj(interp, "-ircapture", -1);
|
||||||
newargs[7] = Jim_NewStringObj(interp, args[1], -1 );
|
newargs[7] = Jim_NewStringObj(interp, args[1], -1);
|
||||||
newargs[8] = Jim_NewStringObj(interp, "-irmask", -1 );
|
newargs[8] = Jim_NewStringObj(interp, "-irmask", -1);
|
||||||
newargs[9] = Jim_NewStringObj(interp, args[2], -1 );
|
newargs[9] = Jim_NewStringObj(interp, args[2], -1);
|
||||||
|
|
||||||
command_print(cmd_ctx, "NEW COMMAND:");
|
command_print(cmd_ctx, "NEW COMMAND:");
|
||||||
sprintf(buf, "%s %s %s %s %s %s %s %s %s %s",
|
sprintf(buf, "%s %s %s %s %s %s %s %s %s %s",
|
||||||
Jim_GetString(newargs[0], NULL ),
|
Jim_GetString(newargs[0], NULL),
|
||||||
Jim_GetString(newargs[1], NULL ),
|
Jim_GetString(newargs[1], NULL),
|
||||||
Jim_GetString(newargs[2], NULL ),
|
Jim_GetString(newargs[2], NULL),
|
||||||
Jim_GetString(newargs[3], NULL ),
|
Jim_GetString(newargs[3], NULL),
|
||||||
Jim_GetString(newargs[4], NULL ),
|
Jim_GetString(newargs[4], NULL),
|
||||||
Jim_GetString(newargs[5], NULL ),
|
Jim_GetString(newargs[5], NULL),
|
||||||
Jim_GetString(newargs[6], NULL ),
|
Jim_GetString(newargs[6], NULL),
|
||||||
Jim_GetString(newargs[7], NULL ),
|
Jim_GetString(newargs[7], NULL),
|
||||||
Jim_GetString(newargs[8], NULL ),
|
Jim_GetString(newargs[8], NULL),
|
||||||
Jim_GetString(newargs[9], NULL ) );
|
Jim_GetString(newargs[9], NULL));
|
||||||
|
|
||||||
e = jim_jtag_command(interp, 10, newargs );
|
e = jim_jtag_command(interp, 10, newargs);
|
||||||
if (e != JIM_OK ){
|
if (e != JIM_OK){
|
||||||
command_print(cmd_ctx, "%s", Jim_GetString(Jim_GetResult(interp), NULL ) );
|
command_print(cmd_ctx, "%s", Jim_GetString(Jim_GetResult(interp), NULL));
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -861,7 +861,7 @@ static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
command_print(cmd_ctx, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr ");
|
command_print(cmd_ctx, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr ");
|
||||||
command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
|
command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
|
||||||
|
|
||||||
while (tap ){
|
while (tap){
|
||||||
uint32_t expected, expected_mask, cur_instr, ii;
|
uint32_t expected, expected_mask, cur_instr, ii;
|
||||||
expected = buf_get_u32(tap->expected, 0, tap->ir_length);
|
expected = buf_get_u32(tap->expected, 0, tap->ir_length);
|
||||||
expected_mask = buf_get_u32(tap->expected_mask, 0, tap->ir_length);
|
expected_mask = buf_get_u32(tap->expected_mask, 0, tap->ir_length);
|
||||||
|
@ -1174,20 +1174,20 @@ static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, c
|
||||||
*/
|
*/
|
||||||
endstate = TAP_IDLE;
|
endstate = TAP_IDLE;
|
||||||
|
|
||||||
if (argc >= 4 ){
|
if (argc >= 4){
|
||||||
/* have at least one pair of numbers. */
|
/* have at least one pair of numbers. */
|
||||||
/* is last pair the magic text? */
|
/* is last pair the magic text? */
|
||||||
if (0 == strcmp("-endstate", args[ argc - 2 ] ) ){
|
if (0 == strcmp("-endstate", args[ argc - 2 ])){
|
||||||
const char *cpA;
|
const char *cpA;
|
||||||
const char *cpS;
|
const char *cpS;
|
||||||
cpA = args[ argc-1 ];
|
cpA = args[ argc-1 ];
|
||||||
for (endstate = 0 ; endstate < TAP_NUM_STATES ; endstate++ ){
|
for (endstate = 0 ; endstate < TAP_NUM_STATES ; endstate++){
|
||||||
cpS = tap_state_name(endstate );
|
cpS = tap_state_name(endstate);
|
||||||
if (0 == strcmp(cpA, cpS ) ){
|
if (0 == strcmp(cpA, cpS)){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (endstate >= TAP_NUM_STATES ){
|
if (endstate >= TAP_NUM_STATES){
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
} else {
|
} else {
|
||||||
if (!scan_is_safe(endstate))
|
if (!scan_is_safe(endstate))
|
||||||
|
@ -1207,10 +1207,10 @@ static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, c
|
||||||
int retval;
|
int retval;
|
||||||
for (i = 0; i < num_fields; i++)
|
for (i = 0; i < num_fields; i++)
|
||||||
{
|
{
|
||||||
tap = jtag_tap_by_string(args[i*2] );
|
tap = jtag_tap_by_string(args[i*2]);
|
||||||
if (tap == NULL)
|
if (tap == NULL)
|
||||||
{
|
{
|
||||||
command_print(cmd_ctx, "Tap: %s unknown", args[i*2] );
|
command_print(cmd_ctx, "Tap: %s unknown", args[i*2]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
int field_size = tap->ir_length;
|
int field_size = tap->ir_length;
|
||||||
|
@ -1281,12 +1281,12 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args
|
||||||
|
|
||||||
e = Jim_GetLong(interp, args[i], &bits);
|
e = Jim_GetLong(interp, args[i], &bits);
|
||||||
/* If valid - try next arg */
|
/* If valid - try next arg */
|
||||||
if (e == JIM_OK ){
|
if (e == JIM_OK){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Not valid.. are we at the end? */
|
/* Not valid.. are we at the end? */
|
||||||
if (((i + 2) != argc) ){
|
if (((i + 2) != argc)){
|
||||||
/* nope, then error */
|
/* nope, then error */
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
@ -1297,17 +1297,17 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* get arg as a string. */
|
/* get arg as a string. */
|
||||||
cp = Jim_GetString(args[i], NULL );
|
cp = Jim_GetString(args[i], NULL);
|
||||||
/* is it the magic? */
|
/* is it the magic? */
|
||||||
if (0 == strcmp("-endstate", cp ) ){
|
if (0 == strcmp("-endstate", cp)){
|
||||||
/* is the statename valid? */
|
/* is the statename valid? */
|
||||||
cp = Jim_GetString(args[i + 1], NULL );
|
cp = Jim_GetString(args[i + 1], NULL);
|
||||||
|
|
||||||
/* see if it is a valid state name */
|
/* see if it is a valid state name */
|
||||||
endstate = tap_state_by_name(cp);
|
endstate = tap_state_by_name(cp);
|
||||||
if (endstate < 0 ){
|
if (endstate < 0){
|
||||||
/* update the error message */
|
/* update the error message */
|
||||||
Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp );
|
Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp);
|
||||||
} else {
|
} else {
|
||||||
if (!scan_is_safe(endstate))
|
if (!scan_is_safe(endstate))
|
||||||
LOG_WARNING("drscan with unsafe "
|
LOG_WARNING("drscan with unsafe "
|
||||||
|
@ -1321,13 +1321,13 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Still an error? */
|
/* Still an error? */
|
||||||
if (e != JIM_OK ){
|
if (e != JIM_OK){
|
||||||
return e; /* too bad */
|
return e; /* too bad */
|
||||||
}
|
}
|
||||||
} /* validate args */
|
} /* validate args */
|
||||||
|
|
||||||
tap = jtag_tap_by_jim_obj(interp, args[1] );
|
tap = jtag_tap_by_jim_obj(interp, args[1]);
|
||||||
if (tap == NULL ){
|
if (tap == NULL){
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1399,12 +1399,12 @@ static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *ar
|
||||||
for (i = 0; i < argc-1; i++)
|
for (i = 0; i < argc-1; i++)
|
||||||
{
|
{
|
||||||
const char *cp;
|
const char *cp;
|
||||||
cp = Jim_GetString(args[i + 1], NULL );
|
cp = Jim_GetString(args[i + 1], NULL);
|
||||||
states[i] = tap_state_by_name(cp);
|
states[i] = tap_state_by_name(cp);
|
||||||
if (states[i] < 0 )
|
if (states[i] < 0)
|
||||||
{
|
{
|
||||||
/* update the error message */
|
/* update the error message */
|
||||||
Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp );
|
Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp);
|
||||||
return JIM_ERR;
|
return JIM_ERR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -378,7 +378,7 @@ static int vsllink_execute_queue(void)
|
||||||
break; /* above stable states are OK */
|
break; /* above stable states are OK */
|
||||||
default:
|
default:
|
||||||
LOG_ERROR("jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
|
LOG_ERROR("jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
|
||||||
tap_state_name(tap_get_state()) );
|
tap_state_name(tap_get_state()));
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
vsllink_stableclocks(cmd->cmd.stableclocks->num_cycles, scan_size);
|
vsllink_stableclocks(cmd->cmd.stableclocks->num_cycles, scan_size);
|
||||||
|
@ -1178,7 +1178,7 @@ static void vsllink_scan_normal(bool ir_scan, enum scan_type type, uint8_t *buff
|
||||||
uint8_t bits_left, tms_tmp, tdi_len;
|
uint8_t bits_left, tms_tmp, tdi_len;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (0 == scan_size )
|
if (0 == scan_size)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1845,7 +1845,7 @@ static int vsllink_usb_message(vsllink_jtag_t *vsllink_jtag, int out_length, int
|
||||||
if (in_length > 0)
|
if (in_length > 0)
|
||||||
{
|
{
|
||||||
result = vsllink_usb_read(vsllink_jtag);
|
result = vsllink_usb_read(vsllink_jtag);
|
||||||
if (result == in_length )
|
if (result == in_length)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#define TEST_MANUAL() 0
|
#define TEST_MANUAL() 0
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
int diag_printf(const char *fmt, ... );
|
int diag_printf(const char *fmt, ...);
|
||||||
#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b); diag_printf("poke 0x%08x,0x%08x\n", a, b)
|
#define ZY1000_POKE(a, b) HAL_WRITE_UINT32(a, b); diag_printf("poke 0x%08x,0x%08x\n", a, b)
|
||||||
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b); diag_printf("peek 0x%08x = 0x%08x\n", a, b)
|
#define ZY1000_PEEK(a, b) HAL_READ_UINT32(a, b); diag_printf("peek 0x%08x = 0x%08x\n", a, b)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -208,7 +208,7 @@ command_context_t *setup_command_handler(void)
|
||||||
}
|
}
|
||||||
LOG_DEBUG("log init complete");
|
LOG_DEBUG("log init complete");
|
||||||
|
|
||||||
LOG_OUTPUT(OPENOCD_VERSION "\n" );
|
LOG_OUTPUT(OPENOCD_VERSION "\n");
|
||||||
|
|
||||||
register_command(cmd_ctx, NULL, "init", handle_init_command,
|
register_command(cmd_ctx, NULL, "init", handle_init_command,
|
||||||
COMMAND_ANY, "initializes target and servers - nop on subsequent invocations");
|
COMMAND_ANY, "initializes target and servers - nop on subsequent invocations");
|
||||||
|
@ -264,7 +264,7 @@ int openocd_main(int argc, char *argv[])
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
ret = parse_config_file(cmd_ctx);
|
ret = parse_config_file(cmd_ctx);
|
||||||
if ((ret != ERROR_OK) && (ret != ERROR_COMMAND_CLOSE_CONNECTION) )
|
if ((ret != ERROR_OK) && (ret != ERROR_COMMAND_CLOSE_CONNECTION))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
#if BUILD_HTTPD
|
#if BUILD_HTTPD
|
||||||
|
|
|
@ -243,7 +243,7 @@ static int virtex2_pld_device_command(struct command_context_s *cmd_ctx,
|
||||||
|
|
||||||
tap = jtag_tap_by_string(args[1]);
|
tap = jtag_tap_by_string(args[1]);
|
||||||
if (tap == NULL) {
|
if (tap == NULL) {
|
||||||
command_print(cmd_ctx, "Tap: %s does not exist", args[1] );
|
command_print(cmd_ctx, "Tap: %s does not exist", args[1]);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -319,9 +319,9 @@ int gdb_put_packet_inner(connection_t *connection, char *buffer, int len)
|
||||||
break;
|
break;
|
||||||
if ((retval = gdb_get_char(connection, &reply)) != ERROR_OK)
|
if ((retval = gdb_get_char(connection, &reply)) != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
if (reply == '$' ){
|
if (reply == '$'){
|
||||||
/* fix a problem with some IAR tools */
|
/* fix a problem with some IAR tools */
|
||||||
gdb_putback_char(connection, reply );
|
gdb_putback_char(connection, reply);
|
||||||
LOG_DEBUG("Unexpected start of new packet");
|
LOG_DEBUG("Unexpected start of new packet");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -402,9 +402,9 @@ int gdb_put_packet_inner(connection_t *connection, char *buffer, int len)
|
||||||
log_remove_callback(gdb_log_callback, connection);
|
log_remove_callback(gdb_log_callback, connection);
|
||||||
LOG_WARNING("negative reply, retrying");
|
LOG_WARNING("negative reply, retrying");
|
||||||
}
|
}
|
||||||
else if (reply == '$' ){
|
else if (reply == '$'){
|
||||||
LOG_ERROR("GDB missing ack(1) - assumed good");
|
LOG_ERROR("GDB missing ack(1) - assumed good");
|
||||||
gdb_putback_char(connection, reply );
|
gdb_putback_char(connection, reply);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
@ -413,9 +413,9 @@ int gdb_put_packet_inner(connection_t *connection, char *buffer, int len)
|
||||||
return ERROR_SERVER_REMOTE_CLOSED;
|
return ERROR_SERVER_REMOTE_CLOSED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (reply == '$' ){
|
else if (reply == '$'){
|
||||||
LOG_ERROR("GDB missing ack(2) - assumed good");
|
LOG_ERROR("GDB missing ack(2) - assumed good");
|
||||||
gdb_putback_char(connection, reply );
|
gdb_putback_char(connection, reply);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -709,7 +709,7 @@ int gdb_target_callback_event_handler(struct target_s *target, enum target_event
|
||||||
int retval;
|
int retval;
|
||||||
connection_t *connection = priv;
|
connection_t *connection = priv;
|
||||||
|
|
||||||
target_handle_event(target, event );
|
target_handle_event(target, event);
|
||||||
switch (event)
|
switch (event)
|
||||||
{
|
{
|
||||||
case TARGET_EVENT_EARLY_HALTED:
|
case TARGET_EVENT_EARLY_HALTED:
|
||||||
|
@ -719,7 +719,7 @@ int gdb_target_callback_event_handler(struct target_s *target, enum target_event
|
||||||
target_call_event_callbacks(target, TARGET_EVENT_GDB_END);
|
target_call_event_callbacks(target, TARGET_EVENT_GDB_END);
|
||||||
break;
|
break;
|
||||||
case TARGET_EVENT_GDB_FLASH_ERASE_START:
|
case TARGET_EVENT_GDB_FLASH_ERASE_START:
|
||||||
target_handle_event(target, TARGET_EVENT_OLD_gdb_program_config );
|
target_handle_event(target, TARGET_EVENT_OLD_gdb_program_config);
|
||||||
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
if ((retval = jtag_execute_queue()) != ERROR_OK)
|
||||||
{
|
{
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -800,7 +800,7 @@ int gdb_new_connection(connection_t *connection)
|
||||||
*/
|
*/
|
||||||
if (initial_ack != '+')
|
if (initial_ack != '+')
|
||||||
gdb_putback_char(connection, initial_ack);
|
gdb_putback_char(connection, initial_ack);
|
||||||
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_ATTACH );
|
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_ATTACH);
|
||||||
|
|
||||||
gdb_actual_connections++;
|
gdb_actual_connections++;
|
||||||
|
|
||||||
|
@ -839,7 +839,7 @@ int gdb_connection_closed(connection_t *connection)
|
||||||
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_END);
|
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_END);
|
||||||
log_remove_callback(gdb_log_callback, connection);
|
log_remove_callback(gdb_log_callback, connection);
|
||||||
|
|
||||||
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_DETACH );
|
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_DETACH);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -847,7 +847,7 @@ int gdb_connection_closed(connection_t *connection)
|
||||||
void gdb_send_error(connection_t *connection, uint8_t the_error)
|
void gdb_send_error(connection_t *connection, uint8_t the_error)
|
||||||
{
|
{
|
||||||
char err[4];
|
char err[4];
|
||||||
snprintf(err, 4, "E%2.2X", the_error );
|
snprintf(err, 4, "E%2.2X", the_error);
|
||||||
gdb_put_packet(connection, err, 3);
|
gdb_put_packet(connection, err, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1360,7 +1360,7 @@ int gdb_step_continue_packet(connection_t *connection, target_t *target, char *p
|
||||||
if (packet[0] == 'c')
|
if (packet[0] == 'c')
|
||||||
{
|
{
|
||||||
LOG_DEBUG("continue");
|
LOG_DEBUG("continue");
|
||||||
target_handle_event(target, TARGET_EVENT_OLD_pre_resume );
|
target_handle_event(target, TARGET_EVENT_OLD_pre_resume);
|
||||||
retval = target_resume(target, current, address, 0, 0); /* resume at current address, don't handle breakpoints, not debugging */
|
retval = target_resume(target, current, address, 0, 0); /* resume at current address, don't handle breakpoints, not debugging */
|
||||||
}
|
}
|
||||||
else if (packet[0] == 's')
|
else if (packet[0] == 's')
|
||||||
|
@ -1872,7 +1872,7 @@ int gdb_v_packet(connection_t *connection, target_t *target, char *packet, int p
|
||||||
|
|
||||||
/* perform any target specific operations before the erase */
|
/* perform any target specific operations before the erase */
|
||||||
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_ERASE_START);
|
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_ERASE_START);
|
||||||
result = flash_erase_address_range(gdb_service->target, addr, length );
|
result = flash_erase_address_range(gdb_service->target, addr, length);
|
||||||
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_ERASE_END);
|
target_call_event_callbacks(gdb_service->target, TARGET_EVENT_GDB_FLASH_ERASE_END);
|
||||||
|
|
||||||
/* perform erase */
|
/* perform erase */
|
||||||
|
@ -1964,10 +1964,10 @@ int gdb_v_packet(connection_t *connection, target_t *target, char *packet, int p
|
||||||
int gdb_detach(connection_t *connection, target_t *target)
|
int gdb_detach(connection_t *connection, target_t *target)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (detach_mode )
|
switch (detach_mode)
|
||||||
{
|
{
|
||||||
case GDB_DETACH_RESUME:
|
case GDB_DETACH_RESUME:
|
||||||
target_handle_event(target, TARGET_EVENT_OLD_pre_resume );
|
target_handle_event(target, TARGET_EVENT_OLD_pre_resume);
|
||||||
target_resume(target, 1, 0, 1, 0);
|
target_resume(target, 1, 0, 1, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2036,18 +2036,18 @@ int gdb_input_inner(connection_t *connection)
|
||||||
/* terminate with zero */
|
/* terminate with zero */
|
||||||
packet[packet_size] = 0;
|
packet[packet_size] = 0;
|
||||||
|
|
||||||
if (LOG_LEVEL_IS(LOG_LVL_DEBUG ) ){
|
if (LOG_LEVEL_IS(LOG_LVL_DEBUG)){
|
||||||
if (packet[0] == 'X' ){
|
if (packet[0] == 'X'){
|
||||||
// binary packets spew junk into the debug log stream
|
// binary packets spew junk into the debug log stream
|
||||||
char buf[ 50 ];
|
char buf[ 50 ];
|
||||||
int x;
|
int x;
|
||||||
for (x = 0 ; (x < 49) && (packet[x] != ':') ; x++ ){
|
for (x = 0 ; (x < 49) && (packet[x] != ':') ; x++){
|
||||||
buf[x] = packet[x];
|
buf[x] = packet[x];
|
||||||
}
|
}
|
||||||
buf[x] = 0;
|
buf[x] = 0;
|
||||||
LOG_DEBUG("received packet: '%s:<binary-data>'", buf );
|
LOG_DEBUG("received packet: '%s:<binary-data>'", buf);
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("received packet: '%s'", packet );
|
LOG_DEBUG("received packet: '%s'", packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ static int httpd_Jim_Command_writeform(Jim_Interp *interp, int argc,
|
||||||
|
|
||||||
const char *script = alloc_printf("set dummy_val $httppostdata(%s); set dummy_val",
|
const char *script = alloc_printf("set dummy_val $httppostdata(%s); set dummy_val",
|
||||||
name);
|
name);
|
||||||
retcode = Jim_Eval_Named(interp, script, "httpd.c", __LINE__ );
|
retcode = Jim_Eval_Named(interp, script, "httpd.c", __LINE__);
|
||||||
free((void *) script);
|
free((void *) script);
|
||||||
if (retcode != JIM_OK)
|
if (retcode != JIM_OK)
|
||||||
return retcode;
|
return retcode;
|
||||||
|
@ -152,7 +152,7 @@ httpd_Jim_Command_formfetch(Jim_Interp *interp,
|
||||||
|
|
||||||
const char *script = alloc_printf("set dummy_val $httppostdata(%s); set dummy_val",
|
const char *script = alloc_printf("set dummy_val $httppostdata(%s); set dummy_val",
|
||||||
name);
|
name);
|
||||||
int retcode = Jim_Eval_Named(interp, script, "httpd.c", __LINE__ );
|
int retcode = Jim_Eval_Named(interp, script, "httpd.c", __LINE__);
|
||||||
free((void *) script);
|
free((void *) script);
|
||||||
if (retcode != JIM_OK)
|
if (retcode != JIM_OK)
|
||||||
{
|
{
|
||||||
|
@ -257,7 +257,7 @@ int handle_request(struct MHD_Connection * connection, const char * url)
|
||||||
|
|
||||||
const char *script = alloc_printf(
|
const char *script = alloc_printf(
|
||||||
"global httpdata; source {%s}; set httpdata", url);
|
"global httpdata; source {%s}; set httpdata", url);
|
||||||
retcode = Jim_Eval_Named(interp, script, "httpd.c", __LINE__ );
|
retcode = Jim_Eval_Named(interp, script, "httpd.c", __LINE__);
|
||||||
free((void *) script);
|
free((void *) script);
|
||||||
|
|
||||||
if (retcode == JIM_ERR)
|
if (retcode == JIM_ERR)
|
||||||
|
@ -415,8 +415,8 @@ static pthread_mutex_t mutex;
|
||||||
int httpd_start(void)
|
int httpd_start(void)
|
||||||
{
|
{
|
||||||
pthread_mutexattr_t attr;
|
pthread_mutexattr_t attr;
|
||||||
pthread_mutexattr_init(&attr );
|
pthread_mutexattr_init(&attr);
|
||||||
pthread_mutex_init(&mutex, &attr );
|
pthread_mutex_init(&mutex, &attr);
|
||||||
|
|
||||||
int port = 8888;
|
int port = 8888;
|
||||||
LOG_USER("Launching httpd server on port %d", port);
|
LOG_USER("Launching httpd server on port %d", port);
|
||||||
|
@ -446,16 +446,16 @@ int httpd_start(void)
|
||||||
void httpd_stop(void)
|
void httpd_stop(void)
|
||||||
{
|
{
|
||||||
MHD_stop_daemon(d);
|
MHD_stop_daemon(d);
|
||||||
pthread_mutex_destroy(&mutex );
|
pthread_mutex_destroy(&mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void openocd_sleep_prelude(void)
|
void openocd_sleep_prelude(void)
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock(&mutex );
|
pthread_mutex_unlock(&mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void openocd_sleep_postlude(void)
|
void openocd_sleep_postlude(void)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&mutex );
|
pthread_mutex_lock(&mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -528,7 +528,7 @@ int server_quit(void)
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
SetConsoleCtrlHandler(ControlHandler, FALSE );
|
SetConsoleCtrlHandler(ControlHandler, FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
|
@ -273,7 +273,7 @@ static const char* tap_state_svf_name(tap_state_t state)
|
||||||
{
|
{
|
||||||
const char* ret;
|
const char* ret;
|
||||||
|
|
||||||
switch (state )
|
switch (state)
|
||||||
{
|
{
|
||||||
case TAP_RESET: ret = "RESET"; break;
|
case TAP_RESET: ret = "RESET"; break;
|
||||||
case TAP_IDLE: ret = "IDLE"; break;
|
case TAP_IDLE: ret = "IDLE"; break;
|
||||||
|
@ -422,7 +422,7 @@ static int handle_svf_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
// TAP_RESET
|
// TAP_RESET
|
||||||
jtag_add_tlr();
|
jtag_add_tlr();
|
||||||
|
|
||||||
while (ERROR_OK == svf_read_command_from_file(svf_fd) )
|
while (ERROR_OK == svf_read_command_from_file(svf_fd))
|
||||||
{
|
{
|
||||||
if (ERROR_OK != svf_run_command(cmd_ctx, svf_command_buffer))
|
if (ERROR_OK != svf_run_command(cmd_ctx, svf_command_buffer))
|
||||||
{
|
{
|
||||||
|
@ -505,7 +505,7 @@ static int svf_read_command_from_file(int fd)
|
||||||
char ch, *tmp_buffer = NULL;
|
char ch, *tmp_buffer = NULL;
|
||||||
int cmd_pos = 0, cmd_ok = 0, slash = 0, comment = 0;
|
int cmd_pos = 0, cmd_ok = 0, slash = 0, comment = 0;
|
||||||
|
|
||||||
while (!cmd_ok && (read(fd, &ch, 1) > 0) )
|
while (!cmd_ok && (read(fd, &ch, 1) > 0))
|
||||||
{
|
{
|
||||||
switch (ch)
|
switch (ch)
|
||||||
{
|
{
|
||||||
|
|
|
@ -709,7 +709,7 @@ int arm11_arch_state(struct target_s *target)
|
||||||
arm11_common_t * arm11 = target->arch_info;
|
arm11_common_t * arm11 = target->arch_info;
|
||||||
|
|
||||||
LOG_USER("target halted due to %s\ncpsr: 0x%8.8" PRIx32 " pc: 0x%8.8" PRIx32 "",
|
LOG_USER("target halted due to %s\ncpsr: 0x%8.8" PRIx32 " pc: 0x%8.8" PRIx32 "",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason )->name,
|
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason)->name,
|
||||||
R(CPSR),
|
R(CPSR),
|
||||||
R(PC));
|
R(PC));
|
||||||
|
|
||||||
|
@ -732,7 +732,7 @@ int arm11_halt(struct target_s *target)
|
||||||
arm11_common_t * arm11 = target->arch_info;
|
arm11_common_t * arm11 = target->arch_info;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name );
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
if (target->state == TARGET_UNKNOWN)
|
if (target->state == TARGET_UNKNOWN)
|
||||||
{
|
{
|
||||||
|
@ -789,7 +789,7 @@ int arm11_resume(struct target_s *target, int current, uint32_t address, int han
|
||||||
arm11_common_t * arm11 = target->arch_info;
|
arm11_common_t * arm11 = target->arch_info;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name );
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
|
|
||||||
if (target->state != TARGET_HALTED)
|
if (target->state != TARGET_HALTED)
|
||||||
|
@ -889,7 +889,7 @@ int arm11_step(struct target_s *target, int current, uint32_t address, int handl
|
||||||
FNC_INFO;
|
FNC_INFO;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name );
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
if (target->state != TARGET_HALTED)
|
if (target->state != TARGET_HALTED)
|
||||||
{
|
{
|
||||||
|
@ -1035,7 +1035,7 @@ int arm11_deassert_reset(struct target_s *target)
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name );
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
|
|
||||||
/* deassert reset lines */
|
/* deassert reset lines */
|
||||||
|
@ -1960,7 +1960,7 @@ int arm11_register_commands(struct command_context_s *cmd_ctx)
|
||||||
|
|
||||||
RC_FINAL_BOOL("error_fatal", "Terminate program if transfer error was found (default: enabled)",
|
RC_FINAL_BOOL("error_fatal", "Terminate program if transfer error was found (default: enabled)",
|
||||||
memwrite_error_fatal)
|
memwrite_error_fatal)
|
||||||
) /* memwrite */
|
) /* memwrite */
|
||||||
|
|
||||||
RC_FINAL_BOOL("no_increment", "Don't increment address on multi-read/-write (default: disabled)",
|
RC_FINAL_BOOL("no_increment", "Don't increment address on multi-read/-write (default: disabled)",
|
||||||
memrw_no_increment)
|
memrw_no_increment)
|
||||||
|
@ -1976,7 +1976,7 @@ int arm11_register_commands(struct command_context_s *cmd_ctx)
|
||||||
|
|
||||||
RC_FINAL("mcr", "Write Coprocessor register",
|
RC_FINAL("mcr", "Write Coprocessor register",
|
||||||
arm11_handle_mcr)
|
arm11_handle_mcr)
|
||||||
) /* arm11 */
|
) /* arm11 */
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -319,7 +319,7 @@ int arm720t_arch_state(struct target_s *target)
|
||||||
"cpsr: 0x%8.8" PRIx32 " pc: 0x%8.8" PRIx32 "\n"
|
"cpsr: 0x%8.8" PRIx32 " pc: 0x%8.8" PRIx32 "\n"
|
||||||
"MMU: %s, Cache: %s",
|
"MMU: %s, Cache: %s",
|
||||||
armv4_5_state_strings[armv4_5->core_state],
|
armv4_5_state_strings[armv4_5->core_state],
|
||||||
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason )->name ,
|
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason)->name ,
|
||||||
armv4_5_mode_strings[armv4_5_mode_to_number(armv4_5->core_mode)],
|
armv4_5_mode_strings[armv4_5_mode_to_number(armv4_5->core_mode)],
|
||||||
buf_get_u32(armv4_5->core_cache->reg_list[ARMV4_5_CPSR].value, 0, 32),
|
buf_get_u32(armv4_5->core_cache->reg_list[ARMV4_5_CPSR].value, 0, 32),
|
||||||
buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32),
|
buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32),
|
||||||
|
|
|
@ -526,7 +526,7 @@ int arm7_9_set_watchpoint(struct target_s *target, watchpoint_t *watchpoint)
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_ADDR_VALUE], watchpoint->address);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_ADDR_VALUE], watchpoint->address);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_ADDR_MASK], mask);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_ADDR_MASK], mask);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_DATA_MASK], watchpoint->mask);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_DATA_MASK], watchpoint->mask);
|
||||||
if (watchpoint->mask != 0xffffffffu )
|
if (watchpoint->mask != 0xffffffffu)
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_DATA_VALUE], watchpoint->value);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_DATA_VALUE], watchpoint->value);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_MASK], 0xff & ~EICE_W_CTRL_nOPC & ~rw_mask);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_MASK], 0xff & ~EICE_W_CTRL_nOPC & ~rw_mask);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_VALUE], EICE_W_CTRL_ENABLE | EICE_W_CTRL_nOPC | (watchpoint->rw & 1));
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_VALUE], EICE_W_CTRL_ENABLE | EICE_W_CTRL_nOPC | (watchpoint->rw & 1));
|
||||||
|
@ -543,7 +543,7 @@ int arm7_9_set_watchpoint(struct target_s *target, watchpoint_t *watchpoint)
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_ADDR_VALUE], watchpoint->address);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_ADDR_VALUE], watchpoint->address);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_ADDR_MASK], mask);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_ADDR_MASK], mask);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_DATA_MASK], watchpoint->mask);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_DATA_MASK], watchpoint->mask);
|
||||||
if (watchpoint->mask != 0xffffffffu )
|
if (watchpoint->mask != 0xffffffffu)
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_DATA_VALUE], watchpoint->value);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_DATA_VALUE], watchpoint->value);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_CONTROL_MASK], 0xff & ~EICE_W_CTRL_nOPC & ~rw_mask);
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_CONTROL_MASK], 0xff & ~EICE_W_CTRL_nOPC & ~rw_mask);
|
||||||
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_CONTROL_VALUE], EICE_W_CTRL_ENABLE | EICE_W_CTRL_nOPC | (watchpoint->rw & 1));
|
embeddedice_set_reg(&arm7_9->eice_cache->reg_list[EICE_W1_CONTROL_VALUE], EICE_W_CTRL_ENABLE | EICE_W_CTRL_nOPC | (watchpoint->rw & 1));
|
||||||
|
|
|
@ -822,7 +822,7 @@ int arm7tdmi_init_arch_info(target_t *target, arm7tdmi_common_t *arm7tdmi, jtag_
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int arm7tdmi_target_create(struct target_s *target, Jim_Interp *interp )
|
int arm7tdmi_target_create(struct target_s *target, Jim_Interp *interp)
|
||||||
{
|
{
|
||||||
arm7tdmi_common_t *arm7tdmi;
|
arm7tdmi_common_t *arm7tdmi;
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ int arm966e_init_arch_info(target_t *target, arm966e_common_t *arm966e, jtag_tap
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int arm966e_target_create(struct target_s *target, Jim_Interp *interp )
|
int arm966e_target_create(struct target_s *target, Jim_Interp *interp)
|
||||||
{
|
{
|
||||||
arm966e_common_t *arm966e = calloc(1,sizeof(arm966e_common_t));
|
arm966e_common_t *arm966e = calloc(1,sizeof(arm966e_common_t));
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
int handle_arm9tdmi_catch_vectors_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
|
int handle_arm9tdmi_catch_vectors_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
|
||||||
|
|
||||||
/* forward declarations */
|
/* forward declarations */
|
||||||
int arm9tdmi_target_create(struct target_s *target, Jim_Interp *interp );
|
int arm9tdmi_target_create(struct target_s *target, Jim_Interp *interp);
|
||||||
|
|
||||||
int arm9tdmi_quit(void);
|
int arm9tdmi_quit(void);
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ int adi_jtag_dp_scan(swjdp_common_t *swjdp, uint8_t instr, uint8_t reg_addr, uin
|
||||||
arm_jtag_set_instr(jtag_info, instr, NULL);
|
arm_jtag_set_instr(jtag_info, instr, NULL);
|
||||||
|
|
||||||
/* Add specified number of tck clocks before accessing memory bus */
|
/* Add specified number of tck clocks before accessing memory bus */
|
||||||
if ((instr == DAP_IR_APACC) && ((reg_addr == AP_REG_DRW)||((reg_addr&0xF0) == AP_REG_BD0) )&& (swjdp->memaccess_tck != 0))
|
if ((instr == DAP_IR_APACC) && ((reg_addr == AP_REG_DRW)||((reg_addr&0xF0) == AP_REG_BD0))&& (swjdp->memaccess_tck != 0))
|
||||||
jtag_add_runtest(swjdp->memaccess_tck, jtag_set_end_state(TAP_IDLE));
|
jtag_add_runtest(swjdp->memaccess_tck, jtag_set_end_state(TAP_IDLE));
|
||||||
|
|
||||||
fields[0].tap = jtag_info->tap;
|
fields[0].tap = jtag_info->tap;
|
||||||
|
@ -112,7 +112,7 @@ int adi_jtag_dp_scan_u32(swjdp_common_t *swjdp, uint8_t instr, uint8_t reg_addr,
|
||||||
arm_jtag_set_instr(jtag_info, instr, NULL);
|
arm_jtag_set_instr(jtag_info, instr, NULL);
|
||||||
|
|
||||||
/* Add specified number of tck clocks before accessing memory bus */
|
/* Add specified number of tck clocks before accessing memory bus */
|
||||||
if ((instr == DAP_IR_APACC) && ((reg_addr == AP_REG_DRW)||((reg_addr&0xF0) == AP_REG_BD0) )&& (swjdp->memaccess_tck != 0))
|
if ((instr == DAP_IR_APACC) && ((reg_addr == AP_REG_DRW)||((reg_addr&0xF0) == AP_REG_BD0))&& (swjdp->memaccess_tck != 0))
|
||||||
jtag_add_runtest(swjdp->memaccess_tck, jtag_set_end_state(TAP_IDLE));
|
jtag_add_runtest(swjdp->memaccess_tck, jtag_set_end_state(TAP_IDLE));
|
||||||
|
|
||||||
fields[0].tap = jtag_info->tap;
|
fields[0].tap = jtag_info->tap;
|
||||||
|
@ -374,13 +374,13 @@ int dap_setup_accessport(swjdp_common_t *swjdp, uint32_t csw, uint32_t tar)
|
||||||
if (csw != swjdp->ap_csw_value)
|
if (csw != swjdp->ap_csw_value)
|
||||||
{
|
{
|
||||||
/* LOG_DEBUG("swjdp : Set CSW %x",csw); */
|
/* LOG_DEBUG("swjdp : Set CSW %x",csw); */
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_CSW, csw );
|
dap_ap_write_reg_u32(swjdp, AP_REG_CSW, csw);
|
||||||
swjdp->ap_csw_value = csw;
|
swjdp->ap_csw_value = csw;
|
||||||
}
|
}
|
||||||
if (tar != swjdp->ap_tar_value)
|
if (tar != swjdp->ap_tar_value)
|
||||||
{
|
{
|
||||||
/* LOG_DEBUG("swjdp : Set TAR %x",tar); */
|
/* LOG_DEBUG("swjdp : Set TAR %x",tar); */
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_TAR, tar );
|
dap_ap_write_reg_u32(swjdp, AP_REG_TAR, tar);
|
||||||
swjdp->ap_tar_value = tar;
|
swjdp->ap_tar_value = tar;
|
||||||
}
|
}
|
||||||
if (csw & CSW_ADDRINC_MASK)
|
if (csw & CSW_ADDRINC_MASK)
|
||||||
|
@ -404,7 +404,7 @@ int mem_ap_read_u32(swjdp_common_t *swjdp, uint32_t address, uint32_t *value)
|
||||||
swjdp->trans_mode = TRANS_MODE_COMPOSITE;
|
swjdp->trans_mode = TRANS_MODE_COMPOSITE;
|
||||||
|
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, address & 0xFFFFFFF0);
|
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, address & 0xFFFFFFF0);
|
||||||
dap_ap_read_reg_u32(swjdp, AP_REG_BD0 | (address & 0xC), value );
|
dap_ap_read_reg_u32(swjdp, AP_REG_BD0 | (address & 0xC), value);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -428,7 +428,7 @@ int mem_ap_write_u32(swjdp_common_t *swjdp, uint32_t address, uint32_t value)
|
||||||
swjdp->trans_mode = TRANS_MODE_COMPOSITE;
|
swjdp->trans_mode = TRANS_MODE_COMPOSITE;
|
||||||
|
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, address & 0xFFFFFFF0);
|
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, address & 0xFFFFFFF0);
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (address & 0xC), value );
|
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (address & 0xC), value);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -467,7 +467,7 @@ int mem_ap_write_buf_u32(swjdp_common_t *swjdp, uint8_t *buffer, int count, uint
|
||||||
uint32_t outvalue;
|
uint32_t outvalue;
|
||||||
memcpy(&outvalue, pBuffer, sizeof(uint32_t));
|
memcpy(&outvalue, pBuffer, sizeof(uint32_t));
|
||||||
|
|
||||||
for (i = 0; i < 4; i++ )
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
*((uint8_t*)pBuffer + (adr & 0x3)) = outvalue;
|
*((uint8_t*)pBuffer + (adr & 0x3)) = outvalue;
|
||||||
outvalue >>= 8;
|
outvalue >>= 8;
|
||||||
|
@ -492,7 +492,7 @@ int mem_ap_write_buf_u32(swjdp_common_t *swjdp, uint8_t *buffer, int count, uint
|
||||||
|
|
||||||
for (writecount = 0; writecount < blocksize; writecount++)
|
for (writecount = 0; writecount < blocksize; writecount++)
|
||||||
{
|
{
|
||||||
dap_ap_write_reg(swjdp, AP_REG_DRW, buffer + 4 * writecount );
|
dap_ap_write_reg(swjdp, AP_REG_DRW, buffer + 4 * writecount);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swjdp_transaction_endcheck(swjdp) == ERROR_OK)
|
if (swjdp_transaction_endcheck(swjdp) == ERROR_OK)
|
||||||
|
@ -546,7 +546,7 @@ int mem_ap_write_buf_packed_u16(swjdp_common_t *swjdp, uint8_t *buffer, int coun
|
||||||
{
|
{
|
||||||
nbytes = MIN((writecount << 1), 4);
|
nbytes = MIN((writecount << 1), 4);
|
||||||
|
|
||||||
if (nbytes < 4 )
|
if (nbytes < 4)
|
||||||
{
|
{
|
||||||
if (mem_ap_write_buf_u16(swjdp, buffer, nbytes, address) != ERROR_OK)
|
if (mem_ap_write_buf_u16(swjdp, buffer, nbytes, address) != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -561,7 +561,7 @@ int mem_ap_write_buf_packed_u16(swjdp_common_t *swjdp, uint8_t *buffer, int coun
|
||||||
uint32_t outvalue;
|
uint32_t outvalue;
|
||||||
memcpy(&outvalue, buffer, sizeof(uint32_t));
|
memcpy(&outvalue, buffer, sizeof(uint32_t));
|
||||||
|
|
||||||
for (i = 0; i < nbytes; i++ )
|
for (i = 0; i < nbytes; i++)
|
||||||
{
|
{
|
||||||
*((uint8_t*)buffer + (address & 0x3)) = outvalue;
|
*((uint8_t*)buffer + (address & 0x3)) = outvalue;
|
||||||
outvalue >>= 8;
|
outvalue >>= 8;
|
||||||
|
@ -602,7 +602,7 @@ int mem_ap_write_buf_u16(swjdp_common_t *swjdp, uint8_t *buffer, int count, uint
|
||||||
uint16_t svalue;
|
uint16_t svalue;
|
||||||
memcpy(&svalue, buffer, sizeof(uint16_t));
|
memcpy(&svalue, buffer, sizeof(uint16_t));
|
||||||
uint32_t outvalue = (uint32_t)svalue << 8 * (address & 0x3);
|
uint32_t outvalue = (uint32_t)svalue << 8 * (address & 0x3);
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_DRW, outvalue );
|
dap_ap_write_reg_u32(swjdp, AP_REG_DRW, outvalue);
|
||||||
retval = swjdp_transaction_endcheck(swjdp);
|
retval = swjdp_transaction_endcheck(swjdp);
|
||||||
count -= 2;
|
count -= 2;
|
||||||
address += 2;
|
address += 2;
|
||||||
|
@ -638,7 +638,7 @@ int mem_ap_write_buf_packed_u8(swjdp_common_t *swjdp, uint8_t *buffer, int count
|
||||||
{
|
{
|
||||||
nbytes = MIN(writecount, 4);
|
nbytes = MIN(writecount, 4);
|
||||||
|
|
||||||
if (nbytes < 4 )
|
if (nbytes < 4)
|
||||||
{
|
{
|
||||||
if (mem_ap_write_buf_u8(swjdp, buffer, nbytes, address) != ERROR_OK)
|
if (mem_ap_write_buf_u8(swjdp, buffer, nbytes, address) != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -653,7 +653,7 @@ int mem_ap_write_buf_packed_u8(swjdp_common_t *swjdp, uint8_t *buffer, int count
|
||||||
uint32_t outvalue;
|
uint32_t outvalue;
|
||||||
memcpy(&outvalue, buffer, sizeof(uint32_t));
|
memcpy(&outvalue, buffer, sizeof(uint32_t));
|
||||||
|
|
||||||
for (i = 0; i < nbytes; i++ )
|
for (i = 0; i < nbytes; i++)
|
||||||
{
|
{
|
||||||
*((uint8_t*)buffer + (address & 0x3)) = outvalue;
|
*((uint8_t*)buffer + (address & 0x3)) = outvalue;
|
||||||
outvalue >>= 8;
|
outvalue >>= 8;
|
||||||
|
@ -692,7 +692,7 @@ int mem_ap_write_buf_u8(swjdp_common_t *swjdp, uint8_t *buffer, int count, uint3
|
||||||
{
|
{
|
||||||
dap_setup_accessport(swjdp, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
dap_setup_accessport(swjdp, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
uint32_t outvalue = (uint32_t)*buffer << 8 * (address & 0x3);
|
uint32_t outvalue = (uint32_t)*buffer << 8 * (address & 0x3);
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_DRW, outvalue );
|
dap_ap_write_reg_u32(swjdp, AP_REG_DRW, outvalue);
|
||||||
retval = swjdp_transaction_endcheck(swjdp);
|
retval = swjdp_transaction_endcheck(swjdp);
|
||||||
count--;
|
count--;
|
||||||
address++;
|
address++;
|
||||||
|
@ -770,7 +770,7 @@ int mem_ap_read_buf_u32(swjdp_common_t *swjdp, uint8_t *buffer, int count, uint3
|
||||||
uint32_t data;
|
uint32_t data;
|
||||||
memcpy(&data, pBuffer, sizeof(uint32_t));
|
memcpy(&data, pBuffer, sizeof(uint32_t));
|
||||||
|
|
||||||
for (i = 0; i < 4; i++ )
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
*((uint8_t*)pBuffer) = (data >> 8 * (adr & 0x3));
|
*((uint8_t*)pBuffer) = (data >> 8 * (adr & 0x3));
|
||||||
pBuffer++;
|
pBuffer++;
|
||||||
|
@ -810,7 +810,7 @@ int mem_ap_read_buf_packed_u16(swjdp_common_t *swjdp, uint8_t *buffer, int count
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue );
|
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue);
|
||||||
if (swjdp_transaction_endcheck(swjdp) != ERROR_OK)
|
if (swjdp_transaction_endcheck(swjdp) != ERROR_OK)
|
||||||
{
|
{
|
||||||
LOG_WARNING("Block read error address 0x%" PRIx32 ", count 0x%x", address, count);
|
LOG_WARNING("Block read error address 0x%" PRIx32 ", count 0x%x", address, count);
|
||||||
|
@ -819,7 +819,7 @@ int mem_ap_read_buf_packed_u16(swjdp_common_t *swjdp, uint8_t *buffer, int count
|
||||||
|
|
||||||
nbytes = MIN((readcount << 1), 4);
|
nbytes = MIN((readcount << 1), 4);
|
||||||
|
|
||||||
for (i = 0; i < nbytes; i++ )
|
for (i = 0; i < nbytes; i++)
|
||||||
{
|
{
|
||||||
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
||||||
buffer++;
|
buffer++;
|
||||||
|
@ -847,11 +847,11 @@ int mem_ap_read_buf_u16(swjdp_common_t *swjdp, uint8_t *buffer, int count, uint3
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
dap_setup_accessport(swjdp, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
|
dap_setup_accessport(swjdp, CSW_16BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue );
|
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue);
|
||||||
retval = swjdp_transaction_endcheck(swjdp);
|
retval = swjdp_transaction_endcheck(swjdp);
|
||||||
if (address & 0x1)
|
if (address & 0x1)
|
||||||
{
|
{
|
||||||
for (i = 0; i < 2; i++ )
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
||||||
buffer++;
|
buffer++;
|
||||||
|
@ -902,7 +902,7 @@ int mem_ap_read_buf_packed_u8(swjdp_common_t *swjdp, uint8_t *buffer, int count,
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue );
|
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue);
|
||||||
if (swjdp_transaction_endcheck(swjdp) != ERROR_OK)
|
if (swjdp_transaction_endcheck(swjdp) != ERROR_OK)
|
||||||
{
|
{
|
||||||
LOG_WARNING("Block read error address 0x%" PRIx32 ", count 0x%x", address, count);
|
LOG_WARNING("Block read error address 0x%" PRIx32 ", count 0x%x", address, count);
|
||||||
|
@ -911,7 +911,7 @@ int mem_ap_read_buf_packed_u8(swjdp_common_t *swjdp, uint8_t *buffer, int count,
|
||||||
|
|
||||||
nbytes = MIN(readcount, 4);
|
nbytes = MIN(readcount, 4);
|
||||||
|
|
||||||
for (i = 0; i < nbytes; i++ )
|
for (i = 0; i < nbytes; i++)
|
||||||
{
|
{
|
||||||
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
||||||
buffer++;
|
buffer++;
|
||||||
|
@ -939,7 +939,7 @@ int mem_ap_read_buf_u8(swjdp_common_t *swjdp, uint8_t *buffer, int count, uint32
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
dap_setup_accessport(swjdp, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
dap_setup_accessport(swjdp, CSW_8BIT | CSW_ADDRINC_SINGLE, address);
|
||||||
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue );
|
dap_ap_read_reg_u32(swjdp, AP_REG_DRW, &invalue);
|
||||||
retval = swjdp_transaction_endcheck(swjdp);
|
retval = swjdp_transaction_endcheck(swjdp);
|
||||||
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
*((uint8_t*)buffer) = (invalue >> 8 * (address & 0x3));
|
||||||
count--;
|
count--;
|
||||||
|
@ -1065,7 +1065,7 @@ int dap_info_command(struct command_context_s *cmd_ctx, swjdp_common_t *swjdp, i
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
command_print(cmd_ctx, "\tROM table in legacy format" );
|
command_print(cmd_ctx, "\tROM table in legacy format");
|
||||||
}
|
}
|
||||||
/* Now we read ROM table ID registers, ref. ARM IHI 0029B sec */
|
/* Now we read ROM table ID registers, ref. ARM IHI 0029B sec */
|
||||||
mem_ap_read_u32(swjdp, (dbgbase&0xFFFFF000) | 0xFF0, &cid0);
|
mem_ap_read_u32(swjdp, (dbgbase&0xFFFFF000) | 0xFF0, &cid0);
|
||||||
|
@ -1081,7 +1081,7 @@ int dap_info_command(struct command_context_s *cmd_ctx, swjdp_common_t *swjdp, i
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
command_print(cmd_ctx, "\tMEMTYPE system memory not present. Dedicated debug bus" );
|
command_print(cmd_ctx, "\tMEMTYPE system memory not present. Dedicated debug bus");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we read ROM table entries from dbgbase&0xFFFFF000) | 0x000 until we get 0x00000000 */
|
/* Now we read ROM table entries from dbgbase&0xFFFFF000) | 0x000 until we get 0x00000000 */
|
||||||
|
|
|
@ -762,7 +762,7 @@ int evaluate_mrs_msr(uint32_t opcode, uint32_t address, arm_instruction_t *instr
|
||||||
(opcode & 0x40000) ? "s" : "",
|
(opcode & 0x40000) ? "s" : "",
|
||||||
(opcode & 0x80000) ? "f" : "",
|
(opcode & 0x80000) ? "f" : "",
|
||||||
ror(immediate, (rotate * 2))
|
ror(immediate, (rotate * 2))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else /* register variant */
|
else /* register variant */
|
||||||
{
|
{
|
||||||
|
@ -774,7 +774,7 @@ int evaluate_mrs_msr(uint32_t opcode, uint32_t address, arm_instruction_t *instr
|
||||||
(opcode & 0x40000) ? "s" : "",
|
(opcode & 0x40000) ? "s" : "",
|
||||||
(opcode & 0x80000) ? "f" : "",
|
(opcode & 0x80000) ? "f" : "",
|
||||||
Rm
|
Rm
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1200,7 +1200,7 @@ int arm_evaluate_opcode(uint32_t opcode, uint32_t address, arm_instruction_t *in
|
||||||
if ((opcode & 0x0e000000) == 0x0a000000)
|
if ((opcode & 0x0e000000) == 0x0a000000)
|
||||||
return evaluate_blx_imm(opcode, address, instruction);
|
return evaluate_blx_imm(opcode, address, instruction);
|
||||||
|
|
||||||
/* Extended coprocessor opcode space (ARMv5 and higher )*/
|
/* Extended coprocessor opcode space (ARMv5 and higher)*/
|
||||||
/* Coprocessor load/store and double register transfers */
|
/* Coprocessor load/store and double register transfers */
|
||||||
if ((opcode & 0x0e000000) == 0x0c000000)
|
if ((opcode & 0x0e000000) == 0x0c000000)
|
||||||
return evaluate_ldc_stc_mcrr_mrrc(opcode, address, instruction);
|
return evaluate_ldc_stc_mcrr_mrrc(opcode, address, instruction);
|
||||||
|
|
|
@ -299,7 +299,7 @@ int armv4_5_arch_state(struct target_s *target)
|
||||||
|
|
||||||
LOG_USER("target halted in %s state due to %s, current mode: %s\ncpsr: 0x%8.8" PRIx32 " pc: 0x%8.8" PRIx32 "",
|
LOG_USER("target halted in %s state due to %s, current mode: %s\ncpsr: 0x%8.8" PRIx32 " pc: 0x%8.8" PRIx32 "",
|
||||||
armv4_5_state_strings[armv4_5->core_state],
|
armv4_5_state_strings[armv4_5->core_state],
|
||||||
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason )->name,
|
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason)->name,
|
||||||
armv4_5_mode_strings[armv4_5_mode_to_number(armv4_5->core_mode)],
|
armv4_5_mode_strings[armv4_5_mode_to_number(armv4_5->core_mode)],
|
||||||
buf_get_u32(armv4_5->core_cache->reg_list[ARMV4_5_CPSR].value, 0, 32),
|
buf_get_u32(armv4_5->core_cache->reg_list[ARMV4_5_CPSR].value, 0, 32),
|
||||||
buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32));
|
buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32));
|
||||||
|
|
|
@ -144,7 +144,7 @@ extern int armv7m_blank_check_memory(struct target_s *target, uint32_t address,
|
||||||
* Rd: source register
|
* Rd: source register
|
||||||
* SYSm: destination special register
|
* SYSm: destination special register
|
||||||
*/
|
*/
|
||||||
#define ARMV7M_T_MSR(SYSm, Rn) ((0xF380 | (Rn << 8 )) | ((0x8800 | SYSm) << 16))
|
#define ARMV7M_T_MSR(SYSm, Rn) ((0xF380 | (Rn << 8)) | ((0x8800 | SYSm) << 16))
|
||||||
|
|
||||||
/* Change Processor State. The instruction modifies the PRIMASK and FAULTMASK
|
/* Change Processor State. The instruction modifies the PRIMASK and FAULTMASK
|
||||||
* special-purpose register values (Thumb mode) 16 bit Thumb2 instruction
|
* special-purpose register values (Thumb mode) 16 bit Thumb2 instruction
|
||||||
|
@ -159,7 +159,7 @@ extern int armv7m_blank_check_memory(struct target_s *target, uint32_t address,
|
||||||
/* Breakpoint (Thumb mode) v5 onwards
|
/* Breakpoint (Thumb mode) v5 onwards
|
||||||
* Im: immediate value used by debugger
|
* Im: immediate value used by debugger
|
||||||
*/
|
*/
|
||||||
#define ARMV7M_T_BKPT(Im) ((0xBE00 | Im ) | ((0xBE00 | Im ) << 16))
|
#define ARMV7M_T_BKPT(Im) ((0xBE00 | Im) | ((0xBE00 | Im) << 16))
|
||||||
|
|
||||||
/* Store register (Thumb mode)
|
/* Store register (Thumb mode)
|
||||||
* Rd: source register
|
* Rd: source register
|
||||||
|
|
|
@ -109,11 +109,11 @@ int cortexm3_dap_read_coreregister_u32(swjdp_common_t *swjdp, uint32_t *value, i
|
||||||
|
|
||||||
/* mem_ap_write_u32(swjdp, DCB_DCRSR, regnum); */
|
/* mem_ap_write_u32(swjdp, DCB_DCRSR, regnum); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum );
|
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum);
|
||||||
|
|
||||||
/* mem_ap_read_u32(swjdp, DCB_DCRDR, value); */
|
/* mem_ap_read_u32(swjdp, DCB_DCRDR, value); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
||||||
dap_ap_read_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value );
|
dap_ap_read_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value);
|
||||||
|
|
||||||
mem_ap_write_u32(swjdp, DCB_DCRDR, dcrdr);
|
mem_ap_write_u32(swjdp, DCB_DCRDR, dcrdr);
|
||||||
retval = swjdp_transaction_endcheck(swjdp);
|
retval = swjdp_transaction_endcheck(swjdp);
|
||||||
|
@ -134,11 +134,11 @@ int cortexm3_dap_write_coreregister_u32(swjdp_common_t *swjdp, uint32_t value, i
|
||||||
|
|
||||||
/* mem_ap_write_u32(swjdp, DCB_DCRDR, core_regs[i]); */
|
/* mem_ap_write_u32(swjdp, DCB_DCRDR, core_regs[i]); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRDR & 0xFFFFFFF0);
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value );
|
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRDR & 0xC), value);
|
||||||
|
|
||||||
/* mem_ap_write_u32(swjdp, DCB_DCRSR, i | DCRSR_WnR ); */
|
/* mem_ap_write_u32(swjdp, DCB_DCRSR, i | DCRSR_WnR); */
|
||||||
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
dap_setup_accessport(swjdp, CSW_32BIT | CSW_ADDRINC_OFF, DCB_DCRSR & 0xFFFFFFF0);
|
||||||
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum | DCRSR_WnR );
|
dap_ap_write_reg_u32(swjdp, AP_REG_BD0 | (DCB_DCRSR & 0xC), regnum | DCRSR_WnR);
|
||||||
|
|
||||||
mem_ap_write_u32(swjdp, DCB_DCRDR, dcrdr);
|
mem_ap_write_u32(swjdp, DCB_DCRDR, dcrdr);
|
||||||
retval = swjdp_transaction_endcheck(swjdp);
|
retval = swjdp_transaction_endcheck(swjdp);
|
||||||
|
@ -204,7 +204,7 @@ int cortex_m3_single_step_core(target_t *target)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cortex_m3_exec_opcode(target_t *target,uint32_t opcode, int len /* MODE, r0_invalue, &r0_outvalue */ )
|
int cortex_m3_exec_opcode(target_t *target,uint32_t opcode, int len /* MODE, r0_invalue, &r0_outvalue */)
|
||||||
{
|
{
|
||||||
/* get pointers to arch-specific information */
|
/* get pointers to arch-specific information */
|
||||||
armv7m_common_t *armv7m = target->arch_info;
|
armv7m_common_t *armv7m = target->arch_info;
|
||||||
|
@ -444,7 +444,7 @@ int cortex_m3_debug_entry(target_t *target)
|
||||||
LOG_DEBUG("entered debug state in core mode: %s at PC 0x%" PRIx32 ", target->state: %s",
|
LOG_DEBUG("entered debug state in core mode: %s at PC 0x%" PRIx32 ", target->state: %s",
|
||||||
armv7m_mode_strings[armv7m->core_mode],
|
armv7m_mode_strings[armv7m->core_mode],
|
||||||
*(uint32_t*)(armv7m->core_cache->reg_list[15].value),
|
*(uint32_t*)(armv7m->core_cache->reg_list[15].value),
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
if (armv7m->post_debug_entry)
|
if (armv7m->post_debug_entry)
|
||||||
armv7m->post_debug_entry(target);
|
armv7m->post_debug_entry(target);
|
||||||
|
@ -520,7 +520,7 @@ int cortex_m3_poll(target_t *target)
|
||||||
#if 0
|
#if 0
|
||||||
/* Read Debug Fault Status Register, added to figure out the lockup when running flashtest.script */
|
/* Read Debug Fault Status Register, added to figure out the lockup when running flashtest.script */
|
||||||
mem_ap_read_atomic_u32(swjdp, NVIC_DFSR, &cortex_m3->nvic_dfsr);
|
mem_ap_read_atomic_u32(swjdp, NVIC_DFSR, &cortex_m3->nvic_dfsr);
|
||||||
LOG_DEBUG("dcb_dhcsr 0x%x, nvic_dfsr 0x%x, target->state: %s", cortex_m3->dcb_dhcsr, cortex_m3->nvic_dfsr, Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name );
|
LOG_DEBUG("dcb_dhcsr 0x%x, nvic_dfsr 0x%x, target->state: %s", cortex_m3->dcb_dhcsr, cortex_m3->nvic_dfsr, Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
@ -529,7 +529,7 @@ int cortex_m3_poll(target_t *target)
|
||||||
int cortex_m3_halt(target_t *target)
|
int cortex_m3_halt(target_t *target)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
if (target->state == TARGET_HALTED)
|
if (target->state == TARGET_HALTED)
|
||||||
{
|
{
|
||||||
|
@ -751,7 +751,7 @@ int cortex_m3_assert_reset(target_t *target)
|
||||||
int assert_srst = 1;
|
int assert_srst = 1;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name );
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
||||||
if (!(jtag_reset_config & RESET_HAS_SRST))
|
if (!(jtag_reset_config & RESET_HAS_SRST))
|
||||||
|
@ -765,7 +765,7 @@ int cortex_m3_assert_reset(target_t *target)
|
||||||
if (!(cortex_m3->dcb_dhcsr & C_DEBUGEN))
|
if (!(cortex_m3->dcb_dhcsr & C_DEBUGEN))
|
||||||
mem_ap_write_u32(swjdp, DCB_DHCSR, DBGKEY | C_DEBUGEN);
|
mem_ap_write_u32(swjdp, DCB_DHCSR, DBGKEY | C_DEBUGEN);
|
||||||
|
|
||||||
mem_ap_write_u32(swjdp, DCB_DCRDR, 0 );
|
mem_ap_write_u32(swjdp, DCB_DCRDR, 0);
|
||||||
|
|
||||||
if (!target->reset_halt)
|
if (!target->reset_halt)
|
||||||
{
|
{
|
||||||
|
@ -862,7 +862,7 @@ int cortex_m3_assert_reset(target_t *target)
|
||||||
int cortex_m3_deassert_reset(target_t *target)
|
int cortex_m3_deassert_reset(target_t *target)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
/* deassert reset lines */
|
/* deassert reset lines */
|
||||||
jtag_add_reset(0, 0);
|
jtag_add_reset(0, 0);
|
||||||
|
|
|
@ -387,10 +387,10 @@ static int handle_etb_config_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tap = jtag_tap_by_string(args[1] );
|
tap = jtag_tap_by_string(args[1]);
|
||||||
if (tap == NULL)
|
if (tap == NULL)
|
||||||
{
|
{
|
||||||
command_print(cmd_ctx, "Tap: %s does not exist", args[1] );
|
command_print(cmd_ctx, "Tap: %s does not exist", args[1]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -533,7 +533,7 @@ static int image_mot_buffer_complete(image_t *image)
|
||||||
}
|
}
|
||||||
else if (record_type >= 1 && record_type <= 3)
|
else if (record_type >= 1 && record_type <= 3)
|
||||||
{
|
{
|
||||||
switch (record_type )
|
switch (record_type)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
/* S1 - 16 bit address data record */
|
/* S1 - 16 bit address data record */
|
||||||
|
@ -636,7 +636,7 @@ static int image_mot_buffer_complete(image_t *image)
|
||||||
cal_checksum += (uint8_t)checksum;
|
cal_checksum += (uint8_t)checksum;
|
||||||
bytes_read += 2;
|
bytes_read += 2;
|
||||||
|
|
||||||
if (cal_checksum != 0xFF )
|
if (cal_checksum != 0xFF)
|
||||||
{
|
{
|
||||||
/* checksum failed */
|
/* checksum failed */
|
||||||
LOG_ERROR("incorrect record checksum found in S19 file");
|
LOG_ERROR("incorrect record checksum found in S19 file");
|
||||||
|
@ -852,7 +852,7 @@ int image_read_section(image_t *image, int section, uint32_t offset, uint32_t si
|
||||||
memcpy(buffer + *size_read,
|
memcpy(buffer + *size_read,
|
||||||
image_memory->cache + (address - image_memory->cache_address),
|
image_memory->cache + (address - image_memory->cache_address),
|
||||||
(size_in_cache > size) ? size : size_in_cache
|
(size_in_cache > size) ? size : size_in_cache
|
||||||
);
|
);
|
||||||
|
|
||||||
*size_read += (size_in_cache > size) ? size : size_in_cache;
|
*size_read += (size_in_cache > size) ? size : size_in_cache;
|
||||||
address += (size_in_cache > size) ? size : size_in_cache;
|
address += (size_in_cache > size) ? size : size_in_cache;
|
||||||
|
|
|
@ -265,7 +265,7 @@ int mips32_arch_state(struct target_s *target)
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_USER("target halted due to %s, pc: 0x%8.8" PRIx32 "",
|
LOG_USER("target halted due to %s, pc: 0x%8.8" PRIx32 "",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason )->name ,
|
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason)->name ,
|
||||||
buf_get_u32(mips32->core_cache->reg_list[MIPS32_PC].value, 0, 32));
|
buf_get_u32(mips32->core_cache->reg_list[MIPS32_PC].value, 0, 32));
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
|
@ -187,7 +187,7 @@ static int mips32_pracc_exec_write(mips32_pracc_context *ctx, uint32_t address)
|
||||||
offset = (address - MIPS32_PRACC_PARAM_IN) / 4;
|
offset = (address - MIPS32_PRACC_PARAM_IN) / 4;
|
||||||
ctx->local_iparam[offset] = data;
|
ctx->local_iparam[offset] = data;
|
||||||
}
|
}
|
||||||
else if ((address >= MIPS32_PRACC_PARAM_OUT )
|
else if ((address >= MIPS32_PRACC_PARAM_OUT)
|
||||||
&& (address <= MIPS32_PRACC_PARAM_OUT + ctx->num_oparam * 4))
|
&& (address <= MIPS32_PRACC_PARAM_OUT + ctx->num_oparam * 4))
|
||||||
{
|
{
|
||||||
offset = (address - MIPS32_PRACC_PARAM_OUT) / 4;
|
offset = (address - MIPS32_PRACC_PARAM_OUT) / 4;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#define UPPER16(uint32_t) (uint32_t >> 16)
|
#define UPPER16(uint32_t) (uint32_t >> 16)
|
||||||
#define LOWER16(uint32_t) (uint32_t & 0xFFFF)
|
#define LOWER16(uint32_t) (uint32_t & 0xFFFF)
|
||||||
#define NEG16(v) (((~(v)) + 1) & 0xFFFF)
|
#define NEG16(v) (((~(v)) + 1) & 0xFFFF)
|
||||||
/*#define NEG18(v) (((~(v)) + 1) & 0x3FFFF )*/
|
/*#define NEG18(v) (((~(v)) + 1) & 0x3FFFF)*/
|
||||||
|
|
||||||
extern int mips32_pracc_read_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, int count, void *buf);
|
extern int mips32_pracc_read_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, int count, void *buf);
|
||||||
extern int mips32_pracc_write_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, int count, void *buf);
|
extern int mips32_pracc_write_mem(mips_ejtag_t *ejtag_info, uint32_t addr, int size, int count, void *buf);
|
||||||
|
|
|
@ -292,7 +292,7 @@ int mips_ejtag_init(mips_ejtag_t *ejtag_info)
|
||||||
ejtag_info->impcode & (1 << 16) ? " MIPS16": "",
|
ejtag_info->impcode & (1 << 16) ? " MIPS16": "",
|
||||||
ejtag_info->impcode & (1 << 14) ? " noDMA": " DMA",
|
ejtag_info->impcode & (1 << 14) ? " noDMA": " DMA",
|
||||||
ejtag_info->impcode & (1 << 0) ? " MIPS64": " MIPS32"
|
ejtag_info->impcode & (1 << 0) ? " MIPS64": " MIPS32"
|
||||||
);
|
);
|
||||||
|
|
||||||
if ((ejtag_info->impcode & (1 << 14)) == 0)
|
if ((ejtag_info->impcode & (1 << 14)) == 0)
|
||||||
LOG_DEBUG("EJTAG: DMA Access Mode Support Enabled");
|
LOG_DEBUG("EJTAG: DMA Access Mode Support Enabled");
|
||||||
|
|
|
@ -148,7 +148,7 @@ int mips_m4k_debug_entry(target_t *target)
|
||||||
|
|
||||||
LOG_DEBUG("entered debug state at PC 0x%" PRIx32 ", target->state: %s",
|
LOG_DEBUG("entered debug state at PC 0x%" PRIx32 ", target->state: %s",
|
||||||
*(uint32_t*)(mips32->core_cache->reg_list[MIPS32_PC].value),
|
*(uint32_t*)(mips32->core_cache->reg_list[MIPS32_PC].value),
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -220,7 +220,7 @@ int mips_m4k_halt(struct target_s *target)
|
||||||
mips_ejtag_t *ejtag_info = &mips32->ejtag_info;
|
mips_ejtag_t *ejtag_info = &mips32->ejtag_info;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
if (target->state == TARGET_HALTED)
|
if (target->state == TARGET_HALTED)
|
||||||
{
|
{
|
||||||
|
@ -265,7 +265,7 @@ int mips_m4k_assert_reset(target_t *target)
|
||||||
mips_ejtag_t *ejtag_info = &mips32->ejtag_info;
|
mips_ejtag_t *ejtag_info = &mips32->ejtag_info;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
enum reset_types jtag_reset_config = jtag_get_reset_config();
|
||||||
if (!(jtag_reset_config & RESET_HAS_SRST))
|
if (!(jtag_reset_config & RESET_HAS_SRST))
|
||||||
|
@ -324,7 +324,7 @@ int mips_m4k_assert_reset(target_t *target)
|
||||||
int mips_m4k_deassert_reset(target_t *target)
|
int mips_m4k_deassert_reset(target_t *target)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
/* deassert reset lines */
|
/* deassert reset lines */
|
||||||
jtag_add_reset(0, 0);
|
jtag_add_reset(0, 0);
|
||||||
|
|
|
@ -119,7 +119,7 @@ static int register_set_dummy_core_reg(reg_t *reg, uint8_t *buf)
|
||||||
void register_init_dummy(reg_t *reg)
|
void register_init_dummy(reg_t *reg)
|
||||||
{
|
{
|
||||||
static int dummy_arch_type = -1;
|
static int dummy_arch_type = -1;
|
||||||
if (dummy_arch_type == -1 )
|
if (dummy_arch_type == -1)
|
||||||
dummy_arch_type = register_reg_arch_type(register_get_dummy_core_reg, register_set_dummy_core_reg);
|
dummy_arch_type = register_reg_arch_type(register_get_dummy_core_reg, register_set_dummy_core_reg);
|
||||||
|
|
||||||
reg->arch_type = dummy_arch_type;
|
reg->arch_type = dummy_arch_type;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -397,7 +397,7 @@ int target_write_u8(struct target_s *target, uint32_t address, uint8_t value);
|
||||||
int target_arch_state(struct target_s *target);
|
int target_arch_state(struct target_s *target);
|
||||||
|
|
||||||
void target_handle_event(target_t *t, enum target_event e);
|
void target_handle_event(target_t *t, enum target_event e);
|
||||||
void target_all_handle_event(enum target_event e );
|
void target_all_handle_event(enum target_event e);
|
||||||
|
|
||||||
#define ERROR_TARGET_INVALID (-300)
|
#define ERROR_TARGET_INVALID (-300)
|
||||||
#define ERROR_TARGET_INIT_FAILED (-301)
|
#define ERROR_TARGET_INIT_FAILED (-301)
|
||||||
|
@ -412,6 +412,6 @@ void target_all_handle_event(enum target_event e );
|
||||||
#define ERROR_TARGET_NOT_EXAMINED (-311)
|
#define ERROR_TARGET_NOT_EXAMINED (-311)
|
||||||
|
|
||||||
extern const Jim_Nvp nvp_error_target[];
|
extern const Jim_Nvp nvp_error_target[];
|
||||||
extern const char *target_strerror_safe(int err );
|
extern const char *target_strerror_safe(int err);
|
||||||
|
|
||||||
#endif /* TARGET_H */
|
#endif /* TARGET_H */
|
||||||
|
|
|
@ -117,8 +117,8 @@ int target_request(target_t *target, uint32_t request)
|
||||||
{
|
{
|
||||||
target_req_cmd_t target_req_cmd = request & 0xff;
|
target_req_cmd_t target_req_cmd = request & 0xff;
|
||||||
|
|
||||||
if (charmsg_mode ) {
|
if (charmsg_mode) {
|
||||||
target_charmsg(target, target_req_cmd );
|
target_charmsg(target, target_req_cmd);
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
switch (target_req_cmd)
|
switch (target_req_cmd)
|
||||||
|
@ -295,7 +295,7 @@ static int handle_target_request_debugmsgs_command(struct command_context_s *cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
command_print(cmd_ctx, "receiving debug messages from current target %s",
|
command_print(cmd_ctx, "receiving debug messages from current target %s",
|
||||||
(receiving) ? (charmsg_mode?"charmsg":"enabled") : "disabled" );
|
(receiving) ? (charmsg_mode?"charmsg":"enabled") : "disabled");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,16 +129,16 @@ struct target_type_s
|
||||||
int (*register_commands)(struct command_context_s *cmd_ctx);
|
int (*register_commands)(struct command_context_s *cmd_ctx);
|
||||||
|
|
||||||
/* called when target is created */
|
/* called when target is created */
|
||||||
int (*target_create)(struct target_s *target, Jim_Interp *interp );
|
int (*target_create)(struct target_s *target, Jim_Interp *interp);
|
||||||
|
|
||||||
/* called for various config parameters */
|
/* called for various config parameters */
|
||||||
/* returns JIM_CONTINUE - if option not understood */
|
/* returns JIM_CONTINUE - if option not understood */
|
||||||
/* otherwise: JIM_OK, or JIM_ERR, */
|
/* otherwise: JIM_OK, or JIM_ERR, */
|
||||||
int (*target_jim_configure)(struct target_s *target, Jim_GetOptInfo *goi );
|
int (*target_jim_configure)(struct target_s *target, Jim_GetOptInfo *goi);
|
||||||
|
|
||||||
/* target commands specifically handled by the target */
|
/* target commands specifically handled by the target */
|
||||||
/* returns JIM_OK, or JIM_ERR, or JIM_CONTINUE - if option not understood */
|
/* returns JIM_OK, or JIM_ERR, or JIM_CONTINUE - if option not understood */
|
||||||
int (*target_jim_commands)(struct target_s *target, Jim_GetOptInfo *goi );
|
int (*target_jim_commands)(struct target_s *target, Jim_GetOptInfo *goi);
|
||||||
|
|
||||||
/* invoked after JTAG chain has been examined & validated. During
|
/* invoked after JTAG chain has been examined & validated. During
|
||||||
* this stage the target is examined and any additional setup is
|
* this stage the target is examined and any additional setup is
|
||||||
|
|
|
@ -123,7 +123,7 @@ static int handle_trace_history_command(struct command_context_s *cmd_ctx, char
|
||||||
uint32_t first = 0;
|
uint32_t first = 0;
|
||||||
uint32_t last = trace->trace_history_pos;
|
uint32_t last = trace->trace_history_pos;
|
||||||
|
|
||||||
if (!trace->trace_history_size ) {
|
if (!trace->trace_history_size) {
|
||||||
command_print(cmd_ctx, "trace history buffer is not allocated");
|
command_print(cmd_ctx, "trace history buffer is not allocated");
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -959,7 +959,7 @@ int xscale_arch_state(struct target_s *target)
|
||||||
"MMU: %s, D-Cache: %s, I-Cache: %s"
|
"MMU: %s, D-Cache: %s, I-Cache: %s"
|
||||||
"%s",
|
"%s",
|
||||||
armv4_5_state_strings[armv4_5->core_state],
|
armv4_5_state_strings[armv4_5->core_state],
|
||||||
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason )->name ,
|
Jim_Nvp_value2name_simple(nvp_target_debug_reason, target->debug_reason)->name ,
|
||||||
armv4_5_mode_strings[armv4_5_mode_to_number(armv4_5->core_mode)],
|
armv4_5_mode_strings[armv4_5_mode_to_number(armv4_5->core_mode)],
|
||||||
buf_get_u32(armv4_5->core_cache->reg_list[ARMV4_5_CPSR].value, 0, 32),
|
buf_get_u32(armv4_5->core_cache->reg_list[ARMV4_5_CPSR].value, 0, 32),
|
||||||
buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32),
|
buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32),
|
||||||
|
@ -1202,7 +1202,7 @@ int xscale_halt(target_t *target)
|
||||||
xscale_common_t *xscale = armv4_5->arch_info;
|
xscale_common_t *xscale = armv4_5->arch_info;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
if (target->state == TARGET_HALTED)
|
if (target->state == TARGET_HALTED)
|
||||||
{
|
{
|
||||||
|
@ -1568,7 +1568,7 @@ int xscale_assert_reset(target_t *target)
|
||||||
xscale_common_t *xscale = armv4_5->arch_info;
|
xscale_common_t *xscale = armv4_5->arch_info;
|
||||||
|
|
||||||
LOG_DEBUG("target->state: %s",
|
LOG_DEBUG("target->state: %s",
|
||||||
Jim_Nvp_value2name_simple(nvp_target_state, target->state )->name);
|
Jim_Nvp_value2name_simple(nvp_target_state, target->state)->name);
|
||||||
|
|
||||||
/* select DCSR instruction (set endstate to R-T-I to ensure we don't
|
/* select DCSR instruction (set endstate to R-T-I to ensure we don't
|
||||||
* end up in T-L-R, which would reset JTAG
|
* end up in T-L-R, which would reset JTAG
|
||||||
|
|
|
@ -129,11 +129,11 @@ static int xsvf_fd = 0;
|
||||||
|
|
||||||
|
|
||||||
/* map xsvf tap state to an openocd "tap_state_t" */
|
/* map xsvf tap state to an openocd "tap_state_t" */
|
||||||
static tap_state_t xsvf_to_tap(int xsvf_state )
|
static tap_state_t xsvf_to_tap(int xsvf_state)
|
||||||
{
|
{
|
||||||
tap_state_t ret;
|
tap_state_t ret;
|
||||||
|
|
||||||
switch (xsvf_state )
|
switch (xsvf_state)
|
||||||
{
|
{
|
||||||
case XSV_RESET: ret = TAP_RESET; break;
|
case XSV_RESET: ret = TAP_RESET; break;
|
||||||
case XSV_IDLE: ret = TAP_IDLE; break;
|
case XSV_IDLE: ret = TAP_IDLE; break;
|
||||||
|
@ -152,7 +152,7 @@ static tap_state_t xsvf_to_tap(int xsvf_state )
|
||||||
case XSV_IREXIT2: ret = TAP_IREXIT2; break;
|
case XSV_IREXIT2: ret = TAP_IREXIT2; break;
|
||||||
case XSV_IRUPDATE: ret = TAP_IRUPDATE; break;
|
case XSV_IRUPDATE: ret = TAP_IRUPDATE; break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR("UNKNOWN XSVF STATE 0x%02X", xsvf_state );
|
LOG_ERROR("UNKNOWN XSVF STATE 0x%02X", xsvf_state);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,10 +232,10 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
|
|
||||||
if (strcmp(args[0], "plain") != 0)
|
if (strcmp(args[0], "plain") != 0)
|
||||||
{
|
{
|
||||||
tap = jtag_tap_by_string(args[0] );
|
tap = jtag_tap_by_string(args[0]);
|
||||||
if (!tap )
|
if (!tap)
|
||||||
{
|
{
|
||||||
command_print(cmd_ctx, "Tap: %s unknown", args[0] );
|
command_print(cmd_ctx, "Tap: %s unknown", args[0]);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
|
|
||||||
LOG_USER("xsvf processing file: \"%s\"", filename);
|
LOG_USER("xsvf processing file: \"%s\"", filename);
|
||||||
|
|
||||||
while (read(xsvf_fd, &opcode, 1) > 0 )
|
while (read(xsvf_fd, &opcode, 1) > 0)
|
||||||
{
|
{
|
||||||
/* record the position of the just read opcode within the file */
|
/* record the position of the just read opcode within the file */
|
||||||
file_offset = lseek(xsvf_fd, 0, SEEK_CUR) - 1;
|
file_offset = lseek(xsvf_fd, 0, SEEK_CUR) - 1;
|
||||||
|
@ -309,7 +309,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xrepeat = myrepeat;
|
xrepeat = myrepeat;
|
||||||
LOG_DEBUG("XREPEAT %d", xrepeat );
|
LOG_DEBUG("XREPEAT %d", xrepeat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -327,7 +327,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
xsdrsize = be_to_h_u32(xsdrsize_buf);
|
xsdrsize = be_to_h_u32(xsdrsize_buf);
|
||||||
LOG_DEBUG("XSDRSIZE %d", xsdrsize);
|
LOG_DEBUG("XSDRSIZE %d", xsdrsize);
|
||||||
|
|
||||||
if (dr_out_buf ) free(dr_out_buf);
|
if (dr_out_buf) free(dr_out_buf);
|
||||||
if (dr_in_buf) free(dr_in_buf);
|
if (dr_in_buf) free(dr_in_buf);
|
||||||
if (dr_in_mask) free(dr_in_mask);
|
if (dr_in_mask) free(dr_in_mask);
|
||||||
|
|
||||||
|
@ -354,7 +354,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
|
|
||||||
if (opcode == XSDRTDO)
|
if (opcode == XSDRTDO)
|
||||||
{
|
{
|
||||||
if (xsvf_read_buffer(xsdrsize, xsvf_fd, dr_in_buf) != ERROR_OK )
|
if (xsvf_read_buffer(xsdrsize, xsvf_fd, dr_in_buf) != ERROR_OK)
|
||||||
{
|
{
|
||||||
do_abort = 1;
|
do_abort = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -366,11 +366,11 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
|
|
||||||
LOG_DEBUG("%s %d", op_name, xsdrsize);
|
LOG_DEBUG("%s %d", op_name, xsdrsize);
|
||||||
|
|
||||||
for (attempt = 0; attempt < limit; ++attempt )
|
for (attempt = 0; attempt < limit; ++attempt)
|
||||||
{
|
{
|
||||||
scan_field_t field;
|
scan_field_t field;
|
||||||
|
|
||||||
if (attempt > 0 )
|
if (attempt > 0)
|
||||||
{
|
{
|
||||||
/* perform the XC9500 exception handling sequence shown in xapp067.pdf and
|
/* perform the XC9500 exception handling sequence shown in xapp067.pdf and
|
||||||
illustrated in psuedo code at end of this file. We start from state
|
illustrated in psuedo code at end of this file. We start from state
|
||||||
|
@ -393,7 +393,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
TAP_IDLE,
|
TAP_IDLE,
|
||||||
};
|
};
|
||||||
|
|
||||||
jtag_add_pathmove(DIM(exception_path), exception_path );
|
jtag_add_pathmove(DIM(exception_path), exception_path);
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
LOG_USER("%s mismatch, xsdrsize=%d retry=%d", op_name, xsdrsize, attempt);
|
LOG_USER("%s mismatch, xsdrsize=%d retry=%d", op_name, xsdrsize, attempt);
|
||||||
|
@ -498,14 +498,14 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
|
|
||||||
mystate = xsvf_to_tap(uc);
|
mystate = xsvf_to_tap(uc);
|
||||||
|
|
||||||
LOG_DEBUG("XSTATE 0x%02X %s", uc, tap_state_name(mystate) );
|
LOG_DEBUG("XSTATE 0x%02X %s", uc, tap_state_name(mystate));
|
||||||
|
|
||||||
/* there is no need for the lookahead code that was here since we
|
/* there is no need for the lookahead code that was here since we
|
||||||
queue up the jtag commands anyway. This is a simple way to handle
|
queue up the jtag commands anyway. This is a simple way to handle
|
||||||
the XSTATE.
|
the XSTATE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (jtag_add_statemove(mystate ) != ERROR_OK )
|
if (jtag_add_statemove(mystate) != ERROR_OK)
|
||||||
{
|
{
|
||||||
/* For special states known as stable states
|
/* For special states known as stable states
|
||||||
(Test-Logic-Reset, Run-Test/Idle, Pause-DR, Pause- IR),
|
(Test-Logic-Reset, Run-Test/Idle, Pause-DR, Pause- IR),
|
||||||
|
@ -524,7 +524,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
LOG_ERROR("XSTATE %s is not reachable from current state %s in one clock cycle",
|
LOG_ERROR("XSTATE %s is not reachable from current state %s in one clock cycle",
|
||||||
tap_state_name(mystate),
|
tap_state_name(mystate),
|
||||||
tap_state_name(cmd_queue_cur_state)
|
tap_state_name(cmd_queue_cur_state)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -538,9 +538,9 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see page 22 of XSVF spec */
|
/* see page 22 of XSVF spec */
|
||||||
if (uc == 0 )
|
if (uc == 0)
|
||||||
xendir = TAP_IDLE;
|
xendir = TAP_IDLE;
|
||||||
else if (uc == 1 )
|
else if (uc == 1)
|
||||||
xendir = TAP_IRPAUSE;
|
xendir = TAP_IRPAUSE;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -561,9 +561,9 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see page 22 of XSVF spec */
|
/* see page 22 of XSVF spec */
|
||||||
if (uc == 0 )
|
if (uc == 0)
|
||||||
xenddr = TAP_IDLE;
|
xenddr = TAP_IDLE;
|
||||||
else if (uc == 1 )
|
else if (uc == 1)
|
||||||
xenddr = TAP_DRPAUSE;
|
xenddr = TAP_DRPAUSE;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -583,7 +583,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
int bitcount;
|
int bitcount;
|
||||||
tap_state_t my_end_state = xruntest ? TAP_IDLE : xendir;
|
tap_state_t my_end_state = xruntest ? TAP_IDLE : xendir;
|
||||||
|
|
||||||
if (opcode == XSIR )
|
if (opcode == XSIR)
|
||||||
{
|
{
|
||||||
/* one byte bitcount */
|
/* one byte bitcount */
|
||||||
if (read(xsvf_fd, short_buf, 1) < 0)
|
if (read(xsvf_fd, short_buf, 1) < 0)
|
||||||
|
@ -664,7 +664,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ndx < sizeof(comment)-1 )
|
if (ndx < sizeof(comment)-1)
|
||||||
comment[ndx++] = uc;
|
comment[ndx++] = uc;
|
||||||
|
|
||||||
} while (uc != 0);
|
} while (uc != 0);
|
||||||
|
@ -703,15 +703,15 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
|
|
||||||
LOG_DEBUG("XWAIT %s %s usecs:%d", tap_state_name(wait_state), tap_state_name(end_state), delay);
|
LOG_DEBUG("XWAIT %s %s usecs:%d", tap_state_name(wait_state), tap_state_name(end_state), delay);
|
||||||
|
|
||||||
if (runtest_requires_tck && wait_state == TAP_IDLE )
|
if (runtest_requires_tck && wait_state == TAP_IDLE)
|
||||||
{
|
{
|
||||||
jtag_add_runtest(delay, end_state);
|
jtag_add_runtest(delay, end_state);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
jtag_add_statemove(wait_state );
|
jtag_add_statemove(wait_state);
|
||||||
jtag_add_sleep(delay);
|
jtag_add_sleep(delay);
|
||||||
jtag_add_statemove(end_state );
|
jtag_add_statemove(end_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -734,14 +734,14 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
if (read(xsvf_fd, &wait, 1) < 0
|
if (read(xsvf_fd, &wait, 1) < 0
|
||||||
|| read(xsvf_fd, &end, 1) < 0
|
|| read(xsvf_fd, &end, 1) < 0
|
||||||
|| read(xsvf_fd, clock_buf, 4) < 0
|
|| read(xsvf_fd, clock_buf, 4) < 0
|
||||||
|| read(xsvf_fd, usecs_buf, 4) < 0 )
|
|| read(xsvf_fd, usecs_buf, 4) < 0)
|
||||||
{
|
{
|
||||||
do_abort = 1;
|
do_abort = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_state = xsvf_to_tap(wait );
|
wait_state = xsvf_to_tap(wait);
|
||||||
end_state = xsvf_to_tap(end );
|
end_state = xsvf_to_tap(end);
|
||||||
|
|
||||||
clock_count = be_to_h_u32(clock_buf);
|
clock_count = be_to_h_u32(clock_buf);
|
||||||
usecs = be_to_h_u32(usecs_buf);
|
usecs = be_to_h_u32(usecs_buf);
|
||||||
|
@ -758,17 +758,17 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
*/
|
*/
|
||||||
if (wait_state != TAP_IRPAUSE && wait_state != TAP_DRPAUSE && wait_state != TAP_RESET && wait_state != TAP_IDLE)
|
if (wait_state != TAP_IRPAUSE && wait_state != TAP_DRPAUSE && wait_state != TAP_RESET && wait_state != TAP_IDLE)
|
||||||
{
|
{
|
||||||
LOG_ERROR("illegal XWAITSTATE wait_state: \"%s\"", tap_state_name(wait_state ));
|
LOG_ERROR("illegal XWAITSTATE wait_state: \"%s\"", tap_state_name(wait_state));
|
||||||
unsupported = 1;
|
unsupported = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
jtag_add_statemove(wait_state );
|
jtag_add_statemove(wait_state);
|
||||||
|
|
||||||
jtag_add_clocks(clock_count );
|
jtag_add_clocks(clock_count);
|
||||||
|
|
||||||
jtag_add_sleep(usecs );
|
jtag_add_sleep(usecs);
|
||||||
|
|
||||||
jtag_add_statemove(end_state );
|
jtag_add_statemove(end_state);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -779,7 +779,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
*/
|
*/
|
||||||
uint8_t count_buf[4];
|
uint8_t count_buf[4];
|
||||||
|
|
||||||
if (read(xsvf_fd, count_buf, 4) < 0 )
|
if (read(xsvf_fd, count_buf, 4) < 0)
|
||||||
{
|
{
|
||||||
do_abort = 1;
|
do_abort = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -801,7 +801,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
|
|
||||||
if (read(xsvf_fd, &state, 1) < 0
|
if (read(xsvf_fd, &state, 1) < 0
|
||||||
|| read(xsvf_fd, clock_buf, 4) < 0
|
|| read(xsvf_fd, clock_buf, 4) < 0
|
||||||
|| read(xsvf_fd, usecs_buf, 4) < 0 )
|
|| read(xsvf_fd, usecs_buf, 4) < 0)
|
||||||
{
|
{
|
||||||
do_abort = 1;
|
do_abort = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -827,7 +827,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
LOG_DEBUG("LSDR");
|
LOG_DEBUG("LSDR");
|
||||||
|
|
||||||
if (xsvf_read_buffer(xsdrsize, xsvf_fd, dr_out_buf) != ERROR_OK
|
if (xsvf_read_buffer(xsdrsize, xsvf_fd, dr_out_buf) != ERROR_OK
|
||||||
|| xsvf_read_buffer(xsdrsize, xsvf_fd, dr_in_buf) != ERROR_OK )
|
|| xsvf_read_buffer(xsdrsize, xsvf_fd, dr_in_buf) != ERROR_OK)
|
||||||
{
|
{
|
||||||
do_abort = 1;
|
do_abort = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -836,11 +836,11 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
if (limit < 1)
|
if (limit < 1)
|
||||||
limit = 1;
|
limit = 1;
|
||||||
|
|
||||||
for (attempt = 0; attempt < limit; ++attempt )
|
for (attempt = 0; attempt < limit; ++attempt)
|
||||||
{
|
{
|
||||||
scan_field_t field;
|
scan_field_t field;
|
||||||
|
|
||||||
jtag_add_statemove(loop_state );
|
jtag_add_statemove(loop_state);
|
||||||
jtag_add_clocks(loop_clocks);
|
jtag_add_clocks(loop_clocks);
|
||||||
jtag_add_sleep(loop_usecs);
|
jtag_add_sleep(loop_usecs);
|
||||||
|
|
||||||
|
@ -871,9 +871,9 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!matched )
|
if (!matched)
|
||||||
{
|
{
|
||||||
LOG_USER("LSDR mismatch" );
|
LOG_USER("LSDR mismatch");
|
||||||
tdo_mismatch = 1;
|
tdo_mismatch = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -890,7 +890,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (trst_mode )
|
switch (trst_mode)
|
||||||
{
|
{
|
||||||
case XTRST_ON:
|
case XTRST_ON:
|
||||||
jtag_add_reset(1, 0);
|
jtag_add_reset(1, 0);
|
||||||
|
@ -902,7 +902,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
case XTRST_ABSENT:
|
case XTRST_ABSENT:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_ERROR("XTRST mode argument (0x%02X) out of range", trst_mode );
|
LOG_ERROR("XTRST mode argument (0x%02X) out of range", trst_mode);
|
||||||
do_abort = 1;
|
do_abort = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -918,7 +918,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
LOG_DEBUG("xsvf failed, setting taps to reasonable state");
|
LOG_DEBUG("xsvf failed, setting taps to reasonable state");
|
||||||
|
|
||||||
/* upon error, return the TAPs to a reasonable state */
|
/* upon error, return the TAPs to a reasonable state */
|
||||||
jtag_add_statemove(TAP_IDLE );
|
jtag_add_statemove(TAP_IDLE);
|
||||||
jtag_execute_queue();
|
jtag_execute_queue();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -927,7 +927,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
if (tdo_mismatch)
|
if (tdo_mismatch)
|
||||||
{
|
{
|
||||||
command_print(cmd_ctx, "TDO mismatch, somewhere near offset %lu in xsvf file, aborting",
|
command_print(cmd_ctx, "TDO mismatch, somewhere near offset %lu in xsvf file, aborting",
|
||||||
file_offset );
|
file_offset);
|
||||||
|
|
||||||
|
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
|
|
Loading…
Reference in New Issue