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