1 
   2 /******************************************************************************
   3  *
   4  * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL).  These
   5  *                    interfaces must be implemented by OSL to interface the
   6  *                    ACPI components to the host operating system.
   7  *
   8  *****************************************************************************/
   9 
  10 
  11 /*
  12  * Copyright (C) 2000 - 2011, Intel Corp.
  13  * All rights reserved.
  14  *
  15  * Redistribution and use in source and binary forms, with or without
  16  * modification, are permitted provided that the following conditions
  17  * are met:
  18  * 1. Redistributions of source code must retain the above copyright
  19  *    notice, this list of conditions, and the following disclaimer,
  20  *    without modification.
  21  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  22  *    substantially similar to the "NO WARRANTY" disclaimer below
  23  *    ("Disclaimer") and any redistribution must be conditioned upon
  24  *    including a substantially similar Disclaimer requirement for further
  25  *    binary redistribution.
  26  * 3. Neither the names of the above-listed copyright holders nor the names
  27  *    of any contributors may be used to endorse or promote products derived
  28  *    from this software without specific prior written permission.
  29  *
  30  * Alternatively, this software may be distributed under the terms of the
  31  * GNU General Public License ("GPL") version 2 as published by the Free
  32  * Software Foundation.
  33  *
  34  * NO WARRANTY
  35  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  36  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  37  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  38  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  39  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  40  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  41  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  42  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  43  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  44  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  45  * POSSIBILITY OF SUCH DAMAGES.
  46  */
  47 
  48 #ifndef __ACPIOSXF_H__
  49 #define __ACPIOSXF_H__
  50 
  51 #include "platform/acenv.h"
  52 #include "actypes.h"
  53 
  54 
  55 /* Types for AcpiOsExecute */
  56 
  57 typedef enum
  58 {
  59     OSL_GLOBAL_LOCK_HANDLER,
  60     OSL_NOTIFY_HANDLER,
  61     OSL_GPE_HANDLER,
  62     OSL_DEBUGGER_THREAD,
  63     OSL_EC_POLL_HANDLER,
  64     OSL_EC_BURST_HANDLER
  65 
  66 } ACPI_EXECUTE_TYPE;
  67 
  68 #define ACPI_NO_UNIT_LIMIT          ((UINT32) -1)
  69 #define ACPI_MUTEX_SEM              1
  70 
  71 
  72 /* Functions for AcpiOsSignal */
  73 
  74 #define ACPI_SIGNAL_FATAL           0
  75 #define ACPI_SIGNAL_BREAKPOINT      1
  76 
  77 typedef struct acpi_signal_fatal_info
  78 {
  79     UINT32                  Type;
  80     UINT32                  Code;
  81     UINT32                  Argument;
  82 
  83 } ACPI_SIGNAL_FATAL_INFO;
  84 
  85 
  86 /*
  87  * OSL Initialization and shutdown primitives
  88  */
  89 ACPI_STATUS
  90 AcpiOsInitialize (
  91     void);
  92 
  93 ACPI_STATUS
  94 AcpiOsTerminate (
  95     void);
  96 
  97 
  98 /*
  99  * ACPI Table interfaces
 100  */
 101 ACPI_PHYSICAL_ADDRESS
 102 AcpiOsGetRootPointer (
 103     void);
 104 
 105 ACPI_STATUS
 106 AcpiOsPredefinedOverride (
 107     const ACPI_PREDEFINED_NAMES *InitVal,
 108     ACPI_STRING                 *NewVal);
 109 
 110 ACPI_STATUS
 111 AcpiOsTableOverride (
 112     ACPI_TABLE_HEADER       *ExistingTable,
 113     ACPI_TABLE_HEADER       **NewTable);
 114 
 115 
 116 /*
 117  * Spinlock primitives
 118  */
 119 ACPI_STATUS
 120 AcpiOsCreateLock (
 121     ACPI_SPINLOCK           *OutHandle);
 122 
 123 void
 124 AcpiOsDeleteLock (
 125     ACPI_SPINLOCK           Handle);
 126 
 127 ACPI_CPU_FLAGS
 128 AcpiOsAcquireLock (
 129     ACPI_SPINLOCK           Handle);
 130 
 131 void
 132 AcpiOsReleaseLock (
 133     ACPI_SPINLOCK           Handle,
 134     ACPI_CPU_FLAGS          Flags);
 135 
 136 
 137 /*
 138  * Semaphore primitives
 139  */
 140 ACPI_STATUS
 141 AcpiOsCreateSemaphore (
 142     UINT32                  MaxUnits,
 143     UINT32                  InitialUnits,
 144     ACPI_SEMAPHORE          *OutHandle);
 145 
 146 ACPI_STATUS
 147 AcpiOsDeleteSemaphore (
 148     ACPI_SEMAPHORE          Handle);
 149 
 150 ACPI_STATUS
 151 AcpiOsWaitSemaphore (
 152     ACPI_SEMAPHORE          Handle,
 153     UINT32                  Units,
 154     UINT16                  Timeout);
 155 
 156 ACPI_STATUS
 157 AcpiOsSignalSemaphore (
 158     ACPI_SEMAPHORE          Handle,
 159     UINT32                  Units);
 160 
 161 
 162 /*
 163  * Mutex primitives. May be configured to use semaphores instead via
 164  * ACPI_MUTEX_TYPE (see platform/acenv.h)
 165  */
 166 #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
 167 
 168 ACPI_STATUS
 169 AcpiOsCreateMutex (
 170     ACPI_MUTEX              *OutHandle);
 171 
 172 void
 173 AcpiOsDeleteMutex (
 174     ACPI_MUTEX              Handle);
 175 
 176 ACPI_STATUS
 177 AcpiOsAcquireMutex (
 178     ACPI_MUTEX              Handle,
 179     UINT16                  Timeout);
 180 
 181 void
 182 AcpiOsReleaseMutex (
 183     ACPI_MUTEX              Handle);
 184 #endif
 185 
 186 
 187 /*
 188  * Memory allocation and mapping
 189  */
 190 void *
 191 AcpiOsAllocate (
 192     ACPI_SIZE               Size);
 193 
 194 void
 195 AcpiOsFree (
 196     void *                  Memory);
 197 
 198 void *
 199 AcpiOsMapMemory (
 200     ACPI_PHYSICAL_ADDRESS   Where,
 201     ACPI_SIZE               Length);
 202 
 203 void
 204 AcpiOsUnmapMemory (
 205     void                    *LogicalAddress,
 206     ACPI_SIZE               Size);
 207 
 208 ACPI_STATUS
 209 AcpiOsGetPhysicalAddress (
 210     void                    *LogicalAddress,
 211     ACPI_PHYSICAL_ADDRESS   *PhysicalAddress);
 212 
 213 
 214 /*
 215  * Memory/Object Cache
 216  */
 217 ACPI_STATUS
 218 AcpiOsCreateCache (
 219     char                    *CacheName,
 220     UINT16                  ObjectSize,
 221     UINT16                  MaxDepth,
 222     ACPI_CACHE_T            **ReturnCache);
 223 
 224 ACPI_STATUS
 225 AcpiOsDeleteCache (
 226     ACPI_CACHE_T            *Cache);
 227 
 228 ACPI_STATUS
 229 AcpiOsPurgeCache (
 230     ACPI_CACHE_T            *Cache);
 231 
 232 void *
 233 AcpiOsAcquireObject (
 234     ACPI_CACHE_T            *Cache);
 235 
 236 ACPI_STATUS
 237 AcpiOsReleaseObject (
 238     ACPI_CACHE_T            *Cache,
 239     void                    *Object);
 240 
 241 
 242 /*
 243  * Interrupt handlers
 244  */
 245 ACPI_STATUS
 246 AcpiOsInstallInterruptHandler (
 247     UINT32                  InterruptNumber,
 248     ACPI_OSD_HANDLER        ServiceRoutine,
 249     void                    *Context);
 250 
 251 ACPI_STATUS
 252 AcpiOsRemoveInterruptHandler (
 253     UINT32                  InterruptNumber,
 254     ACPI_OSD_HANDLER        ServiceRoutine);
 255 
 256 
 257 /*
 258  * Threads and Scheduling
 259  */
 260 ACPI_THREAD_ID
 261 AcpiOsGetThreadId (
 262     void);
 263 
 264 ACPI_STATUS
 265 AcpiOsExecute (
 266     ACPI_EXECUTE_TYPE       Type,
 267     ACPI_OSD_EXEC_CALLBACK  Function,
 268     void                    *Context);
 269 
 270 void
 271 AcpiOsWaitEventsComplete (
 272     void                    *Context);
 273 
 274 void
 275 AcpiOsSleep (
 276     UINT64                  Milliseconds);
 277 
 278 void
 279 AcpiOsStall (
 280     UINT32                  Microseconds);
 281 
 282 
 283 /*
 284  * Platform and hardware-independent I/O interfaces
 285  */
 286 ACPI_STATUS
 287 AcpiOsReadPort (
 288     ACPI_IO_ADDRESS         Address,
 289     UINT32                  *Value,
 290     UINT32                  Width);
 291 
 292 ACPI_STATUS
 293 AcpiOsWritePort (
 294     ACPI_IO_ADDRESS         Address,
 295     UINT32                  Value,
 296     UINT32                  Width);
 297 
 298 
 299 /*
 300  * Platform and hardware-independent physical memory interfaces
 301  */
 302 ACPI_STATUS
 303 AcpiOsReadMemory (
 304     ACPI_PHYSICAL_ADDRESS   Address,
 305     UINT32                  *Value,
 306     UINT32                  Width);
 307 
 308 ACPI_STATUS
 309 AcpiOsWriteMemory (
 310     ACPI_PHYSICAL_ADDRESS   Address,
 311     UINT32                  Value,
 312     UINT32                  Width);
 313 
 314 
 315 /*
 316  * Platform and hardware-independent PCI configuration space access
 317  * Note: Can't use "Register" as a parameter, changed to "Reg" --
 318  * certain compilers complain.
 319  */
 320 ACPI_STATUS
 321 AcpiOsReadPciConfiguration (
 322     ACPI_PCI_ID             *PciId,
 323     UINT32                  Reg,
 324     UINT64                  *Value,
 325     UINT32                  Width);
 326 
 327 ACPI_STATUS
 328 AcpiOsWritePciConfiguration (
 329     ACPI_PCI_ID             *PciId,
 330     UINT32                  Reg,
 331     UINT64                  Value,
 332     UINT32                  Width);
 333 
 334 
 335 /*
 336  * Miscellaneous
 337  */
 338 BOOLEAN
 339 AcpiOsReadable (
 340     void                    *Pointer,
 341     ACPI_SIZE               Length);
 342 
 343 BOOLEAN
 344 AcpiOsWritable (
 345     void                    *Pointer,
 346     ACPI_SIZE               Length);
 347 
 348 UINT64
 349 AcpiOsGetTimer (
 350     void);
 351 
 352 ACPI_STATUS
 353 AcpiOsSignal (
 354     UINT32                  Function,
 355     void                    *Info);
 356 
 357 
 358 /*
 359  * Debug print routines
 360  */
 361 void ACPI_INTERNAL_VAR_XFACE
 362 AcpiOsPrintf (
 363     const char              *Format,
 364     ...);
 365 
 366 void
 367 AcpiOsVprintf (
 368     const char              *Format,
 369     va_list                 Args);
 370 
 371 void
 372 AcpiOsRedirectOutput (
 373     void                    *Destination);
 374 
 375 
 376 /*
 377  * Debug input
 378  */
 379 ACPI_STATUS
 380 AcpiOsGetLine (
 381     char                    *Buffer,
 382     UINT32                  BufferLength,
 383     UINT32                  *BytesRead);
 384 
 385 
 386 /*
 387  * Directory manipulation
 388  */
 389 void *
 390 AcpiOsOpenDirectory (
 391     char                    *Pathname,
 392     char                    *WildcardSpec,
 393     char                    RequestedFileType);
 394 
 395 /* RequesteFileType values */
 396 
 397 #define REQUEST_FILE_ONLY                   0
 398 #define REQUEST_DIR_ONLY                    1
 399 
 400 
 401 char *
 402 AcpiOsGetNextFilename (
 403     void                    *DirHandle);
 404 
 405 void
 406 AcpiOsCloseDirectory (
 407     void                    *DirHandle);
 408 
 409 
 410 #endif /* __ACPIOSXF_H__ */