|  | /* | 
|  | * This program is free software; you can redistribute it and/or modify it | 
|  | * under the terms of the GNU General Public License version 2 as published | 
|  | * by the Free Software Foundation. | 
|  | * | 
|  | * Copyright (C) 2013 John Crispin <john@phrozen.org> | 
|  | */ | 
|  |  | 
|  | #include <linux/debugfs.h> | 
|  | #include <linux/seq_file.h> | 
|  |  | 
|  | #define BOOTROM_OFFSET	0x10118000 | 
|  | #define BOOTROM_SIZE	0x8000 | 
|  |  | 
|  | static void __iomem *membase = (void __iomem *) KSEG1ADDR(BOOTROM_OFFSET); | 
|  |  | 
|  | static int bootrom_show(struct seq_file *s, void *unused) | 
|  | { | 
|  | seq_write(s, membase, BOOTROM_SIZE); | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | static int bootrom_open(struct inode *inode, struct file *file) | 
|  | { | 
|  | return single_open(file, bootrom_show, NULL); | 
|  | } | 
|  |  | 
|  | static const struct file_operations bootrom_file_ops = { | 
|  | .open		= bootrom_open, | 
|  | .read		= seq_read, | 
|  | .llseek		= seq_lseek, | 
|  | .release	= single_release, | 
|  | }; | 
|  |  | 
|  | static int bootrom_setup(void) | 
|  | { | 
|  | if (!debugfs_create_file("bootrom", 0444, | 
|  | NULL, NULL, &bootrom_file_ops)) { | 
|  | pr_err("Failed to create bootrom debugfs file\n"); | 
|  |  | 
|  | return -EINVAL; | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | postcore_initcall(bootrom_setup); |