Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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