ReactOS 0.4.17-dev-683-g0dafdc5
io.h File Reference
#include <uacpi/internal/types.h>
#include <uacpi/acpi.h>
#include <uacpi/io.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.

Classes

struct  uacpi_mapped_gas
 

Macros

#define uacpi_mmio_read8   uacpi_builtin_mmio_read8
 
#define uacpi_mmio_read16   uacpi_builtin_mmio_read16
 
#define uacpi_mmio_read32   uacpi_builtin_mmio_read32
 
#define uacpi_mmio_read64   uacpi_builtin_mmio_read64
 
#define uacpi_mmio_write8   uacpi_builtin_mmio_write8
 
#define uacpi_mmio_write16   uacpi_builtin_mmio_write16
 
#define uacpi_mmio_write32   uacpi_builtin_mmio_write32
 
#define uacpi_mmio_write64   uacpi_builtin_mmio_write64
 

Typedefs

typedef struct uacpi_mapped_gas uacpi_mapped_gas
 

Functions

uacpi_status uacpi_map_gas_noalloc (const struct acpi_gas *gas, uacpi_mapped_gas *out_mapped)
 
void uacpi_unmap_gas_nofree (uacpi_mapped_gas *gas)
 
uacpi_size uacpi_round_up_bits_to_bytes (uacpi_size bit_length)
 
void uacpi_read_buffer_field (const uacpi_buffer_field *field, void *dst)
 
void uacpi_write_buffer_field (uacpi_buffer_field *field, const void *src, uacpi_size size)
 
uacpi_status uacpi_field_unit_get_read_type (struct uacpi_field_unit *field, uacpi_object_type *out_type)
 
uacpi_status uacpi_field_unit_get_bit_length (struct uacpi_field_unit *field, uacpi_size *out_length)
 
uacpi_status uacpi_read_field_unit (uacpi_field_unit *field, void *dst, uacpi_size size, uacpi_data_view *wtr_response)
 
uacpi_status uacpi_write_field_unit (uacpi_field_unit *field, const void *src, uacpi_size size, uacpi_data_view *wtr_response)
 
uacpi_u8 uacpi_builtin_mmio_read8 (void *ptr)
 
uacpi_u16 uacpi_builtin_mmio_read16 (void *ptr)
 
uacpi_u32 uacpi_builtin_mmio_read32 (void *ptr)
 
uacpi_u64 uacpi_builtin_mmio_read64 (void *ptr)
 
void uacpi_builtin_mmio_write8 (void *ptr, uacpi_u8 data)
 
void uacpi_builtin_mmio_write16 (void *ptr, uacpi_u16 data)
 
void uacpi_builtin_mmio_write32 (void *ptr, uacpi_u32 data)
 
void uacpi_builtin_mmio_write64 (void *ptr, uacpi_u64 data)
 
