1 /******************************************************************************
   2  *
   3  * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These
   4  *                    interfaces must be implemented by OSL to interface the
   5  *                    ACPI components to the host operating system.
   6  *
   7  *****************************************************************************/
   8 
   9 /*
  10  * Copyright (C) 2000 - 2014, Intel Corp.
  11  * All rights reserved.
  12  *
  13  * Redistribution and use in source and binary forms, with or without
  14  * modification, are permitted provided that the following conditions
  15  * are met:
  16  * 1. Redistributions of source code must retain the above copyright
  17  *    notice, this list of conditions, and the following disclaimer,
  18  *    without modification.
  19  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  20  *    substantially similar to the "NO WARRANTY" disclaimer below
  21  *    ("Disclaimer") and any redistribution must be conditioned upon
  22  *    including a substantially similar Disclaimer requirement for further
  23  *    binary redistribution.
  24  * 3. Neither the names of the above-listed copyright holders nor the names
  25  *    of any contributors may be used to endorse or promote products derived
  26  *    from this software without specific prior written permission.
  27  *
  28  * Alternatively, this software may be distributed under the terms of the
  29  * GNU General Public License ("GPL") version 2 as published by the Free
  30  * Software Foundation.
  31  *
  32  * NO WARRANTY
  33  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  34  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  35  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  36  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  37  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  38  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  39  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  40  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  41  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  42  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  43  * POSSIBILITY OF SUCH DAMAGES.
  44  */
  45 
  46 #ifndef __ACPIOSXF_H__
  47 #define __ACPIOSXF_H__
  48 
  49 #include "platform/acenv.h"
  50 #include "actypes.h"
  51 
  52 
  53 /* Types for AcpiOsExecute */
  54 
  55 typedef enum
  56 {
  57     OSL_GLOBAL_LOCK_HANDLER,
  58     OSL_NOTIFY_HANDLER,
  59     OSL_GPE_HANDLER,
  60     OSL_DEBUGGER_THREAD,
  61     OSL_EC_POLL_HANDLER,
  62     OSL_EC_BURST_HANDLER
  63 
  64 } ACPI_EXECUTE_TYPE;
  65 
  66 #define ACPI_NO_UNIT_LIMIT          ((UINT32) -1)
  67 #define ACPI_MUTEX_SEM              1
  68 
  69 
  70 /* Functions for AcpiOsSignal */
  71 
  72 #define ACPI_SIGNAL_FATAL           0
  73 #define ACPI_SIGNAL_BREAKPOINT      1
  74 
  75 typedef struct acpi_signal_fatal_info
  76 {
  77     UINT32                  Type;
  78     UINT32                  Code;
  79     UINT32                  Argument;
  80 
  81 } ACPI_SIGNAL_FATAL_INFO;
  82 
  83 
  84 /*
  85  * OSL Initialization and shutdown primitives
  86  */
  87 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize
  88 ACPI_STATUS
  89 AcpiOsInitialize (
  90     void);
  91 #endif
  92 
  93 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
  94 ACPI_STATUS
  95 AcpiOsTerminate (
  96     void);
  97 #endif
  98 
  99 
 100 /*
 101  * ACPI Table interfaces
 102  */
 103 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer
 104 ACPI_PHYSICAL_ADDRESS
 105 AcpiOsGetRootPointer (
 106     void);
 107 #endif
 108 
 109 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride
 110 ACPI_STATUS
 111 AcpiOsPredefinedOverride (
 112     const ACPI_PREDEFINED_NAMES *InitVal,
 113     ACPI_STRING                 *NewVal);
 114 #endif
 115 
 116 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride
 117 ACPI_STATUS
 118 AcpiOsTableOverride (
 119     ACPI_TABLE_HEADER       *ExistingTable,
 120     ACPI_TABLE_HEADER       **NewTable);
 121 #endif
 122 
 123 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride
 124 ACPI_STATUS
 125 AcpiOsPhysicalTableOverride (
 126     ACPI_TABLE_HEADER       *ExistingTable,
 127     ACPI_PHYSICAL_ADDRESS   *NewAddress,
 128     UINT32                  *NewTableLength);
 129 #endif
 130 
 131 
 132 /*
 133  * Spinlock primitives
 134  */
 135 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
 136 ACPI_STATUS
 137 AcpiOsCreateLock (
 138     ACPI_SPINLOCK           *OutHandle);
 139 #endif
 140 
 141 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock
 142 void
 143 AcpiOsDeleteLock (
 144     ACPI_SPINLOCK           Handle);
 145 #endif
 146 
 147 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock
 148 ACPI_CPU_FLAGS
 149 AcpiOsAcquireLock (
 150     ACPI_SPINLOCK           Handle);
 151 #endif
 152 
 153 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock
 154 void
 155 AcpiOsReleaseLock (
 156     ACPI_SPINLOCK           Handle,
 157     ACPI_CPU_FLAGS          Flags);
 158 #endif
 159 
 160 
 161 /*
 162  * Semaphore primitives
 163  */
 164 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateSemaphore
 165 ACPI_STATUS
 166 AcpiOsCreateSemaphore (
 167     UINT32                  MaxUnits,
 168     UINT32                  InitialUnits,
 169     ACPI_SEMAPHORE          *OutHandle);
 170 #endif
 171 
 172 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore
 173 ACPI_STATUS
 174 AcpiOsDeleteSemaphore (
 175     ACPI_SEMAPHORE          Handle);
 176 #endif
 177 
 178 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore
 179 ACPI_STATUS
 180 AcpiOsWaitSemaphore (
 181     ACPI_SEMAPHORE          Handle,
 182     UINT32                  Units,
 183     UINT16                  Timeout);
 184 #endif
 185 
 186 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore
 187 ACPI_STATUS
 188 AcpiOsSignalSemaphore (
 189     ACPI_SEMAPHORE          Handle,
 190     UINT32                  Units);
 191 #endif
 192 
 193 
 194 /*
 195  * Mutex primitives. May be configured to use semaphores instead via
 196  * ACPI_MUTEX_TYPE (see platform/acenv.h)
 197  */
 198 #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
 199 
 200 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateMutex
 201 ACPI_STATUS
 202 AcpiOsCreateMutex (
 203     ACPI_MUTEX              *OutHandle);
 204 #endif
 205 
 206 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex
 207 void
 208 AcpiOsDeleteMutex (
 209     ACPI_MUTEX              Handle);
 210 #endif
 211 
 212 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex
 213 ACPI_STATUS
 214 AcpiOsAcquireMutex (
 215     ACPI_MUTEX              Handle,
 216     UINT16                  Timeout);
 217 #endif
 218 
 219 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex
 220 void
 221 AcpiOsReleaseMutex (
 222     ACPI_MUTEX              Handle);
 223 #endif
 224 
 225 #endif
 226 
 227 
 228 /*
 229  * Memory allocation and mapping
 230  */
 231 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate
 232 void *
 233 AcpiOsAllocate (
 234     ACPI_SIZE               Size);
 235 #endif
 236 
 237 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
 238 void *
 239 AcpiOsAllocateZeroed (
 240     ACPI_SIZE               Size);
 241 #endif
 242 
 243 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
 244 void
 245 AcpiOsFree (
 246     void *                  Memory);
 247 #endif
 248 
 249 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
 250 void *
 251 AcpiOsMapMemory (
 252     ACPI_PHYSICAL_ADDRESS   Where,
 253     ACPI_SIZE               Length);
 254 #endif
 255 
 256 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
 257 void
 258 AcpiOsUnmapMemory (
 259     void                    *LogicalAddress,
 260     ACPI_SIZE               Size);
 261 #endif
 262 
 263 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress
 264 ACPI_STATUS
 265 AcpiOsGetPhysicalAddress (
 266     void                    *LogicalAddress,
 267     ACPI_PHYSICAL_ADDRESS   *PhysicalAddress);
 268 #endif
 269 
 270 
 271 /*
 272  * Memory/Object Cache
 273  */
 274 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateCache
 275 ACPI_STATUS
 276 AcpiOsCreateCache (
 277     char                    *CacheName,
 278     UINT16                  ObjectSize,
 279     UINT16                  MaxDepth,
 280     ACPI_CACHE_T            **ReturnCache);
 281 #endif
 282 
 283 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache
 284 ACPI_STATUS
 285 AcpiOsDeleteCache (
 286     ACPI_CACHE_T            *Cache);
 287 #endif
 288 
 289 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache
 290 ACPI_STATUS
 291 AcpiOsPurgeCache (
 292     ACPI_CACHE_T            *Cache);
 293 #endif
 294 
 295 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
 296 void *
 297 AcpiOsAcquireObject (
 298     ACPI_CACHE_T            *Cache);
 299 #endif
 300 
 301 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject
 302 ACPI_STATUS
 303 AcpiOsReleaseObject (
 304     ACPI_CACHE_T            *Cache,
 305     void                    *Object);
 306 #endif
 307 
 308 
 309 /*
 310  * Interrupt handlers
 311  */
 312 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler
 313 ACPI_STATUS
 314 AcpiOsInstallInterruptHandler (
 315     UINT32                  InterruptNumber,
 316     ACPI_OSD_HANDLER        ServiceRoutine,
 317     void                    *Context);
 318 #endif
 319 
 320 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler
 321 ACPI_STATUS
 322 AcpiOsRemoveInterruptHandler (
 323     UINT32                  InterruptNumber,
 324     ACPI_OSD_HANDLER        ServiceRoutine);
 325 #endif
 326 
 327 
 328 /*
 329  * Threads and Scheduling
 330  */
 331 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
 332 ACPI_THREAD_ID
 333 AcpiOsGetThreadId (
 334     void);
 335 #endif
 336 
 337 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute
 338 ACPI_STATUS
 339 AcpiOsExecute (
 340     ACPI_EXECUTE_TYPE       Type,
 341     ACPI_OSD_EXEC_CALLBACK  Function,
 342     void                    *Context);
 343 #endif
 344 
 345 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete
 346 void
 347 AcpiOsWaitEventsComplete (
 348     void);
 349 #endif
 350 
 351 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep
 352 void
 353 AcpiOsSleep (
 354     UINT64                  Milliseconds);
 355 #endif
 356 
 357 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall
 358 void
 359 AcpiOsStall (
 360     UINT32                  Microseconds);
 361 #endif
 362 
 363 
 364 /*
 365  * Platform and hardware-independent I/O interfaces
 366  */
 367 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort
 368 ACPI_STATUS
 369 AcpiOsReadPort (
 370     ACPI_IO_ADDRESS         Address,
 371     UINT32                  *Value,
 372     UINT32                  Width);
 373 #endif
 374 
 375 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort
 376 ACPI_STATUS
 377 AcpiOsWritePort (
 378     ACPI_IO_ADDRESS         Address,
 379     UINT32                  Value,
 380     UINT32                  Width);
 381 #endif
 382 
 383 
 384 /*
 385  * Platform and hardware-independent physical memory interfaces
 386  */
 387 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadMemory
 388 ACPI_STATUS
 389 AcpiOsReadMemory (
 390     ACPI_PHYSICAL_ADDRESS   Address,
 391     UINT64                  *Value,
 392     UINT32                  Width);
 393 #endif
 394 
 395 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory
 396 ACPI_STATUS
 397 AcpiOsWriteMemory (
 398     ACPI_PHYSICAL_ADDRESS   Address,
 399     UINT64                  Value,
 400     UINT32                  Width);
 401 #endif
 402 
 403 
 404 /*
 405  * Platform and hardware-independent PCI configuration space access
 406  * Note: Can't use "Register" as a parameter, changed to "Reg" --
 407  * certain compilers complain.
 408  */
 409 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPciConfiguration
 410 ACPI_STATUS
 411 AcpiOsReadPciConfiguration (
 412     ACPI_PCI_ID             *PciId,
 413     UINT32                  Reg,
 414     UINT64                  *Value,
 415     UINT32                  Width);
 416 #endif
 417 
 418 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration
 419 ACPI_STATUS
 420 AcpiOsWritePciConfiguration (
 421     ACPI_PCI_ID             *PciId,
 422     UINT32                  Reg,
 423     UINT64                  Value,
 424     UINT32                  Width);
 425 #endif
 426 
 427 
 428 /*
 429  * Miscellaneous
 430  */
 431 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable
 432 BOOLEAN
 433 AcpiOsReadable (
 434     void                    *Pointer,
 435     ACPI_SIZE               Length);
 436 #endif
 437 
 438 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
 439 BOOLEAN
 440 AcpiOsWritable (
 441     void                    *Pointer,
 442     ACPI_SIZE               Length);
 443 #endif
 444 
 445 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer
 446 UINT64
 447 AcpiOsGetTimer (
 448     void);
 449 #endif
 450 
 451 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal
 452 ACPI_STATUS
 453 AcpiOsSignal (
 454     UINT32                  Function,
 455     void                    *Info);
 456 #endif
 457 
 458 
 459 /*
 460  * Debug print routines
 461  */
 462 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf
 463 void ACPI_INTERNAL_VAR_XFACE
 464 AcpiOsPrintf (
 465     const char              *Format,
 466     ...);
 467 #endif
 468 
 469 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf
 470 void
 471 AcpiOsVprintf (
 472     const char              *Format,
 473     va_list                 Args);
 474 #endif
 475 
 476 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
 477 void
 478 AcpiOsRedirectOutput (
 479     void                    *Destination);
 480 #endif
 481 
 482 
 483 /*
 484  * Debug input
 485  */
 486 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
 487 ACPI_STATUS
 488 AcpiOsGetLine (
 489     char                    *Buffer,
 490     UINT32                  BufferLength,
 491     UINT32                  *BytesRead);
 492 #endif
 493 
 494 
 495 /*
 496  * Obtain ACPI table(s)
 497  */
 498 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
 499 ACPI_STATUS
 500 AcpiOsGetTableByName (
 501     char                    *Signature,
 502     UINT32                  Instance,
 503     ACPI_TABLE_HEADER       **Table,
 504     ACPI_PHYSICAL_ADDRESS   *Address);
 505 #endif
 506 
 507 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
 508 ACPI_STATUS
 509 AcpiOsGetTableByIndex (
 510     UINT32                  Index,
 511     ACPI_TABLE_HEADER       **Table,
 512     UINT32                  *Instance,
 513     ACPI_PHYSICAL_ADDRESS   *Address);
 514 #endif
 515 
 516 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
 517 ACPI_STATUS
 518 AcpiOsGetTableByAddress (
 519     ACPI_PHYSICAL_ADDRESS   Address,
 520     ACPI_TABLE_HEADER       **Table);
 521 #endif
 522 
 523 
 524 /*
 525  * Directory manipulation
 526  */
 527 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
 528 void *
 529 AcpiOsOpenDirectory (
 530     char                    *Pathname,
 531     char                    *WildcardSpec,
 532     char                    RequestedFileType);
 533 #endif
 534 
 535 /* RequesteFileType values */
 536 
 537 #define REQUEST_FILE_ONLY                   0
 538 #define REQUEST_DIR_ONLY                    1
 539 
 540 
 541 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
 542 char *
 543 AcpiOsGetNextFilename (
 544     void                    *DirHandle);
 545 #endif
 546 
 547 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
 548 void
 549 AcpiOsCloseDirectory (
 550     void                    *DirHandle);
 551 #endif
 552 
 553 
 554 #endif /* __ACPIOSXF_H__ */