Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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 <acpi/platform/acenv.h>
  50. #include <acpi/actypes.h>
  51.  
  52. /* Types for acpi_os_execute */
  53.  
  54. typedef enum {
  55.         OSL_GLOBAL_LOCK_HANDLER,
  56.         OSL_NOTIFY_HANDLER,
  57.         OSL_GPE_HANDLER,
  58.         OSL_DEBUGGER_MAIN_THREAD,
  59.         OSL_DEBUGGER_EXEC_THREAD,
  60.         OSL_EC_POLL_HANDLER,
  61.         OSL_EC_BURST_HANDLER
  62. } acpi_execute_type;
  63.  
  64. #define ACPI_NO_UNIT_LIMIT          ((u32) -1)
  65. #define ACPI_MUTEX_SEM              1
  66.  
  67. /* Functions for acpi_os_signal */
  68.  
  69. #define ACPI_SIGNAL_FATAL           0
  70. #define ACPI_SIGNAL_BREAKPOINT      1
  71.  
  72. struct acpi_signal_fatal_info {
  73.         u32 type;
  74.         u32 code;
  75.         u32 argument;
  76. };
  77.  
  78. /*
  79.  * OSL Initialization and shutdown primitives
  80.  */
  81. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize
  82. acpi_status acpi_os_initialize(void);
  83. #endif
  84.  
  85. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate
  86. acpi_status acpi_os_terminate(void);
  87. #endif
  88.  
  89. /*
  90.  * ACPI Table interfaces
  91.  */
  92. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_root_pointer
  93. acpi_physical_address acpi_os_get_root_pointer(void);
  94. #endif
  95.  
  96. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override
  97. acpi_status
  98. acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
  99.                             char **new_val);
  100. #endif
  101.  
  102. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override
  103. acpi_status
  104. acpi_os_table_override(struct acpi_table_header *existing_table,
  105.                        struct acpi_table_header **new_table);
  106. #endif
  107.  
  108. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_physical_table_override
  109. acpi_status
  110. acpi_os_physical_table_override(struct acpi_table_header *existing_table,
  111.                                 acpi_physical_address * new_address,
  112.                                 u32 *new_table_length);
  113. #endif
  114.  
  115. /*
  116.  * Spinlock primitives
  117.  */
  118. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock
  119. acpi_status acpi_os_create_lock(acpi_spinlock * out_handle);
  120. #endif
  121.  
  122. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_lock
  123. void acpi_os_delete_lock(acpi_spinlock handle);
  124. #endif
  125.  
  126. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_lock
  127. acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock handle);
  128. #endif
  129.  
  130. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_lock
  131. void acpi_os_release_lock(acpi_spinlock handle, acpi_cpu_flags flags);
  132. #endif
  133.  
  134. /*
  135.  * Semaphore primitives
  136.  */
  137. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_semaphore
  138. acpi_status
  139. acpi_os_create_semaphore(u32 max_units,
  140.                          u32 initial_units, acpi_semaphore * out_handle);
  141. #endif
  142.  
  143. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_semaphore
  144. acpi_status acpi_os_delete_semaphore(acpi_semaphore handle);
  145. #endif
  146.  
  147. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_semaphore
  148. acpi_status
  149. acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout);
  150. #endif
  151.  
  152. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal_semaphore
  153. acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units);
  154. #endif
  155.  
  156. /*
  157.  * Mutex primitives. May be configured to use semaphores instead via
  158.  * ACPI_MUTEX_TYPE (see platform/acenv.h)
  159.  */
  160. #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
  161.  
  162. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_mutex
  163. acpi_status acpi_os_create_mutex(acpi_mutex * out_handle);
  164. #endif
  165.  
  166. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_mutex
  167. void acpi_os_delete_mutex(acpi_mutex handle);
  168. #endif
  169.  
  170. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_mutex
  171. acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout);
  172. #endif
  173.  
  174. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_mutex
  175. void acpi_os_release_mutex(acpi_mutex handle);
  176. #endif
  177.  
  178. #endif
  179.  
  180. /*
  181.  * Memory allocation and mapping
  182.  */
  183. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate
  184. void *acpi_os_allocate(acpi_size size);
  185. #endif
  186.  
  187. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed
  188. void *acpi_os_allocate_zeroed(acpi_size size);
  189. #endif
  190.  
  191. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free
  192. void acpi_os_free(void *memory);
  193. #endif
  194.  
  195. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_map_memory
  196. void *acpi_os_map_memory(acpi_physical_address where, acpi_size length);
  197. #endif
  198.  
  199. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_unmap_memory
  200. void acpi_os_unmap_memory(void *logical_address, acpi_size size);
  201. #endif
  202.  
  203. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_physical_address
  204. acpi_status
  205. acpi_os_get_physical_address(void *logical_address,
  206.                              acpi_physical_address * physical_address);
  207. #endif
  208.  
  209. /*
  210.  * Memory/Object Cache
  211.  */
  212. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_cache
  213. acpi_status
  214. acpi_os_create_cache(char *cache_name,
  215.                      u16 object_size,
  216.                      u16 max_depth, acpi_cache_t ** return_cache);
  217. #endif
  218.  
  219. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_cache
  220. acpi_status acpi_os_delete_cache(acpi_cache_t * cache);
  221. #endif
  222.  
  223. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_purge_cache
  224. acpi_status acpi_os_purge_cache(acpi_cache_t * cache);
  225. #endif
  226.  
  227. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object
  228. void *acpi_os_acquire_object(acpi_cache_t * cache);
  229. #endif
  230.  
  231. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_object
  232. acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object);
  233. #endif
  234.  
  235. /*
  236.  * Interrupt handlers
  237.  */
  238. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_install_interrupt_handler
  239. acpi_status
  240. acpi_os_install_interrupt_handler(u32 interrupt_number,
  241.                                   acpi_osd_handler service_routine,
  242.                                   void *context);
  243. #endif
  244.  
  245. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_remove_interrupt_handler
  246. acpi_status
  247. acpi_os_remove_interrupt_handler(u32 interrupt_number,
  248.                                  acpi_osd_handler service_routine);
  249. #endif
  250.  
  251. /*
  252.  * Threads and Scheduling
  253.  */
  254. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id
  255. acpi_thread_id acpi_os_get_thread_id(void);
  256. #endif
  257.  
  258. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_execute
  259. acpi_status
  260. acpi_os_execute(acpi_execute_type type,
  261.                 acpi_osd_exec_callback function, void *context);
  262. #endif
  263.  
  264. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_events_complete
  265. void acpi_os_wait_events_complete(void);
  266. #endif
  267.  
  268. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_sleep
  269. void acpi_os_sleep(u64 milliseconds);
  270. #endif
  271.  
  272. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_stall
  273. void acpi_os_stall(u32 microseconds);
  274. #endif
  275.  
  276. /*
  277.  * Platform and hardware-independent I/O interfaces
  278.  */
  279. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_port
  280. acpi_status acpi_os_read_port(acpi_io_address address, u32 *value, u32 width);
  281. #endif
  282.  
  283. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_port
  284. acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width);
  285. #endif
  286.  
  287. /*
  288.  * Platform and hardware-independent physical memory interfaces
  289.  */
  290. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_memory
  291. acpi_status
  292. acpi_os_read_memory(acpi_physical_address address, u64 *value, u32 width);
  293. #endif
  294.  
  295. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_memory
  296. acpi_status
  297. acpi_os_write_memory(acpi_physical_address address, u64 value, u32 width);
  298. #endif
  299.  
  300. /*
  301.  * Platform and hardware-independent PCI configuration space access
  302.  * Note: Can't use "Register" as a parameter, changed to "Reg" --
  303.  * certain compilers complain.
  304.  */
  305. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_pci_configuration
  306. acpi_status
  307. acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id,
  308.                                u32 reg, u64 *value, u32 width);
  309. #endif
  310.  
  311. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_pci_configuration
  312. acpi_status
  313. acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id,
  314.                                 u32 reg, u64 value, u32 width);
  315. #endif
  316.  
  317. /*
  318.  * Miscellaneous
  319.  */
  320. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable
  321. u8 acpi_os_readable(void *pointer, acpi_size length);
  322. #endif
  323.  
  324. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable
  325. u8 acpi_os_writable(void *pointer, acpi_size length);
  326. #endif
  327.  
  328. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_timer
  329. u64 acpi_os_get_timer(void);
  330. #endif
  331.  
  332. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal
  333. acpi_status acpi_os_signal(u32 function, void *info);
  334. #endif
  335.  
  336. /*
  337.  * Debug print routines
  338.  */
  339. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_printf
  340. void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...);
  341. #endif
  342.  
  343. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_vprintf
  344. void acpi_os_vprintf(const char *format, va_list args);
  345. #endif
  346.  
  347. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output
  348. void acpi_os_redirect_output(void *destination);
  349. #endif
  350.  
  351. /*
  352.  * Debug input
  353.  */
  354. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line
  355. acpi_status acpi_os_get_line(char *buffer, u32 buffer_length, u32 *bytes_read);
  356. #endif
  357.  
  358. /*
  359.  * Obtain ACPI table(s)
  360.  */
  361. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name
  362. acpi_status
  363. acpi_os_get_table_by_name(char *signature,
  364.                           u32 instance,
  365.                           struct acpi_table_header **table,
  366.                           acpi_physical_address * address);
  367. #endif
  368.  
  369. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index
  370. acpi_status
  371. acpi_os_get_table_by_index(u32 index,
  372.                            struct acpi_table_header **table,
  373.                            u32 *instance, acpi_physical_address * address);
  374. #endif
  375.  
  376. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address
  377. acpi_status
  378. acpi_os_get_table_by_address(acpi_physical_address address,
  379.                              struct acpi_table_header **table);
  380. #endif
  381.  
  382. /*
  383.  * Directory manipulation
  384.  */
  385. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory
  386. void *acpi_os_open_directory(char *pathname,
  387.                              char *wildcard_spec, char requested_file_type);
  388. #endif
  389.  
  390. /* requeste_file_type values */
  391.  
  392. #define REQUEST_FILE_ONLY                   0
  393. #define REQUEST_DIR_ONLY                    1
  394.  
  395. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename
  396. char *acpi_os_get_next_filename(void *dir_handle);
  397. #endif
  398.  
  399. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory
  400. void acpi_os_close_directory(void *dir_handle);
  401. #endif
  402.  
  403. /*
  404.  * File I/O and related support
  405.  */
  406. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_file
  407. ACPI_FILE acpi_os_open_file(const char *path, u8 modes);
  408. #endif
  409.  
  410. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_file
  411. void acpi_os_close_file(ACPI_FILE file);
  412. #endif
  413.  
  414. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_file
  415. int
  416. acpi_os_read_file(ACPI_FILE file,
  417.                   void *buffer, acpi_size size, acpi_size count);
  418. #endif
  419.  
  420. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_file
  421. int
  422. acpi_os_write_file(ACPI_FILE file,
  423.                    void *buffer, acpi_size size, acpi_size count);
  424. #endif
  425.  
  426. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_file_offset
  427. long acpi_os_get_file_offset(ACPI_FILE file);
  428. #endif
  429.  
  430. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_set_file_offset
  431. acpi_status acpi_os_set_file_offset(ACPI_FILE file, long offset, u8 from);
  432. #endif
  433.  
  434. #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_trace_point
  435. void
  436. acpi_os_trace_point(acpi_trace_event_type type,
  437.                     u8 begin, u8 *aml, char *pathname);
  438. #endif
  439.  
  440. #endif                          /* __ACPIOSXF_H__ */
  441.