aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries/nvram.c
diff options
context:
space:
mode:
authorAruna Balakrishnaiah <aruna@linux.vnet.ibm.com>2013-06-05 14:51:16 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-06-20 03:04:46 -0400
commit126746101e89991f179209ef58ab5937bc5ea4a3 (patch)
tree79ecc88208fc3a6a27e56e4b9ee467ccd077c92c /arch/powerpc/platforms/pseries/nvram.c
parentb1f70e1f72179f7afe02f4131ed15da406f93e0d (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/nvram.c')
-rw-r--r--arch/powerpc/platforms/pseries/nvram.c32
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 */
300int nvram_read_error_log(char * buff, int length, 300int 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 */
338int 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 */