+extern "C" kern_return_t
+IOCPURunPlatformHaltRestartActions(uint32_t message)
+{
+ kern_return_t ret;
+ IORegistryIterator * iter;
+ OSOrderedSet * all;
+ IOService * service;
+
+ if (!gIOHaltRestartActionQueue.next)
+ {
+ queue_init(&gIOHaltRestartActionQueue);
+ iter = IORegistryIterator::iterateOver(gIOServicePlane,
+ kIORegistryIterateRecursively);
+ if (iter)
+ {
+ all = 0;
+ do
+ {
+ if (all) all->release();
+ all = iter->iterateAll();
+ }
+ while (!iter->isValid());
+ iter->release();
+ if (all)
+ {
+ while((service = (IOService *) all->getFirstObject()))
+ {
+ IOInstallServicePlatformAction(service, gIOPlatformHaltRestartActionKey, &gIOHaltRestartActionQueue, false);
+ all->removeObject(service);
+ }
+ all->release();
+ }
+ }
+ }
+ ret = iocpu_run_platform_actions(&gIOHaltRestartActionQueue, 0, 0U-1,
+ (void *)(uintptr_t) message, NULL, NULL);
+ return (ret);
+}
+