From ACPI Spec 4.0 page 299, there is some sample code to show how to put the machine into S3 sleep. I just wondering what are the last instructions to cause the hardware to sleep? What happens after following code, and why?
mov edx, PM1a_SLP_TYP ; get address for PM1a_SLP_TYP
out dx, ax ; start h/w sequencing
mov edx, PM1b_SLP_TYP ; get address for PM1b_SLP_TYP
out dx, ax ; start h/w sequencing
Essentially, there's some hardware on the system at those two locations (PM1a_SLP_TYP and PM1b_SLP_TYP).
The 'mov' instructions specify the ports for the sleep function in the hardware, and the out dx, ax sends the instructions to the ports.
Now you don't say here was the value of AX is. Odds are that value changes for the different sleep types.
But, simply put, these instructions are sending the sleep commands to the power management hardware to perform the function.