| QEMU<->ACPI BIOS memory hotplug interface | |
| ========================================= | |
| ACPI BIOS GPE.3 handler is dedicated for notifying OS about memory hot-add | |
| and hot-remove events. | |
| Memory hot-plug interface (IO port 0xa00-0xa17, 1-4 byte access) | |
| ---------------------------------------------------------------- | |
| Read access behavior | |
| ^^^^^^^^^^^^^^^^^^^^ | |
| [0x0-0x3] | |
| Lo part of memory device phys address | |
| [0x4-0x7] | |
| Hi part of memory device phys address | |
| [0x8-0xb] | |
| Lo part of memory device size in bytes | |
| [0xc-0xf] | |
| Hi part of memory device size in bytes | |
| [0x10-0x13] | |
| Memory device proximity domain | |
| [0x14] | |
| Memory device status fields | |
| bits: | |
| 0: | |
| Device is enabled and may be used by guest | |
| 1: | |
| Device insert event, used to distinguish device for which | |
| no device check event to OSPM was issued. | |
| It's valid only when bit 1 is set. | |
| 2: | |
| Device remove event, used to distinguish device for which | |
| no device eject request to OSPM was issued. | |
| 3-7: | |
| reserved and should be ignored by OSPM | |
| [0x15-0x17] | |
| reserved | |
| Write access behavior | |
| ^^^^^^^^^^^^^^^^^^^^^ | |
| [0x0-0x3] | |
| Memory device slot selector, selects active memory device. | |
| All following accesses to other registers in 0xa00-0xa17 | |
| region will read/store data from/to selected memory device. | |
| [0x4-0x7] | |
| OST event code reported by OSPM | |
| [0x8-0xb] | |
| OST status code reported by OSPM | |
| [0xc-0x13] | |
| reserved, writes into it are ignored | |
| [0x14] | |
| Memory device control fields | |
| bits: | |
| 0: | |
| reserved, OSPM must clear it before writing to register. | |
| Due to BUG in versions prior 2.4 that field isn't cleared | |
| when other fields are written. Keep it reserved and don't | |
| try to reuse it. | |
| 1: | |
| if set to 1 clears device insert event, set by OSPM | |
| after it has emitted device check event for the | |
| selected memory device | |
| 2: | |
| if set to 1 clears device remove event, set by OSPM | |
| after it has emitted device eject request for the | |
| selected memory device | |
| 3: | |
| if set to 1 initiates device eject, set by OSPM when it | |
| triggers memory device removal and calls _EJ0 method | |
| 4-7: | |
| reserved, OSPM must clear them before writing to register | |
| Selecting memory device slot beyond present range has no effect on platform: | |
| - write accesses to memory hot-plug registers not documented above are ignored | |
| - read accesses to memory hot-plug registers not documented above return | |
| all bits set to 1. | |
| Memory hot remove process diagram | |
| --------------------------------- | |
| :: | |
| +-------------+ +-----------------------+ +------------------+ | |
| | 1. QEMU | | 2. QEMU | |3. QEMU | | |
| | device_del +---->+ device unplug request +----->+Send SCI to guest,| | |
| | | | cb | |return control to | | |
| | | | | |management | | |
| +-------------+ +-----------------------+ +------------------+ | |
| +---------------------------------------------------------------------+ | |
| +---------------------+ +-------------------------+ | |
| | OSPM: | remove event | OSPM: | | |
| | send Eject Request, | | Scan memory devices | | |
| | clear remove event +<-------------+ for event flags | | |
| | | | | | |
| +---------------------+ +-------------------------+ | |
| | | |
| | | |
| +---------v--------+ +-----------------------+ | |
| | Guest OS: | success | OSPM: | | |
| | process Ejection +----------->+ Execute _EJ0 method, | | |
| | request | | set eject bit in flags| | |
| +------------------+ +-----------------------+ | |
| |failure | | |
| v v | |
| +------------------------+ +-----------------------+ | |
| | OSPM: | | QEMU: | | |
| | set OST event & status | | call device unplug cb | | |
| | fields | | | | |
| +------------------------+ +-----------------------+ | |
| | | | |
| v v | |
| +------------------+ +-------------------+ | |
| |QEMU: | |QEMU: | | |
| |Send OST QMP event| |Send device deleted| | |
| | | |QMP event | | |
| +------------------+ | | | |
| +-------------------+ |