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 - 2017, 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 55 typedef 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 76 typedef 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 89 ACPI_STATUS 90 AcpiOsInitialize ( 91 void); 92 #endif 93 94 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate 95 ACPI_STATUS 96 AcpiOsTerminate ( 97 void); 98 #endif 99 100 101 /* 102 * ACPI Table interfaces 103 */ 104 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetRootPointer 105 ACPI_PHYSICAL_ADDRESS 106 AcpiOsGetRootPointer ( 107 void); 108 #endif 109 110 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPredefinedOverride 111 ACPI_STATUS 112 AcpiOsPredefinedOverride ( 113 const ACPI_PREDEFINED_NAMES *InitVal, 114 ACPI_STRING *NewVal); 115 #endif 116 117 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTableOverride 118 ACPI_STATUS 119 AcpiOsTableOverride ( 120 ACPI_TABLE_HEADER *ExistingTable, 121 ACPI_TABLE_HEADER **NewTable); 122 #endif 123 124 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPhysicalTableOverride 125 ACPI_STATUS 126 AcpiOsPhysicalTableOverride ( 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 137 ACPI_STATUS 138 AcpiOsCreateLock ( 139 ACPI_SPINLOCK *OutHandle); 140 #endif 141 142 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteLock 143 void 144 AcpiOsDeleteLock ( 145 ACPI_SPINLOCK Handle); 146 #endif 147 148 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireLock 149 ACPI_CPU_FLAGS 150 AcpiOsAcquireLock ( 151 ACPI_SPINLOCK Handle); 152 #endif 153 154 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseLock 155 void 156 AcpiOsReleaseLock ( 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 166 ACPI_STATUS 167 AcpiOsCreateSemaphore ( 168 UINT32 MaxUnits, 169 UINT32 InitialUnits, 170 ACPI_SEMAPHORE *OutHandle); 171 #endif 172 173 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteSemaphore 174 ACPI_STATUS 175 AcpiOsDeleteSemaphore ( 176 ACPI_SEMAPHORE Handle); 177 #endif 178 179 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitSemaphore 180 ACPI_STATUS 181 AcpiOsWaitSemaphore ( 182 ACPI_SEMAPHORE Handle, 183 UINT32 Units, 184 UINT16 Timeout); 185 #endif 186 187 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignalSemaphore 188 ACPI_STATUS 189 AcpiOsSignalSemaphore ( 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 202 ACPI_STATUS 203 AcpiOsCreateMutex ( 204 ACPI_MUTEX *OutHandle); 205 #endif 206 207 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteMutex 208 void 209 AcpiOsDeleteMutex ( 210 ACPI_MUTEX Handle); 211 #endif 212 213 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireMutex 214 ACPI_STATUS 215 AcpiOsAcquireMutex ( 216 ACPI_MUTEX Handle, 217 UINT16 Timeout); 218 #endif 219 220 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseMutex 221 void 222 AcpiOsReleaseMutex ( 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 233 void * 234 AcpiOsAllocate ( 235 ACPI_SIZE Size); 236 #endif 237 238 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed 239 void * 240 AcpiOsAllocateZeroed ( 241 ACPI_SIZE Size); 242 #endif 243 244 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree 245 void 246 AcpiOsFree ( 247 void * Memory); 248 #endif 249 250 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory 251 void * 252 AcpiOsMapMemory ( 253 ACPI_PHYSICAL_ADDRESS Where, 254 ACPI_SIZE Length); 255 #endif 256 257 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory 258 void 259 AcpiOsUnmapMemory ( 260 void *LogicalAddress, 261 ACPI_SIZE Size); 262 #endif 263 264 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetPhysicalAddress 265 ACPI_STATUS 266 AcpiOsGetPhysicalAddress ( 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 276 ACPI_STATUS 277 AcpiOsCreateCache ( 278 char *CacheName, 279 UINT16 ObjectSize, 280 UINT16 MaxDepth, 281 ACPI_CACHE_T **ReturnCache); 282 #endif 283 284 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsDeleteCache 285 ACPI_STATUS 286 AcpiOsDeleteCache ( 287 ACPI_CACHE_T *Cache); 288 #endif 289 290 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPurgeCache 291 ACPI_STATUS 292 AcpiOsPurgeCache ( 293 ACPI_CACHE_T *Cache); 294 #endif 295 296 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject 297 void * 298 AcpiOsAcquireObject ( 299 ACPI_CACHE_T *Cache); 300 #endif 301 302 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReleaseObject 303 ACPI_STATUS 304 AcpiOsReleaseObject ( 305 ACPI_CACHE_T *Cache, 306 void *Object); 307 #endif 308 309 310 /* 311 * Interrupt handlers 312 */ 313 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInstallInterruptHandler 314 ACPI_STATUS 315 AcpiOsInstallInterruptHandler ( 316 UINT32 InterruptNumber, 317 ACPI_OSD_HANDLER ServiceRoutine, 318 void *Context); 319 #endif 320 321 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRemoveInterruptHandler 322 ACPI_STATUS 323 AcpiOsRemoveInterruptHandler ( 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 333 ACPI_THREAD_ID 334 AcpiOsGetThreadId ( 335 void); 336 #endif 337 338 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsExecute 339 ACPI_STATUS 340 AcpiOsExecute ( 341 ACPI_EXECUTE_TYPE Type, 342 ACPI_OSD_EXEC_CALLBACK Function, 343 void *Context); 344 #endif 345 346 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitEventsComplete 347 void 348 AcpiOsWaitEventsComplete ( 349 void); 350 #endif 351 352 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSleep 353 void 354 AcpiOsSleep ( 355 UINT64 Milliseconds); 356 #endif 357 358 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsStall 359 void 360 AcpiOsStall ( 361 UINT32 Microseconds); 362 #endif 363 364 365 /* 366 * Platform and hardware-independent I/O interfaces 367 */ 368 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadPort 369 ACPI_STATUS 370 AcpiOsReadPort ( 371 ACPI_IO_ADDRESS Address, 372 UINT32 *Value, 373 UINT32 Width); 374 #endif 375 376 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePort 377 ACPI_STATUS 378 AcpiOsWritePort ( 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 389 ACPI_STATUS 390 AcpiOsReadMemory ( 391 ACPI_PHYSICAL_ADDRESS Address, 392 UINT64 *Value, 393 UINT32 Width); 394 #endif 395 396 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteMemory 397 ACPI_STATUS 398 AcpiOsWriteMemory ( 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 411 ACPI_STATUS 412 AcpiOsReadPciConfiguration ( 413 ACPI_PCI_ID *PciId, 414 UINT32 Reg, 415 UINT64 *Value, 416 UINT32 Width); 417 #endif 418 419 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritePciConfiguration 420 ACPI_STATUS 421 AcpiOsWritePciConfiguration ( 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 433 BOOLEAN 434 AcpiOsReadable ( 435 void *Pointer, 436 ACPI_SIZE Length); 437 #endif 438 439 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable 440 BOOLEAN 441 AcpiOsWritable ( 442 void *Pointer, 443 ACPI_SIZE Length); 444 #endif 445 446 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTimer 447 UINT64 448 AcpiOsGetTimer ( 449 void); 450 #endif 451 452 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSignal 453 ACPI_STATUS 454 AcpiOsSignal ( 455 UINT32 Function, 456 void *Info); 457 #endif 458 459 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsEnterSleep 460 ACPI_STATUS 461 AcpiOsEnterSleep ( 462 UINT8 SleepState, 463 UINT32 RegaValue, 464 UINT32 RegbValue); 465 #endif 466 467 468 /* 469 * Debug print routines 470 */ 471 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf 472 void ACPI_INTERNAL_VAR_XFACE 473 AcpiOsPrintf ( 474 const char *Format, 475 ...); 476 #endif 477 478 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsVprintf 479 void 480 AcpiOsVprintf ( 481 const char *Format, 482 va_list Args); 483 #endif 484 485 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput 486 void 487 AcpiOsRedirectOutput ( 488 void *Destination); 489 #endif 490 491 492 /* 493 * Debug IO 494 */ 495 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine 496 ACPI_STATUS 497 AcpiOsGetLine ( 498 char *Buffer, 499 UINT32 BufferLength, 500 UINT32 *BytesRead); 501 #endif 502 503 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitializeDebugger 504 ACPI_STATUS 505 AcpiOsInitializeDebugger ( 506 void); 507 #endif 508 509 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminateDebugger 510 void 511 AcpiOsTerminateDebugger ( 512 void); 513 #endif 514 515 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWaitCommandReady 516 ACPI_STATUS 517 AcpiOsWaitCommandReady ( 518 void); 519 #endif 520 521 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsNotifyCommandComplete 522 ACPI_STATUS 523 AcpiOsNotifyCommandComplete ( 524 void); 525 #endif 526 527 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint 528 void 529 AcpiOsTracePoint ( 530 ACPI_TRACE_EVENT_TYPE Type, 531 BOOLEAN Begin, 532 UINT8 *Aml, 533 char *Pathname); 534 #endif 535 536 537 /* 538 * Obtain ACPI table(s) 539 */ 540 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName 541 ACPI_STATUS 542 AcpiOsGetTableByName ( 543 char *Signature, 544 UINT32 Instance, 545 ACPI_TABLE_HEADER **Table, 546 ACPI_PHYSICAL_ADDRESS *Address); 547 #endif 548 549 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex 550 ACPI_STATUS 551 AcpiOsGetTableByIndex ( 552 UINT32 Index, 553 ACPI_TABLE_HEADER **Table, 554 UINT32 *Instance, 555 ACPI_PHYSICAL_ADDRESS *Address); 556 #endif 557 558 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress 559 ACPI_STATUS 560 AcpiOsGetTableByAddress ( 561 ACPI_PHYSICAL_ADDRESS Address, 562 ACPI_TABLE_HEADER **Table); 563 #endif 564 565 566 /* 567 * Directory manipulation 568 */ 569 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory 570 void * 571 AcpiOsOpenDirectory ( 572 char *Pathname, 573 char *WildcardSpec, 574 char RequestedFileType); 575 #endif 576 577 /* RequesteFileType values */ 578 579 #define REQUEST_FILE_ONLY 0 580 #define REQUEST_DIR_ONLY 1 581 582 583 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename 584 char * 585 AcpiOsGetNextFilename ( 586 void *DirHandle); 587 #endif 588 589 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory 590 void 591 AcpiOsCloseDirectory ( 592 void *DirHandle); 593 #endif 594 595 596 #endif /* __ACPIOSXF_H__ */ 597