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 - 2016, 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 <contrib/dev/acpica/include/platform/acenv.h> 50#include <contrib/dev/acpica/include/actypes.h> 51 52 53/* Types for AcpiOsExecute */ 54 55typedef enum 56{ 57 OSL_GLOBAL_LOCK_HANDLER, 58 OSL_NOTIFY_HANDLER, 59 OSL_GPE_HANDLER, 60 OSL_DEBUGGER_MAIN_THREAD, 61 OSL_DEBUGGER_EXEC_THREAD, 62 OSL_EC_POLL_HANDLER, 63 OSL_EC_BURST_HANDLER 64 65} ACPI_EXECUTE_TYPE; 66 67#define ACPI_NO_UNIT_LIMIT ((UINT32) -1) 68#define ACPI_MUTEX_SEM 1 69 70 71/* Functions for AcpiOsSignal */ 72 73#define ACPI_SIGNAL_FATAL 0 74#define ACPI_SIGNAL_BREAKPOINT 1 75 76typedef struct acpi_signal_fatal_info 77{ 78 UINT32 Type; 79 UINT32 Code; 80 UINT32 Argument; 81 82} ACPI_SIGNAL_FATAL_INFO; 83 84 85/* 86 * OSL Initialization and shutdown primitives 87 */ 88#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize 89ACPI_STATUS 90AcpiOsInitialize ( 91 void); 92#endif 93 94#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate 95ACPI_STATUS 96AcpiOsTerminate ( 97 void); 98#endif 99 100 101/* 102 * ACPI Table interfaces 103 */ 104#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer 105ACPI_PHYSICAL_ADDRESS 106AcpiOsGetRootPointer ( 107 void); 108#endif 109 110#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride 111ACPI_STATUS 112AcpiOsPredefinedOverride ( 113 const ACPI_PREDEFINED_NAMES *InitVal, 114 ACPI_STRING *NewVal); 115#endif 116 117#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride 118ACPI_STATUS 119AcpiOsTableOverride ( 120 ACPI_TABLE_HEADER *ExistingTable, 121 ACPI_TABLE_HEADER **NewTable); 122#endif 123 124#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride 125ACPI_STATUS 126AcpiOsPhysicalTableOverride ( 127 ACPI_TABLE_HEADER *ExistingTable, 128 ACPI_PHYSICAL_ADDRESS *NewAddress, 129 UINT32 *NewTableLength); 130#endif 131 132 133/* 134 * Spinlock primitives 135 */ 136#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock 137ACPI_STATUS 138AcpiOsCreateLock ( 139 ACPI_SPINLOCK *OutHandle); 140#endif 141 142#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock 143void 144AcpiOsDeleteLock ( 145 ACPI_SPINLOCK Handle); 146#endif 147 148#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock 149ACPI_CPU_FLAGS 150AcpiOsAcquireLock ( 151 ACPI_SPINLOCK Handle); 152#endif 153 154#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock 155void 156AcpiOsReleaseLock ( 157 ACPI_SPINLOCK Handle, 158 ACPI_CPU_FLAGS Flags); 159#endif 160 161 162/* 163 * Semaphore primitives 164 */ 165#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateSemaphore 166ACPI_STATUS 167AcpiOsCreateSemaphore ( 168 UINT32 MaxUnits, 169 UINT32 InitialUnits, 170 ACPI_SEMAPHORE *OutHandle); 171#endif 172 173#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore 174ACPI_STATUS 175AcpiOsDeleteSemaphore ( 176 ACPI_SEMAPHORE Handle); 177#endif 178 179#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore 180ACPI_STATUS 181AcpiOsWaitSemaphore ( 182 ACPI_SEMAPHORE Handle, 183 UINT32 Units, 184 UINT16 Timeout); 185#endif 186 187#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore 188ACPI_STATUS 189AcpiOsSignalSemaphore ( 190 ACPI_SEMAPHORE Handle, 191 UINT32 Units); 192#endif 193 194 195/* 196 * Mutex primitives. May be configured to use semaphores instead via 197 * ACPI_MUTEX_TYPE (see platform/acenv.h) 198 */ 199#if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE) 200 201#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateMutex 202ACPI_STATUS 203AcpiOsCreateMutex ( 204 ACPI_MUTEX *OutHandle); 205#endif 206 207#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex 208void 209AcpiOsDeleteMutex ( 210 ACPI_MUTEX Handle); 211#endif 212 213#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex 214ACPI_STATUS 215AcpiOsAcquireMutex ( 216 ACPI_MUTEX Handle, 217 UINT16 Timeout); 218#endif 219 220#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex 221void 222AcpiOsReleaseMutex ( 223 ACPI_MUTEX Handle); 224#endif 225 226#endif 227 228 229/* 230 * Memory allocation and mapping 231 */ 232#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate 233void * 234AcpiOsAllocate ( 235 ACPI_SIZE Size); 236#endif 237 238#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed 239void * 240AcpiOsAllocateZeroed ( 241 ACPI_SIZE Size); 242#endif 243 244#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree 245void 246AcpiOsFree ( 247 void * Memory); 248#endif 249 250#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory 251void * 252AcpiOsMapMemory ( 253 ACPI_PHYSICAL_ADDRESS Where, 254 ACPI_SIZE Length); 255#endif 256 257#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory 258void 259AcpiOsUnmapMemory ( 260 void *LogicalAddress, 261 ACPI_SIZE Size); 262#endif 263 264#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress 265ACPI_STATUS 266AcpiOsGetPhysicalAddress ( 267 void *LogicalAddress, 268 ACPI_PHYSICAL_ADDRESS *PhysicalAddress); 269#endif 270 271 272/* 273 * Memory/Object Cache 274 */ 275#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateCache 276ACPI_STATUS 277AcpiOsCreateCache ( 278 char *CacheName, 279 UINT16 ObjectSize, 280 UINT16 MaxDepth, 281 ACPI_CACHE_T **ReturnCache); 282#endif 283 284#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache 285ACPI_STATUS 286AcpiOsDeleteCache ( 287 ACPI_CACHE_T *Cache); 288#endif 289 290#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache 291ACPI_STATUS 292AcpiOsPurgeCache ( 293 ACPI_CACHE_T *Cache); 294#endif 295 296#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject 297void * 298AcpiOsAcquireObject ( 299 ACPI_CACHE_T *Cache); 300#endif 301 302#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject 303ACPI_STATUS 304AcpiOsReleaseObject ( 305 ACPI_CACHE_T *Cache, 306 void *Object); 307#endif 308 309 310/* 311 * Interrupt handlers 312 */ 313#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler 314ACPI_STATUS 315AcpiOsInstallInterruptHandler ( 316 UINT32 InterruptNumber, 317 ACPI_OSD_HANDLER ServiceRoutine, 318 void *Context); 319#endif 320 321#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler 322ACPI_STATUS 323AcpiOsRemoveInterruptHandler ( 324 UINT32 InterruptNumber, 325 ACPI_OSD_HANDLER ServiceRoutine); 326#endif 327 328 329/* 330 * Threads and Scheduling 331 */ 332#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId 333ACPI_THREAD_ID 334AcpiOsGetThreadId ( 335 void); 336#endif 337 338#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute 339ACPI_STATUS 340AcpiOsExecute ( 341 ACPI_EXECUTE_TYPE Type, 342 ACPI_OSD_EXEC_CALLBACK Function, 343 void *Context); 344#endif 345 346#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete 347void 348AcpiOsWaitEventsComplete ( 349 void); 350#endif 351 352#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep 353void 354AcpiOsSleep ( 355 UINT64 Milliseconds); 356#endif 357 358#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall 359void 360AcpiOsStall ( 361 UINT32 Microseconds); 362#endif 363 364 365/* 366 * Platform and hardware-independent I/O interfaces 367 */ 368#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort 369ACPI_STATUS 370AcpiOsReadPort ( 371 ACPI_IO_ADDRESS Address, 372 UINT32 *Value, 373 UINT32 Width); 374#endif 375 376#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort 377ACPI_STATUS 378AcpiOsWritePort ( 379 ACPI_IO_ADDRESS Address, 380 UINT32 Value, 381 UINT32 Width); 382#endif 383 384 385/* 386 * Platform and hardware-independent physical memory interfaces 387 */ 388#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadMemory 389ACPI_STATUS 390AcpiOsReadMemory ( 391 ACPI_PHYSICAL_ADDRESS Address, 392 UINT64 *Value, 393 UINT32 Width); 394#endif 395 396#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory 397ACPI_STATUS 398AcpiOsWriteMemory ( 399 ACPI_PHYSICAL_ADDRESS Address, 400 UINT64 Value, 401 UINT32 Width); 402#endif 403 404 405/* 406 * Platform and hardware-independent PCI configuration space access 407 * Note: Can't use "Register" as a parameter, changed to "Reg" -- 408 * certain compilers complain. 409 */ 410#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPciConfiguration 411ACPI_STATUS 412AcpiOsReadPciConfiguration ( 413 ACPI_PCI_ID *PciId, 414 UINT32 Reg, 415 UINT64 *Value, 416 UINT32 Width); 417#endif 418 419#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration 420ACPI_STATUS 421AcpiOsWritePciConfiguration ( 422 ACPI_PCI_ID *PciId, 423 UINT32 Reg, 424 UINT64 Value, 425 UINT32 Width); 426#endif 427 428 429/* 430 * Miscellaneous 431 */ 432#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable 433BOOLEAN 434AcpiOsReadable ( 435 void *Pointer, 436 ACPI_SIZE Length); 437#endif 438 439#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable 440BOOLEAN 441AcpiOsWritable ( 442 void *Pointer, 443 ACPI_SIZE Length); 444#endif 445 446#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer 447UINT64 448AcpiOsGetTimer ( 449 void); 450#endif 451 452#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal 453ACPI_STATUS 454AcpiOsSignal ( 455 UINT32 Function, 456 void *Info); 457#endif 458 459 460/* 461 * Debug print routines 462 */ 463#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf 464void ACPI_INTERNAL_VAR_XFACE 465AcpiOsPrintf ( 466 const char *Format, 467 ...); 468#endif 469 470#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf 471void 472AcpiOsVprintf ( 473 const char *Format, 474 va_list Args); 475#endif 476 477#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput 478void 479AcpiOsRedirectOutput ( 480 void *Destination); 481#endif 482 483 484/* 485 * Debug input 486 */ 487#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine 488ACPI_STATUS 489AcpiOsGetLine ( 490 char *Buffer, 491 UINT32 BufferLength, 492 UINT32 *BytesRead); 493#endif 494 495 496/* 497 * Obtain ACPI table(s) 498 */ 499#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName 500ACPI_STATUS 501AcpiOsGetTableByName ( 502 char *Signature, 503 UINT32 Instance, 504 ACPI_TABLE_HEADER **Table, 505 ACPI_PHYSICAL_ADDRESS *Address); 506#endif 507 508#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex 509ACPI_STATUS 510AcpiOsGetTableByIndex ( 511 UINT32 Index, 512 ACPI_TABLE_HEADER **Table, 513 UINT32 *Instance, 514 ACPI_PHYSICAL_ADDRESS *Address); 515#endif 516 517#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress 518ACPI_STATUS 519AcpiOsGetTableByAddress ( 520 ACPI_PHYSICAL_ADDRESS Address, 521 ACPI_TABLE_HEADER **Table); 522#endif 523 524 525/* 526 * Directory manipulation 527 */ 528#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory 529void * 530AcpiOsOpenDirectory ( 531 char *Pathname, 532 char *WildcardSpec, 533 char RequestedFileType); 534#endif 535 536/* RequesteFileType values */ 537 538#define REQUEST_FILE_ONLY 0 539#define REQUEST_DIR_ONLY 1 540 541 542#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename 543char * 544AcpiOsGetNextFilename ( 545 void *DirHandle); 546#endif 547 548#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory 549void 550AcpiOsCloseDirectory ( 551 void *DirHandle); 552#endif 553 554 555/* 556 * File I/O and related support 557 */ 558#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenFile 559ACPI_FILE 560AcpiOsOpenFile ( 561 const char *Path, 562 UINT8 Modes); 563#endif 564 565#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseFile 566void 567AcpiOsCloseFile ( 568 ACPI_FILE File); 569#endif 570 571#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadFile 572int 573AcpiOsReadFile ( 574 ACPI_FILE File, 575 void *Buffer, 576 ACPI_SIZE Size, 577 ACPI_SIZE Count); 578#endif 579 580#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteFile 581int 582AcpiOsWriteFile ( 583 ACPI_FILE File, 584 void *Buffer, 585 ACPI_SIZE Size, 586 ACPI_SIZE Count); 587#endif 588 589#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetFileOffset 590long 591AcpiOsGetFileOffset ( 592 ACPI_FILE File); 593#endif 594 595#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSetFileOffset 596ACPI_STATUS 597AcpiOsSetFileOffset ( 598 ACPI_FILE File, 599 long Offset, 600 UINT8 From); 601#endif 602 603#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint 604void 605AcpiOsTracePoint ( 606 ACPI_TRACE_EVENT_TYPE Type, 607 BOOLEAN Begin, 608 UINT8 *Aml, 609 char *Pathname); 610#endif 611 612 613#endif /* __ACPIOSXF_H__ */ 614