static int __init ram_console_init(struct ram_console_buffer *buffer, size_t buffer_size) { int i; ram_console_buffer = buffer; ram_console_buffer_size = buffer_size - sizeof(struct ram_console_buffer); if (buffer->sig == RAM_CONSOLE_SIG) { if (buffer->size > ram_console_buffer_size || buffer->start > buffer->size) printk(KERN_INFO "ram_console: found existing invalid " "buffer, size %d, start %d\n", buffer->size, buffer->start); else { printk(KERN_INFO "ram_console: found existing buffer, " "size %d, start %d\n", buffer->size, buffer->start); ram_console_save_old(buffer); } } else { printk(KERN_INFO "ram_console: no valid data in buffer " "(sig = 0x%08x)\n", buffer->sig); } buffer->sig = RAM_CONSOLE_SIG; buffer->fiq_step = 0; buffer->start = 0; buffer->size = 0; buffer->hw_status = 0; buffer->shutdown_mode = 0; buffer->bin_log_count = 0; buffer->jiffies_current = buffer->jiffies_wdk_kick = buffer->jiffies_idle = 0; for (i = 0; i < mtk_cpu_num; i++) { buffer->last_irq_enter[i] = 0; buffer->jiffies_last_irq_enter[i] = 0; buffer->last_irq_exit[i] = 0; buffer->jiffies_last_irq_exit[i] = 0; buffer->jiffies_last_sched[i] = 0; memset(buffer->last_sched_comm[i], i, TASK_COMM_LEN); } register_console(&ram_console); return 0; }
static int __init ram_console_init(struct ram_console_buffer *buffer, size_t buffer_size) { ram_console_buffer = buffer; if (buffer->sig != REBOOT_REASON_SIG) { memset((void*)buffer, 0, buffer_size); buffer->sig = REBOOT_REASON_SIG; } ram_console_save_old(buffer, buffer_size); if (buffer->sz_lk != 0 && buffer->off_lk + ALIGN(buffer->sz_lk, 64) == buffer->off_llk) buffer->off_linux = buffer->off_llk + ALIGN(buffer->sz_lk, 64); else buffer->off_linux = 512; /* OTA:leave enough space for pl/lk */ buffer->sz_buffer = buffer_size; buffer->off_console = buffer->off_linux + ALIGN(sizeof(struct last_reboot_reason), 64); buffer->sz_console = buffer->sz_buffer - buffer->off_console; memset((void*)buffer + buffer->off_linux, 0, buffer_size - buffer->off_linux); #ifndef CONFIG_PSTORE register_console(&ram_console); #endif return 0; }
static int __init ram_console_init(struct ram_console_buffer *buffer, size_t buffer_size) { ram_console_buffer = buffer; ram_console_buffer_size = buffer_size - sizeof(struct ram_console_buffer); if (buffer->sig == RAM_CONSOLE_SIG) { if (buffer->size > ram_console_buffer_size || buffer->start > buffer->size) pr_err("ram_console: found existing invalid buffer, size %d, start %d\n", buffer->size, buffer->start); else { pr_err("ram_console: found existing buffer,size %d, start %d\n", buffer->size, buffer->start); ram_console_save_old(buffer); } } else { pr_err("ram_console: no valid data in buffer(sig = 0x%08x)\n", buffer->sig); } memset(buffer, 0, buffer_size); buffer->sig = RAM_CONSOLE_SIG; register_console(&ram_console); return 0; }
static int __init ram_console_init(struct ram_console_buffer *buffer, size_t buffer_size, char *old_buf) { #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION int numerr; uint8_t *par; #endif ram_console_buffer = buffer; ram_console_buffer_size = buffer_size - sizeof(struct ram_console_buffer); if (ram_console_buffer_size > buffer_size) { pr_err("ram_console: buffer %p, invalid size %zu, " "datasize %zu\n", buffer, buffer_size, ram_console_buffer_size); return 0; } #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION ram_console_buffer_size -= (DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) + 1) * ECC_SIZE; if (ram_console_buffer_size > buffer_size) { pr_err("ram_console: buffer %p, invalid size %zu, " "non-ecc datasize %zu\n", buffer, buffer_size, ram_console_buffer_size); return 0; } ram_console_par_buffer = buffer->data + ram_console_buffer_size; /* first consecutive root is 0 * primitive element to generate roots = 1 */ ram_console_rs_decoder = init_rs(ECC_SYMSIZE, ECC_POLY, 0, 1, ECC_SIZE); if (ram_console_rs_decoder == NULL) { printk(KERN_INFO "ram_console: init_rs failed\n"); return 0; } ram_console_corrected_bytes = 0; ram_console_bad_blocks = 0; par = ram_console_par_buffer + DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) * ECC_SIZE; numerr = ram_console_decode_rs8(buffer, sizeof(*buffer), par); if (numerr > 0) { printk(KERN_INFO "ram_console: error in header, %d\n", numerr); ram_console_corrected_bytes += numerr; } else if (numerr < 0) { printk(KERN_INFO "ram_console: uncorrectable error in header\n"); ram_console_bad_blocks++; } #endif if (buffer->sig == RAM_CONSOLE_SIG) { if (buffer->size > ram_console_buffer_size || buffer->start > buffer->size) printk(KERN_INFO "ram_console: found existing invalid " "buffer, size %d, start %d\n", buffer->size, buffer->start); else { printk(KERN_INFO "ram_console: found existing buffer, " "size %d, start %d\n", buffer->size, buffer->start); ram_console_save_old(buffer, old_buf); } } else { printk(KERN_INFO "ram_console: no valid data in buffer " "(sig = 0x%08x)\n", buffer->sig); } buffer->sig = RAM_CONSOLE_SIG; buffer->start = 0; buffer->size = 0; register_console(&ram_console); #ifdef CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE console_verbose(); #endif return 0; }
static int __init ram_console_init(struct ram_console_buffer *buffer, size_t buffer_size, char *old_buf) { #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION int numerr; uint8_t *par; #endif ram_console_buffer = buffer; ram_console_buffer_size = buffer_size - sizeof(struct ram_console_buffer); #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION ram_console_buffer_size -= (DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) + 1) * ECC_SIZE; ram_console_par_buffer = buffer->data + ram_console_buffer_size; /* Symbolsize is 10 (bits) * Primitive polynomial is x^10+x^3+1 * first consecutive root is 0 * primitive element to generate roots = 1 * generator polynomial degree (number of roots) = 6 */ ram_console_rs_decoder = init_rs(10, 0x409, 0, 1, 6); ram_console_corrected_bytes = 0; ram_console_bad_blocks = 0; par = ram_console_par_buffer + DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) * ECC_SIZE; numerr = decode_rs8(ram_console_rs_decoder, (uint8_t *)buffer, (uint16_t *)par, sizeof(*buffer), NULL, 0, NULL, 0, NULL); if (numerr > 0) { printk(KERN_INFO "ram_console: error in header, %d\n", numerr); ram_console_corrected_bytes += numerr; } else if (numerr < 0) { printk(KERN_INFO "ram_console: uncorrectable error in header\n"); ram_console_bad_blocks++; } #endif if (buffer->sig == RAM_CONSOLE_SIG) { if (buffer->size > buffer_size || buffer->start >= buffer_size) printk(KERN_INFO "ram_console: found existing invalid " "buffer, size %d, start %d\n", buffer->size, buffer->start); else { printk(KERN_INFO "ram_console: found existing buffer, " "size %d, start %d\n", buffer->size, buffer->start); ram_console_save_old(buffer, old_buf); } } else { printk(KERN_INFO "ram_console: no valid data in buffer " "(sig = 0x%08x)\n", buffer->sig); } buffer->sig = RAM_CONSOLE_SIG; buffer->start = 0; buffer->size = 0; register_console(&ram_console); #ifdef CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE console_verbose(); #endif return 0; }
static int __init ram_console_init(struct ram_console_buffer *buffer, size_t buffer_size, const char *bootinfo, char *old_buf) { int i; #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION int numerr; uint8_t *par; #endif ram_console_buffer = buffer; ram_console_buffer_size = buffer_size - sizeof(struct ram_console_buffer); if (ram_console_buffer_size > buffer_size) { pr_err("ram_console: buffer %p, invalid size %zu, " "datasize %zu\n", buffer, buffer_size, ram_console_buffer_size); return 0; } #ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION ram_console_buffer_size -= (DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) + 1) * ECC_SIZE; if (ram_console_buffer_size > buffer_size) { pr_err("ram_console: buffer %p, invalid size %zu, " "non-ecc datasize %zu\n", buffer, buffer_size, ram_console_buffer_size); return 0; } ram_console_par_buffer = buffer->data + ram_console_buffer_size; /* first consecutive root is 0 * primitive element to generate roots = 1 */ ram_console_rs_decoder = init_rs(ECC_SYMSIZE, ECC_POLY, 0, 1, ECC_SIZE); if (ram_console_rs_decoder == NULL) { printk(KERN_INFO "ram_console: init_rs failed\n"); return 0; } ram_console_corrected_bytes = 0; ram_console_bad_blocks = 0; par = ram_console_par_buffer + DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) * ECC_SIZE; numerr = ram_console_decode_rs8(buffer, sizeof(*buffer), par); if (numerr > 0) { printk(KERN_INFO "ram_console: error in header, %d\n", numerr); ram_console_corrected_bytes += numerr; } else if (numerr < 0) { printk(KERN_INFO "ram_console: uncorrectable error in header\n"); ram_console_bad_blocks++; } #endif if (buffer->sig == RAM_CONSOLE_SIG) { if (buffer->size > ram_console_buffer_size || buffer->start > buffer->size) printk(KERN_INFO "ram_console: found existing invalid " "buffer, size %d, start %d\n", buffer->size, buffer->start); else { printk(KERN_INFO "ram_console: found existing buffer, " "size %d, start %d\n", buffer->size, buffer->start); ram_console_save_old(buffer, bootinfo, old_buf); } } else { printk(KERN_INFO "ram_console: no valid data in buffer " "(sig = 0x%08x)\n", buffer->sig); } buffer->sig = RAM_CONSOLE_SIG; buffer->start = 0; buffer->size = 0; buffer->hw_status = 0; buffer->shutdown_mode = 0; buffer->jiffies_current = buffer->jiffies_wdk_kick = buffer->jiffies_idle = INITIAL_JIFFIES; for (i = 0; i < RC_CPU_COUNT; i++) { buffer->last_irq_enter[i] = 0; buffer->jiffies_last_irq_enter[i] = 0; buffer->last_irq_exit[i] = 0; buffer->jiffies_last_irq_exit[i] = 0; buffer->jiffies_last_sched[i] = 0; memset(buffer->last_sched_comm[i], i, TASK_COMM_LEN); } register_console(&ram_console); #ifdef CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE //console_verbose(); #endif return 0; }