ReactOS 0.4.17-dev-1190-g4c812f4
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 1060 of file io.c.

1061{
1064
1067 return ret;
1068
1069 ret = uacpi_gas_read_mapped(&mapping, out_value);
1071
1072 return ret;
1073}
#define uacpi_unlikely_error(expr)
Definition: status.h:50
uacpi_status
Definition: status.h:10
void uacpi_unmap_gas_nofree(uacpi_mapped_gas *gas)
Definition: io.c:1049
uacpi_status uacpi_map_gas_noalloc(const struct acpi_gas *gas, uacpi_mapped_gas *out_mapped)
Definition: io.c:992
uacpi_status uacpi_gas_read_mapped(const uacpi_mapped_gas *gas, uacpi_u64 *out_value)
Definition: io.c:911
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 911 of file io.c.

914{
916 uacpi_u8 access_byte_width;
917 uacpi_u8 bit_offset, bits_left, index = 0;
918 uacpi_u64 data, mask = 0xFFFFFFFFFFFFFFFF;
919 uacpi_size offset = 0;
920
921 bit_offset = gas->bit_offset;
922 bits_left = gas->total_bit_width;
923
924 access_byte_width = gas->access_bit_width / 8;
925
926 if (access_byte_width < 8)
927 mask = ~(mask << gas->access_bit_width);
928
929 *out_value = 0;
930
931 while (bits_left) {
932 if (bit_offset >= gas->access_bit_width) {
933 data = 0;
934 bit_offset -= gas->access_bit_width;
935 } else {
936 ret = gas->read(gas->mapping, offset, access_byte_width, &data);
938 return ret;
939 }
940
941 *out_value |= (data & mask) << (index * gas->access_bit_width);
942 bits_left -= UACPI_MIN(bits_left, gas->access_bit_width);
943 ++index;
944 offset += access_byte_width;
945 }
946
947 return UACPI_STATUS_OK;
948}
#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(), gpe_try_claim(), maybe_dispatch_gpe(), set_gpe_state_unlocked(), 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 1075 of file io.c.

1076{
1079
1082 return ret;
1083
1084 ret = uacpi_gas_write_mapped(&mapping, in_value);
1086
1087 return ret;
1088}
uacpi_status uacpi_gas_write_mapped(const uacpi_mapped_gas *gas, uacpi_u64 in_value)
Definition: io.c:950

◆ uacpi_gas_write_mapped()

uacpi_status uacpi_gas_write_mapped ( const uacpi_mapped_gas *  gas,
uacpi_u64  value 
)

Definition at line 950 of file io.c.

953{
955 uacpi_u8 access_byte_width;
956 uacpi_u8 bit_offset, bits_left, index = 0;
957 uacpi_u64 data, mask = 0xFFFFFFFFFFFFFFFF;
958 uacpi_size offset = 0;
959
960 bit_offset = gas->bit_offset;
961 bits_left = gas->total_bit_width;
962 access_byte_width = gas->access_bit_width / 8;
963
964 if (access_byte_width < 8)
965 mask = ~(mask << gas->access_bit_width);
966
967 while (bits_left) {
968 data = (in_value >> (index * gas->access_bit_width)) & mask;
969
970 if (bit_offset >= gas->access_bit_width) {
971 bit_offset -= gas->access_bit_width;
972 } else {
973 ret = gas->write(gas->mapping, offset, access_byte_width, data);
975 return ret;
976 }
977
978 bits_left -= UACPI_MIN(bits_left, gas->access_bit_width);
979 ++index;
980 offset += access_byte_width;
981 }
982
983 return UACPI_STATUS_OK;
984}
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_try_claim(), set_gpe_state_unlocked(), uacpi_gas_write(), and uninstall_gpe_block().

◆ 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 1028 of file io.c.

1031{
1034
1038
1041 uacpi_free(mapping, sizeof(*mapping));
1042 return ret;
1043 }
1044
1045 *out_mapped = mapping;
1046 return ret;
1047}
#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 1054 of file io.c.

1055{
1057 uacpi_free(gas, sizeof(*gas));
1058}