uacpi_status uacpi_system_memory_read (void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
 
uacpi_status uacpi_system_memory_write (void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
 
uacpi_status uacpi_system_io_read (uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
 
uacpi_status uacpi_system_io_write (uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
 
uacpi_status uacpi_pci_read (uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
 
uacpi_status uacpi_pci_write (uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
 

Macro Definition Documentation

◆ uacpi_mmio_read16

#define uacpi_mmio_read16   uacpi_builtin_mmio_read16

Definition at line 78 of file io.h.

◆ uacpi_mmio_read32

#define uacpi_mmio_read32   uacpi_builtin_mmio_read32

Definition at line 79 of file io.h.

◆ uacpi_mmio_read64

#define uacpi_mmio_read64   uacpi_builtin_mmio_read64

Definition at line 80 of file io.h.

◆ uacpi_mmio_read8

#define uacpi_mmio_read8   uacpi_builtin_mmio_read8

Definition at line 77 of file io.h.

◆ uacpi_mmio_write16

#define uacpi_mmio_write16   uacpi_builtin_mmio_write16

Definition at line 83 of file io.h.

◆ uacpi_mmio_write32

#define uacpi_mmio_write32   uacpi_builtin_mmio_write32

Definition at line 84 of file io.h.

◆ uacpi_mmio_write64

#define uacpi_mmio_write64   uacpi_builtin_mmio_write64

Definition at line 85 of file io.h.

◆ uacpi_mmio_write8

#define uacpi_mmio_write8   uacpi_builtin_mmio_write8

Definition at line 82 of file io.h.

Typedef Documentation

◆ uacpi_mapped_gas

Function Documentation

◆ uacpi_builtin_mmio_read16()

uacpi_u16 uacpi_builtin_mmio_read16 ( void ptr)

Definition at line 1031 of file io.c.

1032{
1033 return *(volatile uacpi_u16*)ptr;
1034}
uint16_t uacpi_u16
Definition: types.h:20
static PVOID ptr
Definition: dispmode.c:27

◆ uacpi_builtin_mmio_read32()

uacpi_u32 uacpi_builtin_mmio_read32 ( void ptr)

Definition at line 1036 of file io.c.

1037{
1038 return *(volatile uacpi_u32*)ptr;
1039}
uint32_t uacpi_u32
Definition: types.h:21

◆ uacpi_builtin_mmio_read64()

uacpi_u64 uacpi_builtin_mmio_read64 ( void ptr)

Definition at line 1041 of file io.c.

1042{
1043 return *(volatile uacpi_u64*)ptr;
1044}
uint64_t uacpi_u64
Definition: types.h:22

◆ uacpi_builtin_mmio_read8()

uacpi_u8 uacpi_builtin_mmio_read8 ( void ptr)

Definition at line 1026 of file io.c.

1027{
1028 return *(volatile uacpi_u8*)ptr;
1029}
uint8_t uacpi_u8
Definition: types.h:19

◆ uacpi_builtin_mmio_write16()

void uacpi_builtin_mmio_write16 ( void ptr,
uacpi_u16  data 
)

Definition at line 1051 of file io.c.

1052{
1053 *(volatile uacpi_u16*)ptr = data;
1054}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

◆ uacpi_builtin_mmio_write32()

void uacpi_builtin_mmio_write32 ( void ptr,
uacpi_u32  data 
)

Definition at line 1056 of file io.c.

1057{
1058 *(volatile uacpi_u32*)ptr = data;
1059}

◆ uacpi_builtin_mmio_write64()

void uacpi_builtin_mmio_write64 ( void ptr,
uacpi_u64  data 
)

Definition at line 1061 of file io.c.

1062{
1063 *(volatile uacpi_u64*)ptr = data;
1064}

◆ uacpi_builtin_mmio_write8()

void uacpi_builtin_mmio_write8 ( void ptr,
uacpi_u8  data 
)

Definition at line 1046 of file io.c.

1047{
1048 *(volatile uacpi_u8*)ptr = data;
1049}

◆ uacpi_field_unit_get_bit_length()

uacpi_status uacpi_field_unit_get_bit_length ( struct uacpi_field_unit field,
uacpi_size out_length 
)

Definition at line 721 of file io.c.

724{
726
728 goto out_basic_field;
729
732 );
735
736 if (uacpi_is_buffer_access_address_space(obj->op_region->space)) {
737 /*
738 * Bit length is protocol specific, the data will be returned
739 * via the write-then-read response buffer.
740 */
741 *out_length = 0;
742 return UACPI_STATUS_OK;
743 }
744
745out_basic_field:
746 *out_length = field->bit_length;
747 return UACPI_STATUS_OK;
748}
uacpi_object * uacpi_namespace_node_get_object_typed(const uacpi_namespace_node *node, uacpi_object_type_bits type_mask)
Definition: namespace.c:654
@ UACPI_FIELD_UNIT_KIND_INDEX
Definition: types.h:205
#define uacpi_unlikely(expr)
Definition: compiler.h:88
#define UACPI_NULL
Definition: types.h:33
@ UACPI_STATUS_INVALID_ARGUMENT
Definition: status.h:18
@ UACPI_STATUS_OK
Definition: status.h:11
@ UACPI_OBJECT_OPERATION_REGION_BIT
Definition: types.h:144
uacpi_bool uacpi_is_buffer_access_address_space(uacpi_address_space space)
Definition: opregion.c:833
Definition: parser.c:44

Referenced by field_byte_size().

◆ uacpi_field_unit_get_read_type()

uacpi_status uacpi_field_unit_get_read_type ( struct uacpi_field_unit field,
uacpi_object_type out_type 
)

Definition at line 692 of file io.c.

695{
697
699 goto out_basic_field;
700
703 );
706
707 if (uacpi_is_buffer_access_address_space(obj->op_region->space)) {
708 *out_type = UACPI_OBJECT_BUFFER;
709 return UACPI_STATUS_OK;
710 }
711
712out_basic_field:
713 if (field->bit_length > (g_uacpi_rt_ctx.is_rev1 ? 32u : 64u))
714 *out_type = UACPI_OBJECT_BUFFER;
715 else
716 *out_type = UACPI_OBJECT_INTEGER;
717
718 return UACPI_STATUS_OK;
719}
struct uacpi_runtime_context g_uacpi_rt_ctx
Definition: uacpi.c:17
@ UACPI_OBJECT_BUFFER
Definition: types.h:114
@ UACPI_OBJECT_INTEGER
Definition: types.h:112

Referenced by field_get_read_type().

◆ uacpi_map_gas_noalloc()

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

Definition at line 927 of file io.c.

930{
932 uacpi_u8 access_bit_width, total_width;
933
934 ret = gas_validate(gas, &access_bit_width, &total_width);
935 if (ret != UACPI_STATUS_OK)
936 return ret;
937
938 if (gas->address_space_id == UACPI_ADDRESS_SPACE_SYSTEM_MEMORY) {
939 out_mapped->mapping = uacpi_kernel_map(gas->address, total_width / 8);
940 if (uacpi_unlikely(out_mapped->mapping == UACPI_MAP_FAILED))
942
943 out_mapped->read = uacpi_system_memory_read;
944 out_mapped->write = uacpi_system_memory_write;
945 out_mapped->unmap = uacpi_kernel_unmap;
946 } else { // IO, validated by gas_validate above
947 ret = uacpi_kernel_io_map(gas->address, total_width / 8, &out_mapped->mapping);
949 return ret;
950
951 out_mapped->read = uacpi_system_io_read;
952 out_mapped->write = uacpi_system_io_write;
953 out_mapped->unmap = unmap_gas_io;
954 }
955
956 out_mapped->access_bit_width = access_bit_width;
957 out_mapped->total_bit_width = total_width;
958 out_mapped->bit_offset = gas->register_bit_offset;
959
960 return UACPI_STATUS_OK;
961}
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_status
Definition: status.h:10
@ UACPI_STATUS_MAPPING_FAILED
Definition: status.h:12
@ UACPI_ADDRESS_SPACE_SYSTEM_MEMORY
Definition: types.h:43
uacpi_status uacpi_system_io_write(uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
Definition: io.c:1158
uacpi_status uacpi_system_memory_read(void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
Definition: io.c:1067
uacpi_status uacpi_system_io_read(uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out)
Definition: io.c:1126
static void unmap_gas_io(uacpi_handle io_handle, uacpi_size size)
Definition: io.c:921
uacpi_status uacpi_system_memory_write(void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
Definition: io.c:1093
static uacpi_status gas_validate(const struct acpi_gas *gas, uacpi_u8 *access_bit_width, uacpi_u8 *bit_width)
Definition: io.c:796
return ret
Definition: mutex.c:147
uacpi_status uacpi_kernel_io_map(uacpi_io_addr base, uacpi_size len, uacpi_handle *out_handle)
Definition: uacpiosl.c:165
#define UACPI_MAP_FAILED
Definition: kernel_api.h:13
void uacpi_kernel_unmap(void *addr, uacpi_size len)
Definition: uacpiosl.c:198
void * uacpi_kernel_map(uacpi_phys_addr addr, uacpi_size len)
Definition: uacpiosl.c:191
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
void(* unmap)(uacpi_handle, uacpi_size)
Definition: io.h:22
uacpi_status(* write)(uacpi_handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in)
Definition: io.h:18
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 create_gpe_block(), map_one(), uacpi_gas_read(), uacpi_gas_write(), and uacpi_map_gas().

◆ uacpi_pci_read()

uacpi_status uacpi_pci_read ( uacpi_handle  handle,
uacpi_size  offset,
uacpi_u8  width,
uacpi_u64 out 
)

Definition at line 1185 of file io.c.

1188{
1190 union integer_data data = {
1191 .qword = 0,
1192 };
1193
1194 switch (width) {
1195 case 1:
1197 break;
1198 case 2:
1200 break;
1201 case 4:
1203 break;
1204 default:
1206 "invalid PCI_Config read %p@%zu width=%d",
1208 );
1210 }
1211
1213 *out = data.qword;
1214 return ret;
1215}
#define uacpi_error(...)
Definition: log.h:36
#define uacpi_likely_success(expr)
Definition: status.h:53
GLint GLint GLsizei width
Definition: gl.h:1546
GLintptr offset
Definition: glext.h:5920
uacpi_status uacpi_kernel_pci_read8(uacpi_handle device, uacpi_size offset, uacpi_u8 *value)
Definition: uacpiosl.c:257
uacpi_status uacpi_kernel_pci_read16(uacpi_handle device, uacpi_size offset, uacpi_u16 *value)
Definition: uacpiosl.c:264
uacpi_status uacpi_kernel_pci_read32(uacpi_handle device, uacpi_size offset, uacpi_u32 *value)
Definition: uacpiosl.c:271
uacpi_u64 qword
Definition: io.c:1123
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by pci_region_do_rw().

◆ uacpi_pci_write()

uacpi_status uacpi_pci_write ( uacpi_handle  handle,
uacpi_size  offset,
uacpi_u8  width,
uacpi_u64  in 
)

Definition at line 1217 of file io.c.

1220{
1222
1223 switch (width) {
1224 case 1:
1226 break;
1227 case 2:
1229 break;
1230 case 4:
1232 break;
1233 default:
1235 "invalid PCI_Config write %p@%zu width=%d",
1237 );
1239 }
1240
1241 return ret;
1242}
GLuint in
Definition: glext.h:9616
uacpi_status uacpi_kernel_pci_write16(uacpi_handle device, uacpi_size offset, uacpi_u16 value)
Definition: uacpiosl.c:285
uacpi_status uacpi_kernel_pci_write8(uacpi_handle device, uacpi_size offset, uacpi_u8 value)
Definition: uacpiosl.c:278
uacpi_status uacpi_kernel_pci_write32(uacpi_handle device, uacpi_size offset, uacpi_u32 value)
Definition: uacpiosl.c:292

Referenced by pci_region_do_rw().

◆ uacpi_read_buffer_field()

void uacpi_read_buffer_field ( const uacpi_buffer_field field,
void dst 
)

Definition at line 113 of file io.c.

116{
117 if (!(field->bit_index & 7)) {
118 uacpi_u8 *src = field->backing->data;
120
122 uacpi_memcpy(dst, src + (field->bit_index / 8), count);
123 cut_misaligned_tail(dst, count - 1, field->bit_length);
124 return;
125 }
126
128}
#define uacpi_memcpy
Definition: stdlib.h:34
size_t uacpi_size
Definition: types.h:37
uacpi_size uacpi_round_up_bits_to_bytes(uacpi_size bit_length)
Definition: io.c:11
static void do_misaligned_buffer_read(const uacpi_buffer_field *field, uacpi_u8 *dst)
Definition: io.c:97
static void cut_misaligned_tail(uacpi_u8 *data, uacpi_size offset, uacpi_u32 bit_length)
Definition: io.c:16
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340

Referenced by handle_field_read(), and handle_inc_dec().

◆ uacpi_read_field_unit()

uacpi_status uacpi_read_field_unit ( uacpi_field_unit field,
void dst,
uacpi_size  size,
uacpi_data_view wtr_response 
)

Definition at line 530 of file io.c.

534{
536 uacpi_u32 field_byte_length;
537 uacpi_bool did_handle;
538 uacpi_data_view data_view = { 0 };
539
540 data_view.data = dst;
541 data_view.length = size;
542
545 return ret;
546
548 field, data_view, UACPI_REGION_OP_READ,
549 wtr_response, &did_handle
550 );
551 if (did_handle)
552 goto out;
553
554 field_byte_length = uacpi_round_up_bits_to_bytes(field->bit_length);
555
556 /*
557 * Very simple fast case:
558 * - Bit offset within first byte is 0
559 * AND
560 * - Field size is <= access width
561 */
562 if (field->bit_offset_within_first_byte == 0 &&
563 field_byte_length <= field->access_width_bytes)
564 {
567
568 data.integer = &out;
570 field, field->byte_offset, UACPI_REGION_OP_READ,
571 data
572 );
574 goto out;
575
576 uacpi_memcpy_zerout(dst, &out, size, field_byte_length);
577 if (size >= field_byte_length)
578 cut_misaligned_tail(dst, field_byte_length - 1, field->bit_length);
579
580 goto out;
581 }
582
583 // Slow case
585
586out:
588 return ret;
589}
void uacpi_memcpy_zerout(void *dst, const void *src, uacpi_size dst_size, uacpi_size src_size)
Definition: stdlib.c:112
bool uacpi_bool
Definition: types.h:31
@ UACPI_REGION_OP_READ
Definition: types.h:380
static uacpi_status access_field_unit(uacpi_field_unit *field, uacpi_u32 offset, uacpi_region_op op, union uacpi_opregion_io_data data)
Definition: io.c:246
static uacpi_status do_read_misaligned_field_unit(uacpi_field_unit *field, uacpi_u8 *dst, uacpi_size size)
Definition: io.c:476
static uacpi_status lock_field_unit_transaction(uacpi_field_unit *field)
Definition: io.c:211
static void unlock_field_unit_transaction(uacpi_field_unit *field)
Definition: io.c:230
static uacpi_status handle_special_field(uacpi_field_unit *field, uacpi_data_view buf, uacpi_region_op op, uacpi_data_view *wtr_response, uacpi_bool *did_handle)
Definition: io.c:378
GLsizeiptr size
Definition: glext.h:5919
uacpi_size length
Definition: types.h:105
void * data
Definition: types.h:102
uacpi_u64 * integer
Definition: opregion.h:47

Referenced by access_field_unit(), handle_field_read(), and handle_inc_dec().

◆ uacpi_round_up_bits_to_bytes()

uacpi_size uacpi_round_up_bits_to_bytes ( uacpi_size  bit_length)

Definition at line 11 of file io.c.

12{
13 return UACPI_ALIGN_UP(bit_length, 8, uacpi_size) / 8;
14}
#define UACPI_ALIGN_UP(x, val, type)
Definition: stdlib.h:106

Referenced by do_misaligned_buffer_read(), field_byte_size(), uacpi_read_buffer_field(), uacpi_read_field_unit(), and uacpi_write_buffer_field().

◆ uacpi_system_io_read()

uacpi_status uacpi_system_io_read ( uacpi_handle  handle,
uacpi_size  offset,
uacpi_u8  width,
uacpi_u64 out 
)

Definition at line 1126 of file io.c.

1129{
1131 union integer_data data = {
1132 .qword = 0,
1133 };
1134
1135 switch (width) {
1136 case 1:
1138 break;
1139 case 2:
1141 break;
1142 case 4:
1144 break;
1145 default:
1147 "invalid SystemIO read %p@%zu width=%d",
1149 );
1151 }
1152
1154 *out = data.qword;
1155 return ret;
1156}
uacpi_status uacpi_kernel_io_read32(uacpi_handle, uacpi_size offset, uacpi_u32 *out_value)
Definition: uacpiosl.c:313
uacpi_status uacpi_kernel_io_read8(uacpi_handle, uacpi_size offset, uacpi_u8 *out_value)
Definition: uacpiosl.c:299
uacpi_status uacpi_kernel_io_read16(uacpi_handle, uacpi_size offset, uacpi_u16 *out_value)
Definition: uacpiosl.c:306

Referenced by io_region_do_rw(), and uacpi_map_gas_noalloc().

◆ uacpi_system_io_write()

uacpi_status uacpi_system_io_write ( uacpi_handle  handle,
uacpi_size  offset,
uacpi_u8  width,
uacpi_u64  in 
)

Definition at line 1158 of file io.c.

1161{
1163
1164 switch (width) {
1165 case 1:
1167 break;
1168 case 2:
1170 break;
1171 case 4:
1173 break;
1174 default:
1176 "invalid SystemIO write %p@%zu width=%d",
1178 );
1180 }
1181
1182 return ret;
1183}
uacpi_status uacpi_kernel_io_write8(uacpi_handle, uacpi_size offset, uacpi_u8 in_value)
Definition: uacpiosl.c:320
uacpi_status uacpi_kernel_io_write32(uacpi_handle, uacpi_size offset, uacpi_u32 in_value)
Definition: uacpiosl.c:334
uacpi_status uacpi_kernel_io_write16(uacpi_handle, uacpi_size offset, uacpi_u16 in_value)
Definition: uacpiosl.c:327

Referenced by io_region_do_rw(), and uacpi_map_gas_noalloc().

◆ uacpi_system_memory_read()

uacpi_status uacpi_system_memory_read ( void ptr,
uacpi_size  offset,
uacpi_u8  width,
uacpi_u64 out 
)

Definition at line 1067 of file io.c.

1070{
1072
1073 switch (width) {
1074 case 1:
1076 break;
1077 case 2:
1079 break;
1080 case 4:
1082 break;
1083 case 8:
1085 break;
1086 default:
1088 }
1089
1090 return UACPI_STATUS_OK;
1091}
#define uacpi_mmio_read8
Definition: io.h:77
#define uacpi_mmio_read16
Definition: io.h:78
#define uacpi_mmio_read64
Definition: io.h:80
#define uacpi_mmio_read32
Definition: io.h:79
#define UACPI_PTR_ADD(ptr, value)
Definition: utilities.h:23

Referenced by memory_region_do_rw(), table_data_region_do_rw(), and uacpi_map_gas_noalloc().

◆ uacpi_system_memory_write()

uacpi_status uacpi_system_memory_write ( void ptr,
uacpi_size  offset,
uacpi_u8  width,
uacpi_u64  in 
)

Definition at line 1093 of file io.c.

1096{
1098
1099 switch (width) {
1100 case 1:
1102 break;
1103 case 2:
1105 break;
1106 case 4:
1108 break;
1109 case 8:
1111 break;
1112 default:
1114 }
1115
1116 return UACPI_STATUS_OK;
1117}
#define uacpi_mmio_write16
Definition: io.h:83
#define uacpi_mmio_write64
Definition: io.h:85
#define uacpi_mmio_write32
Definition: io.h:84
#define uacpi_mmio_write8
Definition: io.h:82

Referenced by memory_region_do_rw(), table_data_region_do_rw(), and uacpi_map_gas_noalloc().

◆ uacpi_unmap_gas_nofree()

void uacpi_unmap_gas_nofree ( uacpi_mapped_gas gas)

Definition at line 984 of file io.c.

985{
986 gas->unmap(gas->mapping, gas->access_bit_width / 8);
987}

Referenced by uacpi_deinitialize_registers(), uacpi_gas_read(), uacpi_gas_write(), uacpi_unmap_gas(), and uninstall_gpe_block().

◆ uacpi_write_buffer_field()

void uacpi_write_buffer_field ( uacpi_buffer_field field,
const void src,
uacpi_size  size 
)

Definition at line 148 of file io.c.

152{
153 if (!(field->bit_index & 7)) {
154 uacpi_u8 *dst, last_byte, tail_shift;
156
157 dst = field->backing->data;
158 dst += field->bit_index / 8;
160
161 last_byte = dst[count - 1];
162 tail_shift = field->bit_length & 7;
163
165 if (tail_shift) {
166 uacpi_u8 last_shift = 8 - tail_shift;
167 dst[count - 1] = dst[count - 1] << last_shift;
168 dst[count - 1] >>= last_shift;
169 dst[count - 1] |= (last_byte >> tail_shift) << tail_shift;
170 }
171
172 return;
173 }
174
176}
static void do_write_misaligned_buffer_field(uacpi_buffer_field *field, const void *src, uacpi_size size)
Definition: io.c:130

Referenced by object_assign_with_implicit_cast().

◆ uacpi_write_field_unit()

uacpi_status uacpi_write_field_unit ( uacpi_field_unit field,
const void src,
uacpi_size  size,
uacpi_data_view wtr_response 
)

Definition at line 662 of file io.c.

666{
668 uacpi_bool did_handle;
669 uacpi_data_view data_view = { 0 };
670
671 data_view.const_data = src;
672 data_view.length = size;
673
676 return ret;
677
679 field, data_view, UACPI_REGION_OP_WRITE,
680 wtr_response, &did_handle
681 );
682 if (did_handle)
683 goto out;
684
686
687out:
689 return ret;
690}
@ UACPI_REGION_OP_WRITE
Definition: types.h:381
static uacpi_status write_generic_field_unit(uacpi_field_unit *field, const void *src, uacpi_size size)
Definition: io.c:591
const void * const_data
Definition: types.h:103

Referenced by access_field_unit(), and object_assign_with_implicit_cast().