OpenOCD
binarybuffer.c File Reference
Include dependency graph for binarybuffer.c:

Go to the source code of this file.

Functions

void bit_copy_discard (struct bit_copy_queue *q)
 
void bit_copy_execute (struct bit_copy_queue *q)
 
void bit_copy_queue_init (struct bit_copy_queue *q)
 
int bit_copy_queued (struct bit_copy_queue *q, uint8_t *dst, unsigned int dst_offset, const uint8_t *src, unsigned int src_offset, unsigned int bit_count)
 
void * buf_cpy (const void *from, void *_to, unsigned int size)
 Copies size bits out of from and into to. More...
 
bool buf_eq (const void *_buf1, const void *_buf2, unsigned int size)
 
bool buf_eq_mask (const void *_buf1, const void *_buf2, const void *_mask, unsigned int size)
 
static bool buf_eq_masked (uint8_t a, uint8_t b, uint8_t m)
 
static bool buf_eq_trailing (uint8_t a, uint8_t b, uint8_t m, unsigned int trailing)
 
void * buf_set_buf (const void *_src, unsigned int src_start, void *_dst, unsigned int dst_start, unsigned int len)
 
void * buf_set_ones (void *_buf, unsigned int size)
 Set the contents of buf with count bits, all set to 1. More...
 
char * buf_to_hex_str (const void *_buf, unsigned int buf_len)
 
void buffer_shr (void *_buf, unsigned int buf_len, unsigned int count)
 
