i386/x86_64: add HPET(s) into resource map
PATCH 1/1 i386/x86_64: add HPET(s) into resource map
Add HPET(s) into resource map. This will allow for the HPET(s) to be visibile within /proc/iomem.
Signed-off-by Aaron Durbin <[email protected]>
---
arch/i386/kernel/acpi/boot.c +26 -0
@@ -29,6 +29,8 @@ #include <linux/efi.h>#include <linux/module.h> #include <linux/dmi.h> #include <linux/irq.h> +#include <linux/bootmem.h> +#include <linux/ioport.h> #include <asm/pgtable.h> #include <asm/io_apic.h>
@@ -579,6 +581,8 @@ #ifdef CONFIG_HPET_TIMERstatic int __init acpi_parse_hpet (unsigned long phys,unsigned long size) {struct acpi_table_hpet *hpet_tbl; +struct resource *hpet_res; +resource_size_t res_start;if (!phys || !size)return -EINVAL ;
@@ -594,12 +598,26 @@ static int __init acpi_parse_hpet(unsign "memory.\n");return -1 ; } + +#define HPET_RESOURCE_NAME_SIZE 9 + hpet_res =alloc_bootmem (sizeof (*hpet_res) +HPET_RESOURCE_NAME_SIZE ); +if (hpet_res) { +memset (hpet_res,0 ,sizeof (*hpet_res)); + hpet_res->name = (void *)&hpet_res[1 ]; + hpet_res->flags =IORESOURCE_MEM |IORESOURCE_BUSY ; +snprintf ((char *)hpet_res->name,HPET_RESOURCE_NAME_SIZE , +"HPET %u" , hpet_tbl->number); + hpet_res->end = (1 *1024 ) -1 ; + } +#ifdef CONFIG_X86_64 vxtime.hpet_address = hpet_tbl->addr.addrl | ((long )hpet_tbl->addr.addrh <<32 ); printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", hpet_tbl->id, vxtime.hpet_address); + + res_start = vxtime.hpet_address;#else /* X86 */ {extern unsigned long hpet_address;
@@ -607,9 +625,17 @@ #else /* X86 */ hpet_address = hpet_tbl->addr.addrl; printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", hpet_tbl->id, hpet_address); + + res_start = hpet_address; }#endif /* X86 */ +if (hpet_res) { + hpet_res->start = res_start; + hpet_res->end += res_start; +insert_resource (&iomem_resource, hpet_res); + } +return 0 ; }#else
Quoted 3 lines · On Friday 01 September 2006 01:52, [email protected] wrote:
Add HPET(s) into resource map. This will allow for the HPET(s) to be visibile within
/proc/iomem.
Applied thanks.
Actually it would be more for Len Brown/linux-acpi (cc'ed with full quote) but I'll take it for now.
-Andi
Quoted 73 lines
Signed-off-by Aaron Durbin <[email protected]>---
arch/i386/kernel/acpi/boot.c +26
-0@@ -29,6 +29,8 @@ #include <linux/efi.h>#include <linux/module.h> #include <linux/dmi.h> #include <linux/irq.h> +#include <linux/bootmem.h> +#include <linux/ioport.h> #include <asm/pgtable.h> #include <asm/io_apic.h> @@ -579,6 +581,8 @@ #ifdef CONFIG_HPET_TIMERstatic int __init acpi_parse_hpet (unsigned long phys,unsigned long size) {struct acpi_table_hpet *hpet_tbl; +struct resource *hpet_res; +resource_size_t res_start;if (!phys || !size)return -EINVAL ;@@ -594,12 +598,26 @@ static int __init acpi_parse_hpet(unsign "memory.\n");return -1 ; } + +#define HPET_RESOURCE_NAME_SIZE 9 + hpet_res =alloc_bootmem (sizeof (*hpet_res) +HPET_RESOURCE_NAME_SIZE ); +if (hpet_res) { +memset (hpet_res,0 ,sizeof (*hpet_res)); + hpet_res->name = (void *)&hpet_res[1 ]; + hpet_res->flags =IORESOURCE_MEM |IORESOURCE_BUSY ; +snprintf ((char *)hpet_res->name,HPET_RESOURCE_NAME_SIZE , +"HPET %u" , hpet_tbl->number); + hpet_res->end = (1 *1024 ) -1 ; + } +#ifdef CONFIG_X86_64 vxtime.hpet_address = hpet_tbl->addr.addrl | ((long )hpet_tbl->addr.addrh <<32 ); printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", hpet_tbl->id, vxtime.hpet_address); + + res_start = vxtime.hpet_address;#else /* X86 */ {extern unsigned long hpet_address;@@ -607,9 +625,17 @@ #else /* X86 */ hpet_address = hpet_tbl->addr.addrl; printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", hpet_tbl->id, hpet_address); + + res_start = hpet_address; }#endif /* X86 */ +if (hpet_res) { + hpet_res->start = res_start; + hpet_res->end += res_start; +insert_resource (&iomem_resource, hpet_res); + } +return 0 ; }#else