systemd: Add syncronization points for OpenBMC

Add systemd syncronization targets to facilitate expressing
ordering dependencies.

Change-Id: I11d4fb2b8ade8d3ae74ddea44585153e2f59130f
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets.bb b/meta-phosphor/common/recipes-core/systemd/obmc-targets.bb
new file mode 100644
index 0000000..a75e989
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Phosphor Systemd targets"
+DESCRIPTION = "Provides well known Systemd syncronization points for OpenBMC."
+HOMEPAGE = "http://github.com/openbmc"
+PR = "r1"
+
+inherit obmc-phosphor-systemd
+inherit obmc-phosphor-license
+inherit allarch
+
+CHASSIS_TARGETS = "start stop"
+POWER_TARGETS = "start-pre start on stop-pre stop off"
+HOST_TARGETS = "start-pre start started stop-pre stop stopped"
+
+CHASSIS_FMT = "obmc-chassis-{0}@.target"
+POWER_FMT = "obmc-power-{0}@.target"
+HOST_FMT = "obmc-host-{0}@.target"
+
+CHASSIS_LINK_FMT = "${CHASSIS_FMT}:obmc-chassis-{0}@{1}.target"
+POWER_LINK_FMT = "${POWER_FMT}:obmc-power-{0}@{1}.target"
+HOST_LINK_FMT = "${HOST_FMT}:obmc-host-{0}@{1}.target"
+
+SYSTEMD_SERVICE_${PN} += " \
+        obmc-mapper.target \
+        obmc-fans-ready.target \
+        obmc-fan-control.target \
+        obmc-standby.target \
+        "
+
+SYSTEMD_SERVICE_${PN} += "${@compose_list(d, 'CHASSIS_FMT', 'CHASSIS_TARGETS')}"
+SYSTEMD_SERVICE_${PN} += "${@compose_list(d, 'POWER_FMT', 'POWER_TARGETS')}"
+SYSTEMD_SERVICE_${PN} += "${@compose_list(d, 'HOST_FMT', 'HOST_TARGETS')}"
+
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'CHASSIS_LINK_FMT', 'CHASSIS_TARGETS', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'POWER_LINK_FMT', 'POWER_TARGETS', 'OBMC_POWER_INSTANCES')}"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'HOST_LINK_FMT', 'HOST_TARGETS', 'OBMC_HOST_INSTANCES')}"
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-chassis-start@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-chassis-start@.target
new file mode 100644
index 0000000..c8eda8a
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-chassis-start@.target
@@ -0,0 +1,8 @@
+[Unit]
+Description=Chassis%i (Start)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-org-openbmc-control-chassis%i.service
+After=mapper-wait@-org-openbmc-control-chassis%i.service
+Conflicts=obmc-chassis-stop@%i.target
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-chassis-stop@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-chassis-stop@.target
new file mode 100644
index 0000000..aeac3d6
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-chassis-stop@.target
@@ -0,0 +1,8 @@
+[Unit]
+Description=Chassis%i (Stop)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Wants=mapper-wait@-org-openbmc-control-chassis%i.service
+After=mapper-wait@-org-openbmc-control-chassis%i.service
+Conflicts=obmc-chassis-start@%i.target
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-fan-control.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-fan-control.target
new file mode 100644
index 0000000..50665db
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-fan-control.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Fan Control
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-fans-ready.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-fans-ready.target
new file mode 100644
index 0000000..59e61c6
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-fans-ready.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Fans Ready
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-start-pre@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-start-pre@.target
new file mode 100644
index 0000000..d555d0a
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-start-pre@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Start Host%i (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-start@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-start@.target
new file mode 100644
index 0000000..5d309d2
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-start@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Start Host%i
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-host-start-pre@%i.target
+Conflicts=obmc-chassis-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-started@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-started@.target
new file mode 100644
index 0000000..fcae6e9
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-started@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Host%i (Started)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-host-start@%i.target
+Conflicts=obmc-chassis-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stop-pre@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stop-pre@.target
new file mode 100644
index 0000000..a979250
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stop-pre@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Stop Host%i (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-start@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stop@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stop@.target
new file mode 100644
index 0000000..c573e9c
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stop@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Stop Host%i
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-host-stop-pre@%i.target
+Conflicts=obmc-chassis-start@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stopped@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stopped@.target
new file mode 100644
index 0000000..92afdf0
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-host-stopped@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Host%i (Stopped)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-host-stop@%i.target
+Conflicts=obmc-chassis-start@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-mapper.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-mapper.target
new file mode 100644
index 0000000..5e52f4c
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-mapper.target
@@ -0,0 +1,4 @@
+[Unit]
+Description=Phosphor Object Mapper
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-off@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-off@.target
new file mode 100644
index 0000000..bd4f8c9
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-off@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i (Off)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-power-stop@%i.target
+Conflicts=obmc-chassis-start@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-on@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-on@.target
new file mode 100644
index 0000000..c891173
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-on@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i (On)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After=obmc-power-start@%i.target
+Conflicts=obmc-chassis-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-start-pre@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-start-pre@.target
new file mode 100644
index 0000000..2891e79
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-start-pre@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i On (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-start@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-start@.target
new file mode 100644
index 0000000..d23c5e9
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-start@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i On
+After=obmc-power-start-pre@%i.target
+Wants={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-stop@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-stop-pre@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-stop-pre@.target
new file mode 100644
index 0000000..db625b3
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-stop-pre@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i Off (Pre)
+Wants={SYSTEMD_DEFAULT_TARGET}
+After={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-start@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-stop@.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-stop@.target
new file mode 100644
index 0000000..d7dd125
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-power-stop@.target
@@ -0,0 +1,7 @@
+[Unit]
+Description=Power%i Off
+After=obmc-power-stop-pre@%i.target
+Wants={SYSTEMD_DEFAULT_TARGET}
+Conflicts=obmc-chassis-start@%i.target
+RefuseManualStart=yes
+RefuseManualStop=yes
diff --git a/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-standby.target b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-standby.target
new file mode 100644
index 0000000..95044a4
--- /dev/null
+++ b/meta-phosphor/common/recipes-core/systemd/obmc-targets/obmc-standby.target
@@ -0,0 +1,9 @@
+[Unit]
+Description=Phosphor System - Standby
+Requires=multi-user.target
+RefuseManualStart=yes
+RefuseManualStop=yes
+AllowIsolate=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd/obmc-standby.target b/meta-phosphor/common/recipes-core/systemd/systemd/obmc-standby.target
deleted file mode 100644
index d8cd72f..0000000
--- a/meta-phosphor/common/recipes-core/systemd/systemd/obmc-standby.target
+++ /dev/null
@@ -1,2 +0,0 @@
-[Unit]
-Description=OpenBMC System
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
index 0fd2931..54ea26a 100644
--- a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
+++ b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
@@ -2,19 +2,15 @@
 PACKAGECONFIG_remove = "machined hibernate ldconfig binfmt backlight quotacheck localed kdbus ima smack polkit"
 FILESEXTRAPATHS_append := "${THISDIR}/${PN}:"
 SRC_URI += "file://default.network"
-SRC_URI += "file://obmc-standby.target"
 SRC_URI += "file://0001-Export-message_append_cmdline.patch"
 
+RRECOMMENDS_${PN} += "obmc-targets"
 FILES_${PN} += "${libdir}/systemd/network/default.network"
-FILES_${PN} += "${systemd_system_unitdir}/obmc-standby.target"
 
 EXTRA_OECONF += " --disable-hwdb"
 
 do_install_append() {
         install -m 644 ${WORKDIR}/default.network ${D}${libdir}/systemd/network/
-        install -m 644 ${WORKDIR}/obmc-standby.target ${D}${systemd_system_unitdir}
-        ln -sf ../obmc-standby.target \
-                ${D}${systemd_system_unitdir}/multi-user.target.wants/obmc-standby.target
 
         #TODO Remove after this issue is resolved
         #https://github.com/openbmc/openbmc/issues/152
diff --git a/meta-phosphor/common/recipes-phosphor/dbus/obmc-mapper/org.openbmc.ObjectMapper.service b/meta-phosphor/common/recipes-phosphor/dbus/obmc-mapper/org.openbmc.ObjectMapper.service
index ff863ea..b397e2f 100644
--- a/meta-phosphor/common/recipes-phosphor/dbus/obmc-mapper/org.openbmc.ObjectMapper.service
+++ b/meta-phosphor/common/recipes-phosphor/dbus/obmc-mapper/org.openbmc.ObjectMapper.service
@@ -1,5 +1,6 @@
 [Unit]
 Description=Phosphor OpenBMC DBus service management daemon
+Before=obmc-mapper.target
 
 [Service]
 Restart=always