uint32_t flip_u32 (uint32_t value, unsigned int num)
 Inverts the ordering of bits inside a 32-bit word (e.g. More...
 
size_t hexify (char *hex, const uint8_t *bin, size_t count, size_t length)
 Convert binary data into a string of hexadecimal pairs. More...
 
int str_to_buf (const char *str, void *_buf, unsigned int buf_bitsize)
 Parse an unsigned number (provided as a zero-terminated string) into a bit buffer whose size is buf_len bits. More...
 
size_t unhexify (uint8_t *bin, const char *hex, size_t count)
 Convert a string of hexadecimal pairs into its binary representation. More...
 

Variables

static const unsigned char bit_reverse_table256 []
 
static const char hex_digits []
 

Function Documentation

◆ bit_copy_discard()

void bit_copy_discard ( struct bit_copy_queue q)

◆ bit_copy_execute()

◆ bit_copy_queue_init()

void bit_copy_queue_init ( struct bit_copy_queue q)

Definition at line 287 of file binarybuffer.c.

References INIT_LIST_HEAD(), and bit_copy_queue::list.

Referenced by mpsse_open().

◆ bit_copy_queued()

int bit_copy_queued ( struct bit_copy_queue q,
uint8_t *  dst,
unsigned int  dst_offset,
const uint8_t *  src,
unsigned int  src_offset,
unsigned int  bit_count 
)

◆ buf_cpy()

void* buf_cpy ( const void *  from,
void *  to,
unsigned int  size 
)

Copies size bits out of from and into to.

Any extra bits in the final byte will be set to zero.

Parameters
fromThe buffer to copy into to.
toThe buffer that will receive the copy of from.
sizeThe number of bits to copy.

Definition at line 43 of file binarybuffer.c.

References DIV_ROUND_UP, NULL, and size.

Referenced by armv7m_read_core_reg(), armv7m_set_core_reg(), armv7m_write_core_reg(), cortex_m_fast_read_all_regs(), esirisc_read_memory(), interface_add_tms_seq(), interface_jtag_add_ir_scan(), jtag_add_plain_scan(), jtag_read_buffer(), jtag_scan_field_clone(), riscv_run_algorithm(), rtos_generic_stack_read(), xscale_get_reg(), xtensa_canonical_to_windowbase_offset(), xtensa_fetch_all_regs(), xtensa_start_algorithm(), xtensa_wait_algorithm(), zephyr_get_arc_state(), and zephyr_get_arm_state().

◆ buf_eq()

bool buf_eq ( const void *  _buf1,
const void *  _buf2,
unsigned int  size 
)

Definition at line 70 of file binarybuffer.c.

References buf_eq_trailing(), and size.

Referenced by jtag_check_value_inner().

◆ buf_eq_mask()

bool buf_eq_mask ( const void *  _buf1,
const void *  _buf2,
const void *  _mask,
unsigned int  size 
)

Definition at line 87 of file binarybuffer.c.

References buf_eq_masked(), buf_eq_trailing(), mask, and size.

Referenced by jtag_check_value_inner(), and svf_check_tdo().

◆ buf_eq_masked()

static bool buf_eq_masked ( uint8_t  a,
uint8_t  b,
uint8_t  m 
)
static

Definition at line 60 of file binarybuffer.c.

Referenced by buf_eq_mask(), and buf_eq_trailing().

◆ buf_eq_trailing()

static bool buf_eq_trailing ( uint8_t  a,
uint8_t  b,
uint8_t  m,
unsigned int  trailing 
)
static

Definition at line 64 of file binarybuffer.c.

References buf_eq_masked(), and mask.

Referenced by buf_eq(), and buf_eq_mask().

◆ buf_set_buf()

void* buf_set_buf ( const void *  _src,
unsigned int  src_start,
void *  _dst,
unsigned int  dst_start,
unsigned int  len 
)

◆ buf_set_ones()

void* buf_set_ones ( void *  buf,
unsigned int  size 
)

Set the contents of buf with count bits, all set to 1.

Parameters
bufThe buffer to fill with ones.
sizeThe number of bits.
Returns
The original buffer (buf).

Definition at line 105 of file binarybuffer.c.

References NULL, and size.

Referenced by interface_jtag_add_ir_scan(), jtag_reset_callback(), jtag_tap_init(), and jtag_validate_ircapture().

◆ buf_to_hex_str()

◆ buffer_shr()

void buffer_shr ( void *  _buf,
unsigned int  buf_len,
unsigned int  count 
)

Definition at line 398 of file binarybuffer.c.

References count.

Referenced by adbg_wb_burst_read(), dmi_scan(), and riscv_batch_run().

◆ flip_u32()

uint32_t flip_u32 ( uint32_t  value,
unsigned int  width 
)

Inverts the ordering of bits inside a 32-bit word (e.g.

31..0 -> 0..31). This routine can be used to flip smaller data types by using smaller values for width.

Parameters
valueThe word to flip.
widthThe number of bits in value (2-32).
Returns
A 32-bit word with value in reversed bit-order.

Definition at line 165 of file binarybuffer.c.

References bit_reverse_table256.

Referenced by arm720t_scan_cp15(), arm7_9_endianness_callback(), arm7flip32(), arm7tdmi_clock_out_inner(), arm9tdmi_clock_out(), armjtagew_tap_execute(), efinix_load(), feroceon_dummy_clock_out(), flip_u8(), gowin_load_to_sram(), lattice_read_bit_file(), virtex2_load(), virtex2_send_32(), and virtexflip32().

◆ hexify()

size_t hexify ( char *  hex,
const uint8_t *  bin,
size_t  count,
size_t  length 
)

Convert binary data into a string of hexadecimal pairs.

Parameters
[out]hexBuffer to store string of hexadecimal pairs. The buffer size must be at least length.
[in]binBuffer with binary data to convert into hexadecimal pairs.
[in]countNumber of bytes to convert.
[in]lengthMaximum number of characters, including null-terminator, to store into hex.
Returns
The length of the converted string excluding null-terminator.

Definition at line 380 of file binarybuffer.c.

References count, hex_digits, and length.

Referenced by COMMAND_HANDLER(), gdb_output_con(), gdb_query_packet(), gdb_read_memory_packet(), gdb_read_smp_packet(), icdi_send_remote_cmd(), icdi_usb_write_reg(), linux_thread_extra_info(), rtos_put_gdb_reg_list(), rtos_qsymbol(), rtos_thread_packet(), and tcl_target_callback_trace_handler().

◆ str_to_buf()

int str_to_buf ( const char *  str,
void *  _buf,
unsigned int  buf_bitsize 
)

Parse an unsigned number (provided as a zero-terminated string) into a bit buffer whose size is buf_len bits.

The base of the number is detected between decimal, hexadecimal and octal.

Parameters
strInput number, zero-terminated string
_bufOutput buffer, allocated by the caller
buf_bitsizeOutput buffer size in bits
Returns
Error on invalid or overflowing number

Definition at line 201 of file binarybuffer.c.

References DIV_ROUND_UP, ERROR_INVALID_NUMBER, ERROR_NUMBER_EXCEEDS_BUFFER, ERROR_OK, and mask.

Referenced by COMMAND_HELPER().

◆ unhexify()

size_t unhexify ( uint8_t *  bin,
const char *  hex,
size_t  count 
)

Convert a string of hexadecimal pairs into its binary representation.

Parameters
[out]binBuffer to store binary representation. The buffer size must be at least count.
[in]hexString with hexadecimal pairs to convert into its binary representation.
[in]countNumber of hexadecimal pairs to convert.
Returns
The number of converted hexadecimal pairs.

Definition at line 342 of file binarybuffer.c.

References count.

Referenced by COMMAND_HANDLER(), efinix_read_bit_file(), gatemate_read_cfg_line(), gdb_query_packet(), gdb_write_memory_packet(), icdi_get_cmd_result(), icdi_usb_read_reg(), icdi_usb_version(), next_hex_encoded_field(), and rtos_qsymbol().

Variable Documentation

◆ bit_reverse_table256

const unsigned char bit_reverse_table256[]
static
Initial value:
= {
0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
}

Definition at line 19 of file binarybuffer.c.

Referenced by flip_u32().

◆ hex_digits

const char hex_digits[]
static
Initial value:
= {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'
}

Definition at line 38 of file binarybuffer.c.

Referenced by buf_to_hex_str(), and hexify().