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 }
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]; }
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]; }
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]; } }