]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - drivers/staging/android/persistent_ram.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[linux-2.6.git] / drivers / staging / android / persistent_ram.h
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