|
@@ -15,9 +15,9 @@
|
|
* GNU General Public License for more details.
|
|
* GNU General Public License for more details.
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+#include <linux/device.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
-#include <linux/platform_device.h>
|
|
|
|
|
|
|
|
#include "memconsole.h"
|
|
#include "memconsole.h"
|
|
#include "coreboot_table.h"
|
|
#include "coreboot_table.h"
|
|
@@ -73,18 +73,19 @@ static ssize_t memconsole_coreboot_read(char *buf, loff_t pos, size_t count)
|
|
return done;
|
|
return done;
|
|
}
|
|
}
|
|
|
|
|
|
-static int memconsole_coreboot_init(phys_addr_t physaddr)
|
|
|
|
|
|
+static int memconsole_probe(struct coreboot_device *dev)
|
|
{
|
|
{
|
|
struct cbmem_cons __iomem *tmp_cbmc;
|
|
struct cbmem_cons __iomem *tmp_cbmc;
|
|
|
|
|
|
- tmp_cbmc = memremap(physaddr, sizeof(*tmp_cbmc), MEMREMAP_WB);
|
|
|
|
|
|
+ tmp_cbmc = memremap(dev->cbmem_ref.cbmem_addr,
|
|
|
|
+ sizeof(*tmp_cbmc), MEMREMAP_WB);
|
|
|
|
|
|
if (!tmp_cbmc)
|
|
if (!tmp_cbmc)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
/* Read size only once to prevent overrun attack through /dev/mem. */
|
|
/* Read size only once to prevent overrun attack through /dev/mem. */
|
|
cbmem_console_size = tmp_cbmc->size_dont_access_after_boot;
|
|
cbmem_console_size = tmp_cbmc->size_dont_access_after_boot;
|
|
- cbmem_console = memremap(physaddr,
|
|
|
|
|
|
+ cbmem_console = memremap(dev->cbmem_ref.cbmem_addr,
|
|
cbmem_console_size + sizeof(*cbmem_console),
|
|
cbmem_console_size + sizeof(*cbmem_console),
|
|
MEMREMAP_WB);
|
|
MEMREMAP_WB);
|
|
memunmap(tmp_cbmc);
|
|
memunmap(tmp_cbmc);
|
|
@@ -93,26 +94,11 @@ static int memconsole_coreboot_init(phys_addr_t physaddr)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
memconsole_setup(memconsole_coreboot_read);
|
|
memconsole_setup(memconsole_coreboot_read);
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int memconsole_probe(struct platform_device *pdev)
|
|
|
|
-{
|
|
|
|
- int ret;
|
|
|
|
- struct lb_cbmem_ref entry;
|
|
|
|
-
|
|
|
|
- ret = coreboot_table_find(CB_TAG_CBMEM_CONSOLE, &entry, sizeof(entry));
|
|
|
|
- if (ret)
|
|
|
|
- return ret;
|
|
|
|
-
|
|
|
|
- ret = memconsole_coreboot_init(entry.cbmem_addr);
|
|
|
|
- if (ret)
|
|
|
|
- return ret;
|
|
|
|
|
|
|
|
return memconsole_sysfs_init();
|
|
return memconsole_sysfs_init();
|
|
}
|
|
}
|
|
|
|
|
|
-static int memconsole_remove(struct platform_device *pdev)
|
|
|
|
|
|
+static int memconsole_remove(struct coreboot_device *dev)
|
|
{
|
|
{
|
|
memconsole_exit();
|
|
memconsole_exit();
|
|
|
|
|
|
@@ -122,28 +108,27 @@ static int memconsole_remove(struct platform_device *pdev)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static struct platform_driver memconsole_driver = {
|
|
|
|
|
|
+static struct coreboot_driver memconsole_driver = {
|
|
.probe = memconsole_probe,
|
|
.probe = memconsole_probe,
|
|
.remove = memconsole_remove,
|
|
.remove = memconsole_remove,
|
|
- .driver = {
|
|
|
|
|
|
+ .drv = {
|
|
.name = "memconsole",
|
|
.name = "memconsole",
|
|
},
|
|
},
|
|
|
|
+ .tag = CB_TAG_CBMEM_CONSOLE,
|
|
};
|
|
};
|
|
|
|
|
|
-static int __init platform_memconsole_init(void)
|
|
|
|
|
|
+static void coreboot_memconsole_exit(void)
|
|
{
|
|
{
|
|
- struct platform_device *pdev;
|
|
|
|
-
|
|
|
|
- pdev = platform_device_register_simple("memconsole", -1, NULL, 0);
|
|
|
|
- if (IS_ERR(pdev))
|
|
|
|
- return PTR_ERR(pdev);
|
|
|
|
-
|
|
|
|
- platform_driver_register(&memconsole_driver);
|
|
|
|
|
|
+ coreboot_driver_unregister(&memconsole_driver);
|
|
|
|
+}
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+static int __init coreboot_memconsole_init(void)
|
|
|
|
+{
|
|
|
|
+ return coreboot_driver_register(&memconsole_driver);
|
|
}
|
|
}
|
|
|
|
|
|
-module_init(platform_memconsole_init);
|
|
|
|
|
|
+module_exit(coreboot_memconsole_exit);
|
|
|
|
+module_init(coreboot_memconsole_init);
|
|
|
|
|
|
MODULE_AUTHOR("Google, Inc.");
|
|
MODULE_AUTHOR("Google, Inc.");
|
|
MODULE_LICENSE("GPL");
|
|
MODULE_LICENSE("GPL");
|