1 /* 2 * Copyright (C) 2011 Google, Inc. 3 * 4 * This software is licensed under the terms of the GNU General Public 5 * License version 2, as published by the Free Software Foundation, and 6 * may be copied, distributed, and modified under those terms. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 */ 14 15 #ifndef __LINUX_PERSISTENT_RAM_H__ 16 #define __LINUX_PERSISTENT_RAM_H__ 17 18 #include <linux/device.h> 19 #include <linux/kernel.h> 20 #include <linux/list.h> 21 #include <linux/types.h> 22 23 struct persistent_ram_buffer; 24 25 struct persistent_ram_descriptor { 26 const char *name; 27 phys_addr_t size; 28 }; 29 30 struct persistent_ram { 31 phys_addr_t start; 32 phys_addr_t size; 33 34 int num_descs; 35 struct persistent_ram_descriptor *descs; 36 37 struct list_head node; 38 }; 39 40 struct persistent_ram_zone { 41 struct list_head node; 42 void *vaddr; 43 struct persistent_ram_buffer *buffer; 44 size_t buffer_size; 45 46 /* ECC correction */ 47 bool ecc; 48 char *par_buffer; 49 char *par_header; 50 struct rs_control *rs_decoder; 51 int corrected_bytes; 52 int bad_blocks; 53 int ecc_block_size; 54 int ecc_size; 55 int ecc_symsize; 56 int ecc_poly; 57 58 char *old_log; 59 size_t old_log_size; 60 size_t old_log_footer_size; 61 bool early; 62 }; 63 64 int persistent_ram_early_init(struct persistent_ram *ram); 65 66 struct persistent_ram_zone *persistent_ram_init_ringbuffer(struct device *dev, 67 bool ecc); 68 69 int persistent_ram_write(struct persistent_ram_zone *prz, const void *s, 70 unsigned int count); 71 72 size_t persistent_ram_old_size(struct persistent_ram_zone *prz); 73 void *persistent_ram_old(struct persistent_ram_zone *prz); 74 void persistent_ram_free_old(struct persistent_ram_zone *prz); 75 ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz, 76 char *str, size_t len); 77 78 #endif 79