diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/motherboard.c | 49 | ||||
-rw-r--r-- | drivers/acpi/osl.c | 48 |
2 files changed, 48 insertions, 49 deletions
diff --git a/drivers/acpi/motherboard.c b/drivers/acpi/motherboard.c index bedb5118e312..cddab7b29de8 100644 --- a/drivers/acpi/motherboard.c +++ b/drivers/acpi/motherboard.c | |||
@@ -118,58 +118,9 @@ static struct acpi_driver acpi_motherboard_driver = { | |||
118 | }, | 118 | }, |
119 | }; | 119 | }; |
120 | 120 | ||
121 | static void __init acpi_request_region (struct acpi_generic_address *addr, | ||
122 | unsigned int length, char *desc) | ||
123 | { | ||
124 | if (!addr->address || !length) | ||
125 | return; | ||
126 | |||
127 | if (addr->address_space_id == ACPI_ADR_SPACE_SYSTEM_IO) | ||
128 | request_region(addr->address, length, desc); | ||
129 | else if (addr->address_space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) | ||
130 | request_mem_region(addr->address, length, desc); | ||
131 | } | ||
132 | |||
133 | static void __init acpi_reserve_resources(void) | ||
134 | { | ||
135 | acpi_request_region(&acpi_gbl_FADT->xpm1a_evt_blk, | ||
136 | acpi_gbl_FADT->pm1_evt_len, "ACPI PM1a_EVT_BLK"); | ||
137 | |||
138 | acpi_request_region(&acpi_gbl_FADT->xpm1b_evt_blk, | ||
139 | acpi_gbl_FADT->pm1_evt_len, "ACPI PM1b_EVT_BLK"); | ||
140 | |||
141 | acpi_request_region(&acpi_gbl_FADT->xpm1a_cnt_blk, | ||
142 | acpi_gbl_FADT->pm1_cnt_len, "ACPI PM1a_CNT_BLK"); | ||
143 | |||
144 | acpi_request_region(&acpi_gbl_FADT->xpm1b_cnt_blk, | ||
145 | acpi_gbl_FADT->pm1_cnt_len, "ACPI PM1b_CNT_BLK"); | ||
146 | |||
147 | if (acpi_gbl_FADT->pm_tm_len == 4) | ||
148 | acpi_request_region(&acpi_gbl_FADT->xpm_tmr_blk, 4, "ACPI PM_TMR"); | ||
149 | |||
150 | acpi_request_region(&acpi_gbl_FADT->xpm2_cnt_blk, | ||
151 | acpi_gbl_FADT->pm2_cnt_len, "ACPI PM2_CNT_BLK"); | ||
152 | |||
153 | /* Length of GPE blocks must be a non-negative multiple of 2 */ | ||
154 | |||
155 | if (!(acpi_gbl_FADT->gpe0_blk_len & 0x1)) | ||
156 | acpi_request_region(&acpi_gbl_FADT->xgpe0_blk, | ||
157 | acpi_gbl_FADT->gpe0_blk_len, "ACPI GPE0_BLK"); | ||
158 | |||
159 | if (!(acpi_gbl_FADT->gpe1_blk_len & 0x1)) | ||
160 | acpi_request_region(&acpi_gbl_FADT->xgpe1_blk, | ||
161 | acpi_gbl_FADT->gpe1_blk_len, "ACPI GPE1_BLK"); | ||
162 | } | ||
163 | |||
164 | static int __init acpi_motherboard_init(void) | 121 | static int __init acpi_motherboard_init(void) |
165 | { | 122 | { |
166 | acpi_bus_register_driver(&acpi_motherboard_driver); | 123 | acpi_bus_register_driver(&acpi_motherboard_driver); |
167 | /* | ||
168 | * Guarantee motherboard IO reservation first | ||
169 | * This module must run after scan.c | ||
170 | */ | ||
171 | if (!acpi_disabled) | ||
172 | acpi_reserve_resources(); | ||
173 | return 0; | 124 | return 0; |
174 | } | 125 | } |
175 | 126 | ||
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; |