acpiosxf.h 14 KB

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