Rev 6594 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6594 | Rev 7143 | ||
---|---|---|---|
1 | /****************************************************************************** |
1 | /****************************************************************************** |
2 | * |
2 | * |
3 | * Name: aclinuxex.h - Extra OS specific defines, etc. for Linux |
3 | * Name: aclinuxex.h - Extra OS specific defines, etc. for Linux |
4 | * |
4 | * |
5 | *****************************************************************************/ |
5 | *****************************************************************************/ |
6 | 6 | ||
7 | /* |
7 | /* |
8 | * Copyright (C) 2000 - 2015, Intel Corp. |
8 | * Copyright (C) 2000 - 2016, Intel Corp. |
9 | * All rights reserved. |
9 | * All rights reserved. |
10 | * |
10 | * |
11 | * Redistribution and use in source and binary forms, with or without |
11 | * Redistribution and use in source and binary forms, with or without |
12 | * modification, are permitted provided that the following conditions |
12 | * modification, are permitted provided that the following conditions |
13 | * are met: |
13 | * are met: |
14 | * 1. Redistributions of source code must retain the above copyright |
14 | * 1. Redistributions of source code must retain the above copyright |
15 | * notice, this list of conditions, and the following disclaimer, |
15 | * notice, this list of conditions, and the following disclaimer, |
16 | * without modification. |
16 | * without modification. |
17 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer |
17 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer |
18 | * substantially similar to the "NO WARRANTY" disclaimer below |
18 | * substantially similar to the "NO WARRANTY" disclaimer below |
19 | * ("Disclaimer") and any redistribution must be conditioned upon |
19 | * ("Disclaimer") and any redistribution must be conditioned upon |
20 | * including a substantially similar Disclaimer requirement for further |
20 | * including a substantially similar Disclaimer requirement for further |
21 | * binary redistribution. |
21 | * binary redistribution. |
22 | * 3. Neither the names of the above-listed copyright holders nor the names |
22 | * 3. Neither the names of the above-listed copyright holders nor the names |
23 | * of any contributors may be used to endorse or promote products derived |
23 | * of any contributors may be used to endorse or promote products derived |
24 | * from this software without specific prior written permission. |
24 | * from this software without specific prior written permission. |
25 | * |
25 | * |
26 | * Alternatively, this software may be distributed under the terms of the |
26 | * Alternatively, this software may be distributed under the terms of the |
27 | * GNU General Public License ("GPL") version 2 as published by the Free |
27 | * GNU General Public License ("GPL") version 2 as published by the Free |
28 | * Software Foundation. |
28 | * Software Foundation. |
29 | * |
29 | * |
30 | * NO WARRANTY |
30 | * NO WARRANTY |
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
32 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
32 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
33 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR |
33 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR |
34 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
34 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
35 | * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
35 | * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
36 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
36 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
37 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
37 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
38 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
38 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
39 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
39 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
40 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
40 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
41 | * POSSIBILITY OF SUCH DAMAGES. |
41 | * POSSIBILITY OF SUCH DAMAGES. |
42 | */ |
42 | */ |
43 | 43 | ||
44 | #ifndef __ACLINUXEX_H__ |
44 | #ifndef __ACLINUXEX_H__ |
45 | #define __ACLINUXEX_H__ |
45 | #define __ACLINUXEX_H__ |
46 | 46 | ||
47 | #ifdef __KERNEL__ |
47 | #ifdef __KERNEL__ |
48 | 48 | ||
49 | #ifndef ACPI_USE_NATIVE_DIVIDE |
49 | #ifndef ACPI_USE_NATIVE_DIVIDE |
50 | 50 | ||
51 | #ifndef ACPI_DIV_64_BY_32 |
51 | #ifndef ACPI_DIV_64_BY_32 |
52 | #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ |
52 | #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ |
53 | do { \ |
53 | do { \ |
54 | u64 (__n) = ((u64) n_hi) << 32 | (n_lo); \ |
54 | u64 (__n) = ((u64) n_hi) << 32 | (n_lo); \ |
55 | (r32) = do_div ((__n), (d32)); \ |
55 | (r32) = do_div ((__n), (d32)); \ |
56 | (q32) = (u32) (__n); \ |
56 | (q32) = (u32) (__n); \ |
57 | } while (0) |
57 | } while (0) |
58 | #endif |
58 | #endif |
59 | 59 | ||
60 | #ifndef ACPI_SHIFT_RIGHT_64 |
60 | #ifndef ACPI_SHIFT_RIGHT_64 |
61 | #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ |
61 | #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ |
62 | do { \ |
62 | do { \ |
63 | (n_lo) >>= 1; \ |
63 | (n_lo) >>= 1; \ |
64 | (n_lo) |= (((n_hi) & 1) << 31); \ |
64 | (n_lo) |= (((n_hi) & 1) << 31); \ |
65 | (n_hi) >>= 1; \ |
65 | (n_hi) >>= 1; \ |
66 | } while (0) |
66 | } while (0) |
67 | #endif |
67 | #endif |
68 | 68 | ||
69 | #endif |
69 | #endif |
70 | 70 | ||
71 | /* |
71 | /* |
72 | * Overrides for in-kernel ACPICA |
72 | * Overrides for in-kernel ACPICA |
73 | */ |
73 | */ |
74 | acpi_status __init acpi_os_initialize(void); |
74 | acpi_status __init acpi_os_initialize(void); |
75 | 75 | ||
76 | acpi_status acpi_os_terminate(void); |
76 | acpi_status acpi_os_terminate(void); |
77 | 77 | ||
78 | /* |
78 | /* |
79 | * The irqs_disabled() check is for resume from RAM. |
79 | * The irqs_disabled() check is for resume from RAM. |
80 | * Interrupts are off during resume, just like they are for boot. |
80 | * Interrupts are off during resume, just like they are for boot. |
81 | * However, boot has (system_state != SYSTEM_RUNNING) |
81 | * However, boot has (system_state != SYSTEM_RUNNING) |
82 | * to quiet __might_sleep() in kmalloc() and resume does not. |
82 | * to quiet __might_sleep() in kmalloc() and resume does not. |
83 | */ |
83 | */ |
84 | static inline void *acpi_os_allocate(acpi_size size) |
84 | static inline void *acpi_os_allocate(acpi_size size) |
85 | { |
85 | { |
86 | return kmalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); |
86 | return kmalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); |
87 | } |
87 | } |
88 | 88 | ||
89 | static inline void *acpi_os_allocate_zeroed(acpi_size size) |
89 | static inline void *acpi_os_allocate_zeroed(acpi_size size) |
90 | { |
90 | { |
91 | return kzalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); |
91 | return kzalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); |
92 | } |
92 | } |
93 | 93 | ||
94 | static inline void acpi_os_free(void *memory) |
94 | static inline void acpi_os_free(void *memory) |
95 | { |
95 | { |
96 | kfree(memory); |
96 | kfree(memory); |
97 | } |
97 | } |
98 | 98 | ||
99 | void *acpi_os_acquire_object(acpi_cache_t * cache); |
99 | void *acpi_os_acquire_object(acpi_cache_t * cache); |
100 | 100 | ||
101 | u32 __attribute__ ((dllimport)) GetPid(void)__asm__("GetPid"); |
101 | u32 __attribute__ ((dllimport)) GetPid(void)__asm__("GetPid"); |
102 | 102 | ||
103 | static inline acpi_thread_id acpi_os_get_thread_id(void) |
103 | static inline acpi_thread_id acpi_os_get_thread_id(void) |
104 | { |
104 | { |
105 | return (acpi_thread_id) (unsigned long)GetPid(); |
105 | return (acpi_thread_id) (unsigned long)GetPid(); |
106 | } |
106 | } |
107 | 107 | ||
108 | /* |
108 | /* |
109 | * When lockdep is enabled, the spin_lock_init() macro stringifies it's |
109 | * When lockdep is enabled, the spin_lock_init() macro stringifies it's |
110 | * argument and uses that as a name for the lock in debugging. |
110 | * argument and uses that as a name for the lock in debugging. |
111 | * By executing spin_lock_init() in a macro the key changes from "lock" for |
111 | * By executing spin_lock_init() in a macro the key changes from "lock" for |
112 | * all locks to the name of the argument of acpi_os_create_lock(), which |
112 | * all locks to the name of the argument of acpi_os_create_lock(), which |
113 | * prevents lockdep from reporting false positives for ACPICA locks. |
113 | * prevents lockdep from reporting false positives for ACPICA locks. |
114 | */ |
114 | */ |
115 | #define acpi_os_create_lock(__handle) \ |
115 | #define acpi_os_create_lock(__handle) \ |
116 | ({ \ |
116 | ({ \ |
117 | spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ |
117 | spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ |
118 | if (lock) { \ |
118 | if (lock) { \ |
119 | *(__handle) = lock; \ |
119 | *(__handle) = lock; \ |
120 | spin_lock_init(*(__handle)); \ |
120 | spin_lock_init(*(__handle)); \ |
121 | } \ |
121 | } \ |
122 | lock ? AE_OK : AE_NO_MEMORY; \ |
122 | lock ? AE_OK : AE_NO_MEMORY; \ |
123 | }) |
123 | }) |
124 | 124 | ||
125 | static inline u8 acpi_os_readable(void *pointer, acpi_size length) |
125 | static inline u8 acpi_os_readable(void *pointer, acpi_size length) |
126 | { |
126 | { |
127 | return TRUE; |
127 | return TRUE; |
128 | } |
128 | } |
- | 129 | ||
- | 130 | static inline acpi_status acpi_os_initialize_command_signals(void) |
|
- | 131 | { |
|
- | 132 | return AE_OK; |
|
- | 133 | } |
|
- | 134 | ||
- | 135 | static inline void acpi_os_terminate_command_signals(void) |
|
- | 136 | { |
|
- | 137 | return; |
|
- | 138 | } |
|
129 | 139 | ||
130 | /* |
140 | /* |
131 | * OSL interfaces added by Linux |
141 | * OSL interfaces added by Linux |
132 | */ |
142 | */ |
133 | void early_acpi_os_unmap_memory(void __iomem * virt, acpi_size size); |
143 | void early_acpi_os_unmap_memory(void __iomem * virt, acpi_size size); |
134 | 144 | ||
135 | #endif /* __KERNEL__ */ |
145 | #endif /* __KERNEL__ */ |
136 | 146 | ||
137 | #endif /* __ACLINUXEX_H__ */><>><> |
147 | #endif /* __ACLINUXEX_H__ */><>><> |