static int ram_console_lastk_show(struct ram_console_buffer *buffer, struct seq_file *m, void *v) { unsigned int wdt_status; if (ram_console_check_header(buffer) && buffer->sz_buffer != 0) { pr_err("ram_console: buffer %p, size %x(%x)\n", buffer, buffer->sz_buffer, ram_console_buffer->sz_buffer); if (buffer) seq_write(m, buffer, ram_console_buffer->sz_buffer); else seq_printf(m, "NO VALID DATA.\n"); return 0; } if (buffer->off_pl == 0 || buffer->off_pl + ALIGN(buffer->sz_pl, 64) != buffer->off_lpl) { /* workaround for compatiblity to old preloader & lk (OTA) */ wdt_status = *((unsigned char*)buffer + 12); } else wdt_status = LAST_RRPL_BUF_VAL(buffer, wdt_status); seq_printf(m, "ram console header, hw_status: %u, fiq step %u.\n", wdt_status, LAST_RRR_BUF_VAL(buffer, fiq_step)); if (buffer->off_console != 0 && buffer->off_linux + ALIGN(sizeof(struct last_reboot_reason), 64) == buffer->off_console && buffer->sz_console == buffer->sz_buffer - buffer->off_console && buffer->log_size <= buffer->sz_console && buffer->log_start <= buffer->sz_console) { seq_write(m, (void*)buffer + buffer->off_console + buffer->log_start, buffer->log_size - buffer->log_start); seq_write(m, (void*)buffer + buffer->off_console, buffer->log_start); } else { seq_printf(m, "header may be corrupted, dump the raw buffer for reference only\n"); seq_write(m, buffer, ram_console_buffer->sz_buffer); } return 0; }
static int ram_console_lastk_show(struct ram_console_buffer *buffer, struct seq_file *m, void *v) { unsigned int wdt_status; if (ram_console_check_header(buffer) && buffer->sz_buffer != 0) { pr_err("ram_console: buffer %p, size %x(%x)\n", buffer, buffer->sz_buffer, ram_console_buffer->sz_buffer); if (buffer) seq_write(m, buffer, ram_console_buffer->sz_buffer); else seq_printf(m, "NO VALID DATA.\n"); return 0; } if (buffer->off_pl == 0 || buffer->off_pl + ALIGN(buffer->sz_pl, 64) != buffer->off_lpl) { pr_err("ram_console OTA: sig(0x%p):0x%x, off_lpl(0x%p):0x%x, off_pl(0x%p):0x%x, sz_pl(0x%p):0x%x, off_lk(0x%p):0x%x, off_llk(0x%p):0x%x,sz_lk(0x%p):0x%x\n", &(buffer->sig), buffer->sig, &(buffer->off_lpl), buffer->off_lpl, &(buffer->off_pl), buffer->off_pl, &(buffer->sz_pl), buffer->sz_pl, &(buffer->off_lk), buffer->off_lk, &(buffer->off_llk), buffer->off_llk, &(buffer->sz_lk), buffer->sz_lk); /* workaround for compatiblity to old preloader & lk (OTA) */ wdt_status = *((unsigned char*)buffer + 12); } else { pr_err("ram_console NON-OTA: sig(0x%p):0x%x, off_lpl(0x%p):0x%x, off_pl(0x%p):0x%x, sz_pl(0x%p):0x%x, off_lk(0x%p):0x%x, off_llk(0x%p):0x%x,sz_lk(0x%p):0x%x\n", &(buffer->sig), buffer->sig, &(buffer->off_lpl), buffer->off_lpl, &(buffer->off_pl), buffer->off_pl, &(buffer->sz_pl), buffer->sz_pl, &(buffer->off_lk), buffer->off_lk, &(buffer->off_llk), buffer->off_llk, &(buffer->sz_lk), buffer->sz_lk); wdt_status = LAST_RRPL_BUF_VAL(buffer, wdt_status); } seq_printf(m, "ram console header, hw_status: %u, fiq step %u.\n", wdt_status, LAST_RRR_BUF_VAL(buffer, fiq_step)); #ifdef CONFIG_PSTORE_CONSOLE pr_err("ram_console: pstore show start\n"); pstore_console_show(PSTORE_TYPE_CONSOLE, m, v); pr_err("ram_console: pstore show end\n"); #else if (buffer->off_console != 0 && buffer->off_linux + ALIGN(sizeof(struct last_reboot_reason), 64) == buffer->off_console && buffer->sz_console == buffer->sz_buffer - buffer->off_console && buffer->log_size <= buffer->sz_console && buffer->log_start <= buffer->sz_console) { seq_write(m, (void*)buffer + buffer->off_console + buffer->log_start, buffer->log_size - buffer->log_start); seq_write(m, (void*)buffer + buffer->off_console, buffer->log_start); } else { seq_printf(m, "header may be corrupted, dump the raw buffer for reference only\n"); seq_write(m, buffer, ram_console_buffer->sz_buffer); } #endif return 0; }