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; |