ReactOS 0.4.17-dev-683-g0dafdc5
io.h File Reference
#include <uacpi/types.h>
Include dependency graph for io.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef struct uacpi_mapped_gas uacpi_mapped_gas
 

Functions

uacpi_status uacpi_gas_read (const struct acpi_gas *gas, uacpi_u64 *value)
 
uacpi_status uacpi_gas_write (const struct acpi_gas *gas, uacpi_u64 value)
 
uacpi_status uacpi_map_gas (const struct acpi_gas *gas, uacpi_mapped_gas **out_mapped)
 
void uacpi_unmap_gas (uacpi_mapped_gas *)
 
uacpi_status uacpi_gas_read_mapped (const uacpi_mapped_gas *gas, uacpi_u64 *value)
 
uacpi_status uacpi_gas_write_mapped (const uacpi_mapped_gas *gas, uacpi_u64 value)
 

Typedef Documentation

◆ uacpi_mapped_gas

Definition at line 17 of file io.h.

Function Documentation

◆ uacpi_gas_read()

uacpi_status uacpi_gas_read ( const struct acpi_gas *  gas,
uacpi_u64 value 
)

Definition at line 995 of file io.c.

996{
999
1002 return ret;
1003
1004 ret = uacpi_gas_read_mapped(&mapping, out_value);
1006
1007 return ret;
1008}
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_status
Definition: status.h:10
void uacpi_unmap_gas_nofree(uacpi_mapped_gas *gas)
Definition: io.c:984
uacpi_status uacpi_map_gas_noalloc(const struct acpi_gas *gas, uacpi_mapped_gas *out_mapped)
Definition: io.c:927
uacpi_status uacpi_gas_read_mapped(const uacpi_mapped_gas *gas, uacpi_u64 *out_value)
Definition: io.c:846
return ret
Definition: mutex.c:147
GLenum GLenum GLenum GLenum mapping
Definition: glext.h:9031

◆ uacpi_gas_read_mapped()

uacpi_status uacpi_gas_read_mapped ( const uacpi_mapped_gas gas,
uacpi_u64 value 
)

Same as uacpi_gas_{read,write} but operates on a pre-mapped handle for faster access and/or ability to use in critical sections/irq contexts.

Definition at line 846 of file io.c.

849{
851 uacpi_u8 access_byte_width;
852 uacpi_u8 bit_offset, bits_left, index = 0;
853 uacpi_u64 data, mask = 0xFFFFFFFFFFFFFFFF;
854 uacpi_size offset = 0;
855
856 bit_offset = gas->bit_offset;
857 bits_left = gas->total_bit_width;
858
859 access_byte_width = gas->access_bit_width / 8;
860
861 if (access_byte_width < 8)
862 mask = ~(mask << gas->access_bit_width);
863
864 *out_value = 0;
865
866 while (bits_left) {
867 if (bit_offset >= gas->access_bit_width) {
868 data = 0;
869 bit_offset -= gas->access_bit_width;
870 } else {
871 ret = gas->read(gas->mapping, offset, access_byte_width, &data);
873 return ret;
874 }
875
876 *out_value |= (data & mask) << (index * gas->access_bit_width);
877 bits_left -= UACPI_MIN(bits_left, gas->access_bit_width);
878 ++index;
879 offset += access_byte_width;
880 }
881
882 return UACPI_STATUS_OK;
883}
#define index(s, c)
Definition: various.h:29
#define UACPI_MIN(x, y)
Definition: stdlib.h:102
size_t uacpi_size
Definition: types.h:37
uint64_t uacpi_u64
Definition: types.h:22
uint8_t uacpi_u8
Definition: types.h:19
@ UACPI_STATUS_OK
Definition: status.h:11
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLintptr offset
Definition: glext.h:5920
GLuint index
Definition: glext.h:6031
GLenum GLint GLuint mask
Definition: glext.h:6028
uacpi_u8 access_bit_width
Definition: io.h:11
uacpi_u8 total_bit_width
Definition: io.h:12
uacpi_handle mapping
Definition: io.h:10
uacpi_u8 bit_offset
Definition: io.h:13
uacpi_status(* read)(uacpi_handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
Definition: io.h:15

Referenced by detect_gpes(), do_read_one(), maybe_dispatch_gpe(), set_gpe_state(), uacpi_gas_read(), and uacpi_gpe_info().

◆ uacpi_gas_write()

uacpi_status uacpi_gas_write ( const struct acpi_gas *  gas,
uacpi_u64  value 
)

Definition at line 1010 of file io.c.

1011{
1014
1017 return ret;
1018
1019 ret = uacpi_gas_write_mapped(&mapping, in_value);
1021
1022 return ret;
1023}
uacpi_status uacpi_gas_write_mapped(const uacpi_mapped_gas *gas, uacpi_u64 in_value)
Definition: io.c:885

◆ uacpi_gas_write_mapped()

uacpi_status uacpi_gas_write_mapped ( const uacpi_mapped_gas gas,
uacpi_u64  value 
)

Definition at line 885 of file io.c.

888{
890 uacpi_u8 access_byte_width;
891 uacpi_u8 bit_offset, bits_left, index = 0;
892 uacpi_u64 data, mask = 0xFFFFFFFFFFFFFFFF;
893 uacpi_size offset = 0;
894
895 bit_offset = gas->bit_offset;
896 bits_left = gas->total_bit_width;
897 access_byte_width = gas->access_bit_width / 8;
898
899 if (access_byte_width < 8)
900 mask = ~(mask << gas->access_bit_width);
901
902 while (bits_left) {
903 data = (in_value >> (index * gas->access_bit_width)) & mask;
904
905 if (bit_offset >= gas->access_bit_width) {
906 bit_offset -= gas->access_bit_width;
907 } else {
908 ret = gas->write(gas->mapping, offset, access_byte_width, data);
910 return ret;
911 }
912
913 bits_left -= UACPI_MIN(bits_left, gas->access_bit_width);
914 ++index;
915 offset += access_byte_width;
916 }
917
918 return UACPI_STATUS_OK;
919}
uacpi_status(* write)(uacpi_handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
Definition: io.h:18

Referenced by clear_gpe(), create_gpe_block(), do_write_one(), gpe_block_apply_action(), gpe_block_mask_safe(), set_gpe_state(), and uacpi_gas_write().

◆ uacpi_map_gas()

uacpi_status uacpi_map_gas ( const struct acpi_gas *  gas,
uacpi_mapped_gas **  out_mapped 
)

Map a GAS for faster access in the future. The handle returned via 'out_mapped' must be freed & unmapped using uacpi_unmap_gas() when no longer needed.

Definition at line 963 of file io.c.

966{
969
973
976 uacpi_free(mapping, sizeof(*mapping));
977 return ret;
978 }
979
980 *out_mapped = mapping;
981 return ret;
982}
#define uacpi_free(mem, _)
Definition: stdlib.h:96
#define uacpi_unlikely(expr)
Definition: compiler.h:88
#define UACPI_NULL
Definition: types.h:33
@ UACPI_STATUS_OUT_OF_MEMORY
Definition: status.h:13
void * uacpi_kernel_alloc(uacpi_size size)
Definition: uacpiosl.c:111

◆ uacpi_unmap_gas()

void uacpi_unmap_gas ( uacpi_mapped_gas gas)

Definition at line 989 of file io.c.

990{
992 uacpi_free(gas, sizeof(*gas));
993}