ACPI_STATUS AcpiOsReadPort ( ACPI_IO_ADDRESS Address, UINT32 *Value, UINT32 Width) { switch (Width) { case 8: *Value = in_b((uint16_t)Address); break; case 16: *Value = in_h((uint16_t)Address); break; case 32: *Value = in_w((uint16_t)Address); break; default: return (AE_BAD_PARAMETER); } return (AE_OK); }
/* * Memory block inputs (16 bit) cnt : number of half words */ EXPORT void InMemH(UW iob, W ix, UH *buf, W cnt) { UW port = iob + (ix * IOSTEP); while (--cnt >= 0) { *buf++ = in_h(port); } }
/* I/O read */ EXPORT W readIO(UW addr, UW *data, W unit) { W n; UW pa; /* address misalignment is reported as error */ if (addr & (unit - 1)) return 0; /* I/O address check & conversion to physical address */ n = chkIOAddr(addr, &pa, unit); if (n < unit) return 0; switch(unit) { case 4: *data = in_w(pa); break; case 2: *data = in_h(pa); break; default: *data = in_b(pa); } return unit; }