aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/platforms/ps3/os-area.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/arch/powerpc/platforms/ps3/os-area.c b/arch/powerpc/platforms/ps3/os-area.c
index 766685ab26f8..b9ea09d9d2fb 100644
--- a/arch/powerpc/platforms/ps3/os-area.c
+++ b/arch/powerpc/platforms/ps3/os-area.c
@@ -23,6 +23,7 @@
23#include <linux/workqueue.h> 23#include <linux/workqueue.h>
24#include <linux/fs.h> 24#include <linux/fs.h>
25#include <linux/syscalls.h> 25#include <linux/syscalls.h>
26#include <linux/ctype.h>
26 27
27#include <asm/lmb.h> 28#include <asm/lmb.h>
28 29
@@ -37,6 +38,8 @@ enum os_area_ldr_format {
37 HEADER_LDR_FORMAT_GZIP = 1, 38 HEADER_LDR_FORMAT_GZIP = 1,
38}; 39};
39 40
41#define OS_AREA_HEADER_MAGIC_NUM "cell_ext_os_area"
42
40/** 43/**
41 * struct os_area_header - os area header segment. 44 * struct os_area_header - os area header segment.
42 * @magic_num: Always 'cell_ext_os_area'. 45 * @magic_num: Always 'cell_ext_os_area'.
@@ -114,13 +117,11 @@ struct os_area_params {
114 u8 _reserved_5[8]; 117 u8 _reserved_5[8];
115}; 118};
116 119
117enum { 120#define OS_AREA_DB_MAGIC_NUM "-db-"
118 OS_AREA_DB_MAGIC_NUM = 0x2d64622dU,
119};
120 121
121/** 122/**
122 * struct os_area_db - Shared flash memory database. 123 * struct os_area_db - Shared flash memory database.
123 * @magic_num: Always '-db-' = 0x2d64622d. 124 * @magic_num: Always '-db-'.
124 * @version: os_area_db format version number. 125 * @version: os_area_db format version number.
125 * @index_64: byte offset of the database id index for 64 bit variables. 126 * @index_64: byte offset of the database id index for 64 bit variables.
126 * @count_64: number of usable 64 bit index entries 127 * @count_64: number of usable 64 bit index entries
@@ -135,7 +136,7 @@ enum {
135 */ 136 */
136 137
137struct os_area_db { 138struct os_area_db {
138 u32 magic_num; 139 u8 magic_num[4];
139 u16 version; 140 u16 version;
140 u16 _reserved_1; 141 u16 _reserved_1;
141 u16 index_64; 142 u16 index_64;
@@ -265,12 +266,26 @@ static void __init os_area_get_property(struct device_node *node,
265 prop->name); 266 prop->name);
266} 267}
267 268
269static void dump_field(char *s, const u8 *field, int size_of_field)
270{
271#if defined(DEBUG)
272 int i;
273
274 for (i = 0; i < size_of_field; i++)
275 s[i] = isprint(field[i]) ? field[i] : '.';
276 s[i] = 0;
277#endif
278}
279
268#define dump_header(_a) _dump_header(_a, __func__, __LINE__) 280#define dump_header(_a) _dump_header(_a, __func__, __LINE__)
269static void _dump_header(const struct os_area_header *h, const char *func, 281static void _dump_header(const struct os_area_header *h, const char *func,
270 int line) 282 int line)
271{ 283{
284 char str[sizeof(h->magic_num) + 1];
285
286 dump_field(str, h->magic_num, sizeof(h->magic_num));
272 pr_debug("%s:%d: h.magic_num: '%s'\n", func, line, 287 pr_debug("%s:%d: h.magic_num: '%s'\n", func, line,
273 h->magic_num); 288 str);
274 pr_debug("%s:%d: h.hdr_version: %u\n", func, line, 289 pr_debug("%s:%d: h.hdr_version: %u\n", func, line,
275 h->hdr_version); 290 h->hdr_version);
276 pr_debug("%s:%d: h.db_area_offset: %u\n", func, line, 291 pr_debug("%s:%d: h.db_area_offset: %u\n", func, line,
@@ -311,7 +326,8 @@ static void _dump_params(const struct os_area_params *p, const char *func,
311 326
312static int verify_header(const struct os_area_header *header) 327static int verify_header(const struct os_area_header *header)
313{ 328{
314 if (memcmp(header->magic_num, "cell_ext_os_area", 16)) { 329 if (memcmp(header->magic_num, OS_AREA_HEADER_MAGIC_NUM,
330 sizeof(header->magic_num))) {
315 pr_debug("%s:%d magic_num failed\n", __func__, __LINE__); 331 pr_debug("%s:%d magic_num failed\n", __func__, __LINE__);
316 return -1; 332 return -1;
317 } 333 }
@@ -331,7 +347,8 @@ static int verify_header(const struct os_area_header *header)
331 347
332static int db_verify(const struct os_area_db *db) 348static int db_verify(const struct os_area_db *db)
333{ 349{
334 if (db->magic_num != OS_AREA_DB_MAGIC_NUM) { 350 if (memcmp(db->magic_num, OS_AREA_DB_MAGIC_NUM,
351 sizeof(db->magic_num))) {
335 pr_debug("%s:%d magic_num failed\n", __func__, __LINE__); 352 pr_debug("%s:%d magic_num failed\n", __func__, __LINE__);
336 return -1; 353 return -1;
337 } 354 }
@@ -484,8 +501,11 @@ static int db_get_rtc_diff(const struct os_area_db *db, int64_t *rtc_diff)
484static void _dump_db(const struct os_area_db *db, const char *func, 501static void _dump_db(const struct os_area_db *db, const char *func,
485 int line) 502 int line)
486{ 503{
504 char str[sizeof(db->magic_num) + 1];
505
506 dump_field(str, db->magic_num, sizeof(db->magic_num));
487 pr_debug("%s:%d: db.magic_num: '%s'\n", func, line, 507 pr_debug("%s:%d: db.magic_num: '%s'\n", func, line,
488 (const char*)&db->magic_num); 508 str);
489 pr_debug("%s:%d: db.version: %u\n", func, line, 509 pr_debug("%s:%d: db.version: %u\n", func, line,
490 db->version); 510 db->version);
491 pr_debug("%s:%d: db.index_64: %u\n", func, line, 511 pr_debug("%s:%d: db.index_64: %u\n", func, line,
@@ -516,7 +536,7 @@ static void os_area_db_init(struct os_area_db *db)
516 536
517 memset(db, 0, sizeof(struct os_area_db)); 537 memset(db, 0, sizeof(struct os_area_db));
518 538
519 db->magic_num = OS_AREA_DB_MAGIC_NUM; 539 memcpy(db->magic_num, OS_AREA_DB_MAGIC_NUM, sizeof(db->magic_num));
520 db->version = 1; 540 db->version = 1;
521 db->index_64 = HEADER_SIZE; 541 db->index_64 = HEADER_SIZE;
522 db->count_64 = VALUES_64_COUNT; 542 db->count_64 = VALUES_64_COUNT;