示例#1
0
static void ram_console_update(const char *s, unsigned int count)
{
	struct ram_console_buffer *buffer = ram_console_buffer;
#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
	uint8_t *buffer_end = buffer->data + ram_console_buffer_size;
	uint8_t *block;
	uint8_t *par;
	int size = ECC_BLOCK_SIZE;
#endif
	memcpy(buffer->data + buffer->start, s, count);
#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
	block = buffer->data + (buffer->start & ~(ECC_BLOCK_SIZE - 1));
	par = ram_console_par_buffer +
	      (buffer->start / ECC_BLOCK_SIZE) * ECC_SIZE;
	do {
		/* Initialize the parity buffer */
		memset(par, 0, ECC_SIZE);
		if (block + ECC_BLOCK_SIZE > buffer_end)
			size = buffer_end - block;
		encode_rs8(ram_console_rs_decoder, block, size,
			   (uint16_t *)par, 0);
		block += ECC_BLOCK_SIZE;
		par += ECC_SIZE;
	} while (block < buffer->data + buffer->start + count);
#endif
}
示例#2
0
static void ram_console_encode_rs8(uint8_t *data, size_t len, uint8_t *ecc)
{
	int i;
	uint16_t par[ECC_SIZE];
	/* Initialize the parity buffer */
	memset(par, 0, sizeof(par));
	encode_rs8(ram_console_rs_decoder, data, len, par, 0);
	for (i = 0; i < ECC_SIZE; i++)
		ecc[i] = par[i];
}
示例#3
0
static void ram_console_update_header(void)
{
#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
	struct ram_console_buffer *buffer = ram_console_buffer;
	uint8_t *par;
	par = ram_console_par_buffer +
	      DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) * ECC_SIZE;
	memset(par, 0, ECC_SIZE);
	encode_rs8(ram_console_rs_decoder, (uint8_t *)buffer, sizeof(*buffer),
		   (uint16_t *)par, 0);
#endif
}
static void persistent_ram_encode_rs8(struct persistent_ram_zone *prz,
	uint8_t *data, size_t len, uint8_t *ecc)
{
	int i;
	uint16_t par[prz->ecc_size];

	/* Initialize the parity buffer */
	memset(par, 0, sizeof(par));
	encode_rs8(prz->rs_decoder, data, len, par, 0);
	for (i = 0; i < prz->ecc_size; i++)
		ecc[i] = par[i];
}
示例#5
0
static void __init bootinfo_bck_update_ecc(struct rs_control *rs,
				struct bootinfo_bck_buf *buf)
{
	u8 *payload, *ecc;
	int i;
	u16 par[ECC_SIZE];

	for (payload = (u8 *)&buf->bck, ecc = (u8 *)&buf->ecc;
			payload < (u8 *)&buf->ecc;
			payload += ECC_BLOCK_SIZE, ecc += ECC_SIZE) {
		memset(par, 0, sizeof(par));
		encode_rs8(rs, payload, ECC_BLOCK_SIZE, par, 0);
		for (i = 0; i < ECC_SIZE; i++)
			ecc[i] = par[i];
	}
}