diff options
author | Aruna Balakrishnaiah <aruna@linux.vnet.ibm.com> | 2013-06-05 14:51:16 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-06-20 03:04:46 -0400 |
commit | 126746101e89991f179209ef58ab5937bc5ea4a3 (patch) | |
tree | 79ecc88208fc3a6a27e56e4b9ee467ccd077c92c /arch/powerpc/platforms/pseries | |
parent | b1f70e1f72179f7afe02f4131ed15da406f93e0d (diff) |
powerpc/pseries: Introduce generic read function to read nvram-partitions
Introduce generic read function to read nvram partitions other than rtas.
nvram_read_error_log will be retained which is used to read rtas partition
from rtasd. nvram_read_partition is the generic read function to read from
any nvram partition.
Signed-off-by: Aruna Balakrishnaiah <aruna@linux.vnet.ibm.com>
Reviewed-by: Jim Keniston <jkenisto@us.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/pseries')
-rw-r--r-- | arch/powerpc/platforms/pseries/nvram.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/arch/powerpc/platforms/pseries/nvram.c b/arch/powerpc/platforms/pseries/nvram.c index 742735acd8b6..088f023d8f25 100644 --- a/arch/powerpc/platforms/pseries/nvram.c +++ b/arch/powerpc/platforms/pseries/nvram.c | |||
@@ -293,34 +293,35 @@ int nvram_write_error_log(char * buff, int length, | |||
293 | return rc; | 293 | return rc; |
294 | } | 294 | } |
295 | 295 | ||
296 | /* nvram_read_error_log | 296 | /* nvram_read_partition |
297 | * | 297 | * |
298 | * Reads nvram for error log for at most 'length' | 298 | * Reads nvram partition for at most 'length' |
299 | */ | 299 | */ |
300 | int nvram_read_error_log(char * buff, int length, | 300 | int nvram_read_partition(struct nvram_os_partition *part, char *buff, |
301 | unsigned int * err_type, unsigned int * error_log_cnt) | 301 | int length, unsigned int *err_type, |
302 | unsigned int *error_log_cnt) | ||
302 | { | 303 | { |
303 | int rc; | 304 | int rc; |
304 | loff_t tmp_index; | 305 | loff_t tmp_index; |
305 | struct err_log_info info; | 306 | struct err_log_info info; |
306 | 307 | ||
307 | if (rtas_log_partition.index == -1) | 308 | if (part->index == -1) |
308 | return -1; | 309 | return -1; |
309 | 310 | ||
310 | if (length > rtas_log_partition.size) | 311 | if (length > part->size) |
311 | length = rtas_log_partition.size; | 312 | length = part->size; |
312 | 313 | ||
313 | tmp_index = rtas_log_partition.index; | 314 | tmp_index = part->index; |
314 | 315 | ||
315 | rc = ppc_md.nvram_read((char *)&info, sizeof(struct err_log_info), &tmp_index); | 316 | rc = ppc_md.nvram_read((char *)&info, sizeof(struct err_log_info), &tmp_index); |
316 | if (rc <= 0) { | 317 | if (rc <= 0) { |
317 | printk(KERN_ERR "nvram_read_error_log: Failed nvram_read (%d)\n", rc); | 318 | pr_err("%s: Failed nvram_read (%d)\n", __FUNCTION__, rc); |
318 | return rc; | 319 | return rc; |
319 | } | 320 | } |
320 | 321 | ||
321 | rc = ppc_md.nvram_read(buff, length, &tmp_index); | 322 | rc = ppc_md.nvram_read(buff, length, &tmp_index); |
322 | if (rc <= 0) { | 323 | if (rc <= 0) { |
323 | printk(KERN_ERR "nvram_read_error_log: Failed nvram_read (%d)\n", rc); | 324 | pr_err("%s: Failed nvram_read (%d)\n", __FUNCTION__, rc); |
324 | return rc; | 325 | return rc; |
325 | } | 326 | } |
326 | 327 | ||
@@ -330,6 +331,17 @@ int nvram_read_error_log(char * buff, int length, | |||
330 | return 0; | 331 | return 0; |
331 | } | 332 | } |
332 | 333 | ||
334 | /* nvram_read_error_log | ||
335 | * | ||
336 | * Reads nvram for error log for at most 'length' | ||
337 | */ | ||
338 | int nvram_read_error_log(char *buff, int length, | ||
339 | unsigned int *err_type, unsigned int *error_log_cnt) | ||
340 | { | ||
341 | return nvram_read_partition(&rtas_log_partition, buff, length, | ||
342 | err_type, error_log_cnt); | ||
343 | } | ||
344 | |||
333 | /* This doesn't actually zero anything, but it sets the event_logged | 345 | /* This doesn't actually zero anything, but it sets the event_logged |
334 | * word to tell that this event is safely in syslog. | 346 | * word to tell that this event is safely in syslog. |
335 | */ | 347 | */ |