diff options
Diffstat (limited to 'drivers/acpi/osl.c')
| -rw-r--r-- | drivers/acpi/osl.c | 48 | 
1 files changed, 48 insertions, 0 deletions
| diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 02b30ae6a68e..0acd0e716ba4 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
| @@ -75,6 +75,54 @@ static acpi_osd_handler acpi_irq_handler; | |||
| 75 | static void *acpi_irq_context; | 75 | static void *acpi_irq_context; | 
| 76 | static struct workqueue_struct *kacpid_wq; | 76 | static struct workqueue_struct *kacpid_wq; | 
| 77 | 77 | ||
| 78 | static void __init acpi_request_region (struct acpi_generic_address *addr, | ||
| 79 | unsigned int length, char *desc) | ||
| 80 | { | ||
| 81 | struct resource *res; | ||
| 82 | |||
| 83 | if (!addr->address || !length) | ||
| 84 | return; | ||
| 85 | |||
| 86 | if (addr->address_space_id == ACPI_ADR_SPACE_SYSTEM_IO) | ||
| 87 | res = request_region(addr->address, length, desc); | ||
| 88 | else if (addr->address_space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) | ||
| 89 | res = request_mem_region(addr->address, length, desc); | ||
| 90 | } | ||
| 91 | |||
| 92 | static int __init acpi_reserve_resources(void) | ||
| 93 | { | ||
| 94 | acpi_request_region(&acpi_fadt.xpm1a_evt_blk, acpi_fadt.pm1_evt_len, | ||
| 95 | "ACPI PM1a_EVT_BLK"); | ||
| 96 | |||
| 97 | acpi_request_region(&acpi_fadt.xpm1b_evt_blk, acpi_fadt.pm1_evt_len, | ||
| 98 | "ACPI PM1b_EVT_BLK"); | ||
| 99 | |||
| 100 | acpi_request_region(&acpi_fadt.xpm1a_cnt_blk, acpi_fadt.pm1_cnt_len, | ||
| 101 | "ACPI PM1a_CNT_BLK"); | ||
| 102 | |||
| 103 | acpi_request_region(&acpi_fadt.xpm1b_cnt_blk, acpi_fadt.pm1_cnt_len, | ||
| 104 | "ACPI PM1b_CNT_BLK"); | ||
| 105 | |||
| 106 | if (acpi_fadt.pm_tm_len == 4) | ||
| 107 | acpi_request_region(&acpi_fadt.xpm_tmr_blk, 4, "ACPI PM_TMR"); | ||
| 108 | |||
| 109 | acpi_request_region(&acpi_fadt.xpm2_cnt_blk, acpi_fadt.pm2_cnt_len, | ||
| 110 | "ACPI PM2_CNT_BLK"); | ||
| 111 | |||
| 112 | /* Length of GPE blocks must be a non-negative multiple of 2 */ | ||
| 113 | |||
| 114 | if (!(acpi_fadt.gpe0_blk_len & 0x1)) | ||
| 115 | acpi_request_region(&acpi_fadt.xgpe0_blk, | ||
| 116 | acpi_fadt.gpe0_blk_len, "ACPI GPE0_BLK"); | ||
| 117 | |||
| 118 | if (!(acpi_fadt.gpe1_blk_len & 0x1)) | ||
| 119 | acpi_request_region(&acpi_fadt.xgpe1_blk, | ||
| 120 | acpi_fadt.gpe1_blk_len, "ACPI GPE1_BLK"); | ||
| 121 | |||
| 122 | return 0; | ||
| 123 | } | ||
| 124 | device_initcall(acpi_reserve_resources); | ||
| 125 | |||
| 78 | acpi_status acpi_os_initialize(void) | 126 | acpi_status acpi_os_initialize(void) | 
| 79 | { | 127 | { | 
| 80 | return AE_OK; | 128 | return AE_OK; | 
