ReactOS 0.4.16-dev-1946-g52006dd
io.h File Reference
#include <uacpi/types.h>
#include <uacpi/acpi.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 15 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 900 of file io.c.

901{
904
907 return ret;
908
909 ret = uacpi_gas_read_mapped(&mapping, out_value);
911
912 return ret;
913}
#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:889
uacpi_status uacpi_map_gas_noalloc(const struct acpi_gas *gas, uacpi_mapped_gas *out_mapped)
Definition: io.c:832
uacpi_status uacpi_gas_read_mapped(const uacpi_mapped_gas *gas, uacpi_u64 *out_value)
Definition: io.c:751
return ret
Definition: mutex.c:146
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 
)

Definition at line 751 of file io.c.

754{
756 uacpi_u8 access_byte_width;
757 uacpi_u8 bit_offset, bits_left, index = 0;
758 uacpi_u64 data, mask = 0xFFFFFFFFFFFFFFFF;
759 uacpi_size offset = 0;
760
761 bit_offset = gas->bit_offset;
762 bits_left = gas->total_bit_width;
763
764 access_byte_width = gas->access_bit_width / 8;
765
766 if (access_byte_width < 8)
767 mask = ~(mask << gas->access_bit_width);
768
769 *out_value = 0;
770
771 while (bits_left) {
772 if (bit_offset >= gas->access_bit_width) {
773 data = 0;
774 bit_offset -= gas->access_bit_width;
775 } else {
776 ret = gas->read(gas->mapping, offset, access_byte_width, &data);
778 return ret;
779 }
780
781 *out_value |= (data & mask) << (index * gas->access_bit_width);
782 bits_left -= UACPI_MIN(bits_left, gas->access_bit_width);
783 ++index;
784 offset += access_byte_width;
785 }
786
787 return UACPI_STATUS_OK;
788}
#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 915 of file io.c.

916{
919
922 return ret;
923
924 ret = uacpi_gas_write_mapped(&mapping, in_value);
926
927 return ret;
928}
uacpi_status uacpi_gas_write_mapped(const uacpi_mapped_gas *gas, uacpi_u64 in_value)
Definition: io.c:790

◆ uacpi_gas_write_mapped()

uacpi_status uacpi_gas_write_mapped ( const uacpi_mapped_gas gas,
uacpi_u64  value 
)

Definition at line 790 of file io.c.

793{
795 uacpi_u8 access_byte_width;
796 uacpi_u8 bit_offset, bits_left, index = 0;
797 uacpi_u64 data, mask = 0xFFFFFFFFFFFFFFFF;
798 uacpi_size offset = 0;
799
800 bit_offset = gas->bit_offset;
801 bits_left = gas->total_bit_width;
802 access_byte_width = gas->access_bit_width / 8;
803
804 if (access_byte_width < 8)
805 mask = ~(mask << gas->access_bit_width);
806
807 while (bits_left) {
808 data = (in_value >> (index * gas->access_bit_width)) & mask;
809
810 if (bit_offset >= gas->access_bit_width) {
811 bit_offset -= gas->access_bit_width;
812 } else {
813 ret = gas->write(gas->mapping, offset, access_byte_width, data);
815 return ret;
816 }
817
818 bits_left -= UACPI_MIN(bits_left, gas->access_bit_width);
819 ++index;
820 offset += access_byte_width;
821 }
822
823 return UACPI_STATUS_OK;
824}
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 
)

Definition at line 868 of file io.c.

871{
874
878
881 uacpi_free(mapping, sizeof(*mapping));
882 return ret;
883 }
884
885 *out_mapped = mapping;
886 return ret;
887}
#define uacpi_free(mem, _)
Definition: stdlib.h:96
#define uacpi_unlikely(expr)
Definition: compiler.h:58
#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 894 of file io.c.

895{
897 uacpi_free(gas, sizeof(*gas));
898}