acpiosxf.h revision 281075
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 - 2015, 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_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 75typedef 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 88ACPI_STATUS 89AcpiOsInitialize ( 90 void); 91#endif 92 93#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate 94ACPI_STATUS 95AcpiOsTerminate ( 96 void); 97#endif 98 99 100/* 101 * ACPI Table interfaces 102 */ 103#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer 104ACPI_PHYSICAL_ADDRESS 105AcpiOsGetRootPointer ( 106 void); 107#endif 108 109#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride 110ACPI_STATUS 111AcpiOsPredefinedOverride ( 112 const ACPI_PREDEFINED_NAMES *InitVal, 113 ACPI_STRING *NewVal); 114#endif 115 116#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride 117ACPI_STATUS 118AcpiOsTableOverride ( 119 ACPI_TABLE_HEADER *ExistingTable, 120 ACPI_TABLE_HEADER **NewTable); 121#endif 122 123#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride 124ACPI_STATUS 125AcpiOsPhysicalTableOverride ( 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 136ACPI_STATUS 137AcpiOsCreateLock ( 138 ACPI_SPINLOCK *OutHandle); 139#endif 140 141#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock 142void 143AcpiOsDeleteLock ( 144 ACPI_SPINLOCK Handle); 145#endif 146 147#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock 148ACPI_CPU_FLAGS 149AcpiOsAcquireLock ( 150 ACPI_SPINLOCK Handle); 151#endif 152 153#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock 154void 155AcpiOsReleaseLock ( 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 165ACPI_STATUS 166AcpiOsCreateSemaphore ( 167 UINT32 MaxUnits, 168 UINT32 InitialUnits, 169 ACPI_SEMAPHORE *OutHandle); 170#endif 171 172#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore 173ACPI_STATUS 174AcpiOsDeleteSemaphore ( 175 ACPI_SEMAPHORE Handle); 176#endif 177 178#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore 179ACPI_STATUS 180AcpiOsWaitSemaphore ( 181 ACPI_SEMAPHORE Handle, 182 UINT32 Units, 183 UINT16 Timeout); 184#endif 185 186#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore 187ACPI_STATUS 188AcpiOsSignalSemaphore ( 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 201ACPI_STATUS 202AcpiOsCreateMutex ( 203 ACPI_MUTEX *OutHandle); 204#endif 205 206#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex 207void 208AcpiOsDeleteMutex ( 209 ACPI_MUTEX Handle); 210#endif 211 212#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex 213ACPI_STATUS 214AcpiOsAcquireMutex ( 215 ACPI_MUTEX Handle, 216 UINT16 Timeout); 217#endif 218 219#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex 220void 221AcpiOsReleaseMutex ( 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 232void * 233AcpiOsAllocate ( 234 ACPI_SIZE Size); 235#endif 236 237#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed 238void * 239AcpiOsAllocateZeroed ( 240 ACPI_SIZE Size); 241#endif 242 243#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree 244void 245AcpiOsFree ( 246 void * Memory); 247#endif 248 249#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory 250void * 251AcpiOsMapMemory ( 252 ACPI_PHYSICAL_ADDRESS Where, 253 ACPI_SIZE Length); 254#endif 255 256#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory 257void 258AcpiOsUnmapMemory ( 259 void *LogicalAddress, 260 ACPI_SIZE Size); 261#endif 262 263#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress 264ACPI_STATUS 265AcpiOsGetPhysicalAddress ( 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 275ACPI_STATUS 276AcpiOsCreateCache ( 277 char *CacheName, 278 UINT16 ObjectSize, 279 UINT16 MaxDepth, 280 ACPI_CACHE_T **ReturnCache); 281#endif 282 283#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache 284ACPI_STATUS 285AcpiOsDeleteCache ( 286 ACPI_CACHE_T *Cache); 287#endif 288 289#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache 290ACPI_STATUS 291AcpiOsPurgeCache ( 292 ACPI_CACHE_T *Cache); 293#endif 294 295#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject 296void * 297AcpiOsAcquireObject ( 298 ACPI_CACHE_T *Cache); 299#endif 300 301#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject 302ACPI_STATUS 303AcpiOsReleaseObject ( 304 ACPI_CACHE_T *Cache, 305 void *Object); 306#endif 307 308 309/* 310 * Interrupt handlers 311 */ 312#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler 313ACPI_STATUS 314AcpiOsInstallInterruptHandler ( 315 UINT32 InterruptNumber, 316 ACPI_OSD_HANDLER ServiceRoutine, 317 void *Context); 318#endif 319 320#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler 321ACPI_STATUS 322AcpiOsRemoveInterruptHandler ( 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 332ACPI_THREAD_ID 333AcpiOsGetThreadId ( 334 void); 335#endif 336 337#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute 338ACPI_STATUS 339AcpiOsExecute ( 340 ACPI_EXECUTE_TYPE Type, 341 ACPI_OSD_EXEC_CALLBACK Function, 342 void *Context); 343#endif 344 345#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete 346void 347AcpiOsWaitEventsComplete ( 348 void); 349#endif 350 351#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep 352void 353AcpiOsSleep ( 354 UINT64 Milliseconds); 355#endif 356 357#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall 358void 359AcpiOsStall ( 360 UINT32 Microseconds); 361#endif 362 363 364/* 365 * Platform and hardware-independent I/O interfaces 366 */ 367#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort 368ACPI_STATUS 369AcpiOsReadPort ( 370 ACPI_IO_ADDRESS Address, 371 UINT32 *Value, 372 UINT32 Width); 373#endif 374 375#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort 376ACPI_STATUS 377AcpiOsWritePort ( 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 388ACPI_STATUS 389AcpiOsReadMemory ( 390 ACPI_PHYSICAL_ADDRESS Address, 391 UINT64 *Value, 392 UINT32 Width); 393#endif 394 395#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory 396ACPI_STATUS 397AcpiOsWriteMemory ( 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 410ACPI_STATUS 411AcpiOsReadPciConfiguration ( 412 ACPI_PCI_ID *PciId, 413 UINT32 Reg, 414 UINT64 *Value, 415 UINT32 Width); 416#endif 417 418#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration 419ACPI_STATUS 420AcpiOsWritePciConfiguration ( 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 432BOOLEAN 433AcpiOsReadable ( 434 void *Pointer, 435 ACPI_SIZE Length); 436#endif 437 438#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable 439BOOLEAN 440AcpiOsWritable ( 441 void *Pointer, 442 ACPI_SIZE Length); 443#endif 444 445#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer 446UINT64 447AcpiOsGetTimer ( 448 void); 449#endif 450 451#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal 452ACPI_STATUS 453AcpiOsSignal ( 454 UINT32 Function, 455 void *Info); 456#endif 457 458 459/* 460 * Debug print routines 461 */ 462#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf 463void ACPI_INTERNAL_VAR_XFACE 464AcpiOsPrintf ( 465 const char *Format, 466 ...); 467#endif 468 469#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf 470void 471AcpiOsVprintf ( 472 const char *Format, 473 va_list Args); 474#endif 475 476#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput 477void 478AcpiOsRedirectOutput ( 479 void *Destination); 480#endif 481 482 483/* 484 * Debug input 485 */ 486#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine 487ACPI_STATUS 488AcpiOsGetLine ( 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 499ACPI_STATUS 500AcpiOsGetTableByName ( 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 508ACPI_STATUS 509AcpiOsGetTableByIndex ( 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 517ACPI_STATUS 518AcpiOsGetTableByAddress ( 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 528void * 529AcpiOsOpenDirectory ( 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 542char * 543AcpiOsGetNextFilename ( 544 void *DirHandle); 545#endif 546 547#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory 548void 549AcpiOsCloseDirectory ( 550 void *DirHandle); 551#endif 552 553 554/* 555 * File I/O and related support 556 */ 557#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenFile 558ACPI_FILE 559AcpiOsOpenFile ( 560 const char *Path, 561 UINT8 Modes); 562#endif 563 564#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseFile 565void 566AcpiOsCloseFile ( 567 ACPI_FILE File); 568#endif 569 570#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadFile 571int 572AcpiOsReadFile ( 573 ACPI_FILE File, 574 void *Buffer, 575 ACPI_SIZE Size, 576 ACPI_SIZE Count); 577#endif 578 579#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteFile 580int 581AcpiOsWriteFile ( 582 ACPI_FILE File, 583 void *Buffer, 584 ACPI_SIZE Size, 585 ACPI_SIZE Count); 586#endif 587 588#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetFileOffset 589long 590AcpiOsGetFileOffset ( 591 ACPI_FILE File); 592#endif 593 594#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSetFileOffset 595ACPI_STATUS 596AcpiOsSetFileOffset ( 597 ACPI_FILE File, 598 long Offset, 599 UINT8 From); 600#endif 601 602 603#endif /* __ACPIOSXF_H__ */ 604