| /* | 
 |  * Copyright (C) 2011 Google, Inc. | 
 |  * | 
 |  * This software is licensed under the terms of the GNU General Public | 
 |  * License version 2, as published by the Free Software Foundation, and | 
 |  * may be copied, distributed, and modified under those terms. | 
 |  * | 
 |  * This program is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |  * GNU General Public License for more details. | 
 |  * | 
 |  */ | 
 |  | 
 | #ifndef __LINUX_PERSISTENT_RAM_H__ | 
 | #define __LINUX_PERSISTENT_RAM_H__ | 
 |  | 
 | #include <linux/device.h> | 
 | #include <linux/kernel.h> | 
 | #include <linux/list.h> | 
 | #include <linux/types.h> | 
 |  | 
 | struct persistent_ram_buffer; | 
 |  | 
 | struct persistent_ram_descriptor { | 
 | 	const char	*name; | 
 | 	phys_addr_t	size; | 
 | }; | 
 |  | 
 | struct persistent_ram { | 
 | 	phys_addr_t	start; | 
 | 	phys_addr_t	size; | 
 |  | 
 | 	int ecc_block_size; | 
 | 	int ecc_size; | 
 | 	int ecc_symsize; | 
 | 	int ecc_poly; | 
 |  | 
 | 	int					num_descs; | 
 | 	struct persistent_ram_descriptor	*descs; | 
 |  | 
 | 	struct list_head node; | 
 | }; | 
 |  | 
 | struct persistent_ram_zone { | 
 | 	struct list_head node; | 
 | 	void *vaddr; | 
 | 	struct persistent_ram_buffer *buffer; | 
 | 	size_t buffer_size; | 
 |  | 
 | 	/* ECC correction */ | 
 | 	bool ecc; | 
 | 	char *par_buffer; | 
 | 	char *par_header; | 
 | 	struct rs_control *rs_decoder; | 
 | 	int corrected_bytes; | 
 | 	int bad_blocks; | 
 | 	int ecc_block_size; | 
 | 	int ecc_size; | 
 | 	int ecc_symsize; | 
 | 	int ecc_poly; | 
 |  | 
 | 	char *old_log; | 
 | 	size_t old_log_size; | 
 | 	size_t old_log_footer_size; | 
 | 	bool early; | 
 | }; | 
 |  | 
 | int persistent_ram_early_init(struct persistent_ram *ram); | 
 |  | 
 | struct persistent_ram_zone *persistent_ram_init_ringbuffer(struct device *dev, | 
 | 		bool ecc); | 
 |  | 
 | int persistent_ram_write(struct persistent_ram_zone *prz, const void *s, | 
 | 	unsigned int count); | 
 |  | 
 | size_t persistent_ram_old_size(struct persistent_ram_zone *prz); | 
 | void *persistent_ram_old(struct persistent_ram_zone *prz); | 
 | void persistent_ram_free_old(struct persistent_ram_zone *prz); | 
 | ssize_t persistent_ram_ecc_string(struct persistent_ram_zone *prz, | 
 | 	char *str, size_t len); | 
 |  | 
 | #endif |