aboutsummaryrefslogtreecommitdiff
path: root/docs/specs/acpi_mem_hotplug.txt
blob: dcc480891862eb26f264ea5ffa77298fe00020cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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):
---------------------------------------------------------------
0xa00:
  read access:
      [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-7: reserved and should be ignored by OSPM
      [0x15-0x17] reserved

  write access:
      [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
              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-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          |                     
 +------------------+              |                   |                     
                                   +-------------------+