ACPI_STATUS AcpiOsWritePort ( ACPI_IO_ADDRESS Address, UINT32 Value, UINT32 Width) { switch (Width) { case 8: out_b((uint16_t)Address, (uint8_t)Value); break; case 16: out_h((uint16_t)Address, (uint16_t)Value); break; case 32: out_w((uint16_t)Address, (uint32_t)Value); break; default: return (AE_BAD_PARAMETER); } return (AE_OK); }
/* * Memory block outputs (16 bit) cnt : number of half words */ EXPORT void OutMemH(UW iob, W ix, UH *buf, W cnt) { UW port = iob + (ix * IOSTEP); while (--cnt >= 0) { out_h(port, *buf++); } }
/* I/O write */ EXPORT W writeIO(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: out_w(pa, data); break; case 2: out_h(pa, data); break; default: out_b(pa, data); } return unit; }