summaryrefslogtreecommitdiff
path: root/usr/src/psm/promif
diff options
context:
space:
mode:
authorsetje <none@none>2007-12-07 16:04:33 -0800
committersetje <none@none>2007-12-07 16:04:33 -0800
commit986fd29a0dc13f7608ef7f508f6e700bd7bc2720 (patch)
tree8612567367832542a32a2c8bbf3b9b7ef7639ab7 /usr/src/psm/promif
parentf3b585ce799a83688c5532c430f6133f098431c2 (diff)
downloadillumos-joyent-986fd29a0dc13f7608ef7f508f6e700bd7bc2720.tar.gz
6521412 PSARC 2006/525: new boot sparc
6451467 bootadm update-archive does the wrong thing if interrupted 6477079 ability to pick up post bfu binaries from bfu PATH conflicts with sane scripting --HG-- rename : usr/src/psm/stand/boot/sparc/common/boot.c => deleted_files/usr/src/psm/stand/boot/sparc/common/boot.c rename : usr/src/psm/stand/boot/sparc/common/boot_services.c => deleted_files/usr/src/psm/stand/boot/sparc/common/boot_services.c rename : usr/src/psm/stand/boot/sparc/common/hsfsconf.c => deleted_files/usr/src/psm/stand/boot/sparc/common/hsfsconf.c rename : usr/src/psm/stand/boot/sparc/common/ufsconf.c => deleted_files/usr/src/psm/stand/boot/sparc/common/ufsconf.c rename : usr/src/psm/stand/bootblks/Makefile.obp => deleted_files/usr/src/psm/stand/bootblks/Makefile.obp rename : usr/src/psm/stand/bootblks/hsfs/common/Makefile.com => deleted_files/usr/src/psm/stand/bootblks/hsfs/common/Makefile.com rename : usr/src/psm/stand/bootblks/hsfs/common/boot_obp.fth => deleted_files/usr/src/psm/stand/bootblks/hsfs/common/boot_obp.fth rename : usr/src/psm/stand/bootblks/hsfs/common/hsfs.c => deleted_files/usr/src/psm/stand/bootblks/hsfs/common/hsfs.c rename : usr/src/psm/stand/bootblks/hsfs/common/hsfs_sig.h => deleted_files/usr/src/psm/stand/bootblks/hsfs/common/hsfs_sig.h rename : usr/src/psm/stand/bootblks/hsfs/common/hsfs_small.c => deleted_files/usr/src/psm/stand/bootblks/hsfs/common/hsfs_small.c rename : usr/src/psm/stand/bootblks/hsfs/common/iob.h => deleted_files/usr/src/psm/stand/bootblks/hsfs/common/iob.h rename : usr/src/psm/stand/bootblks/hsfs/sparc/unix/Makefile => deleted_files/usr/src/psm/stand/bootblks/hsfs/sparc/unix/Makefile rename : usr/src/psm/stand/bootblks/obp-c/Makefile.rules => deleted_files/usr/src/psm/stand/bootblks/obp-c/Makefile.rules rename : usr/src/psm/stand/bootblks/obp-c/Makefile.targ => deleted_files/usr/src/psm/stand/bootblks/obp-c/Makefile.targ rename : usr/src/psm/stand/bootblks/obp-c/common/cbootblk.h => deleted_files/usr/src/psm/stand/bootblks/obp-c/common/cbootblk.h rename : usr/src/psm/stand/bootblks/obp-c/common/makevers.sh => deleted_files/usr/src/psm/stand/bootblks/obp-c/common/makevers.sh rename : usr/src/psm/stand/bootblks/obp-c/common/mkboot.c => deleted_files/usr/src/psm/stand/bootblks/obp-c/common/mkboot.c rename : usr/src/psm/stand/bootblks/obp-c/common/romp.h => deleted_files/usr/src/psm/stand/bootblks/obp-c/common/romp.h rename : usr/src/psm/stand/bootblks/obp-c/common/stub.c => deleted_files/usr/src/psm/stand/bootblks/obp-c/common/stub.c rename : usr/src/psm/stand/bootblks/obp-c/common/unix_devio.c => deleted_files/usr/src/psm/stand/bootblks/obp-c/common/unix_devio.c rename : usr/src/psm/stand/bootblks/obp-c/sparc/common/mapfile => deleted_files/usr/src/psm/stand/bootblks/obp-c/sparc/common/mapfile rename : usr/src/psm/stand/bootblks/obp-c/sparc/common/obp_srt0.s => deleted_files/usr/src/psm/stand/bootblks/obp-c/sparc/common/obp_srt0.s rename : usr/src/psm/stand/bootblks/ufs/common/Makefile.com => deleted_files/usr/src/psm/stand/bootblks/ufs/common/Makefile.com rename : usr/src/psm/stand/bootblks/ufs/common/boot_1275.fth => deleted_files/usr/src/psm/stand/bootblks/ufs/common/boot_1275.fth rename : usr/src/psm/stand/bootblks/ufs/common/boot_obp.fth => deleted_files/usr/src/psm/stand/bootblks/ufs/common/boot_obp.fth rename : usr/src/psm/stand/bootblks/ufs/common/iob.h => deleted_files/usr/src/psm/stand/bootblks/ufs/common/iob.h rename : usr/src/psm/stand/bootblks/ufs/common/ufs.c => deleted_files/usr/src/psm/stand/bootblks/ufs/common/ufs.c rename : usr/src/psm/stand/bootblks/ufs/sparc/sun4c/Makefile => deleted_files/usr/src/psm/stand/bootblks/ufs/sparc/sun4c/Makefile rename : usr/src/psm/stand/bootblks/ufs/sparc/sun4d/Makefile => deleted_files/usr/src/psm/stand/bootblks/ufs/sparc/sun4d/Makefile rename : usr/src/psm/stand/bootblks/ufs/sparc/sun4m/Makefile => deleted_files/usr/src/psm/stand/bootblks/ufs/sparc/sun4m/Makefile rename : usr/src/psm/stand/bootblks/ufs/sparc/unix/Makefile => deleted_files/usr/src/psm/stand/bootblks/ufs/sparc/unix/Makefile rename : usr/src/uts/sparc/krtld/Makefile => deleted_files/usr/src/uts/sparc/krtld/Makefile rename : usr/src/uts/sparc/krtld/kobj_alloc.c => deleted_files/usr/src/uts/sparc/krtld/kobj_alloc.c rename : usr/src/uts/sparc/krtld/kobj_boot.c => deleted_files/usr/src/uts/sparc/krtld/kobj_boot.c rename : usr/src/uts/sparc/krtld/kobj_crt.s => deleted_files/usr/src/uts/sparc/krtld/kobj_crt.s rename : usr/src/cmd/boot/bootadm/filelist.ramdisk => usr/src/cmd/boot/filelist/i386/filelist.ramdisk rename : usr/src/cmd/boot/bootadm/filelist.safe => usr/src/cmd/boot/filelist/i386/filelist.safe
Diffstat (limited to 'usr/src/psm/promif')
-rw-r--r--usr/src/psm/promif/ieee1275/sun4/prom_fio.c219
-rw-r--r--usr/src/psm/promif/ieee1275/sun4/prom_init.c13
-rw-r--r--usr/src/psm/promif/ieee1275/sun4/prom_mem.c53
-rw-r--r--usr/src/psm/promif/ieee1275/sun4u/Makefile.files6
-rw-r--r--usr/src/psm/promif/ieee1275/sun4u/prom_mmu.c39
-rw-r--r--usr/src/psm/promif/ieee1275/sun4v/Makefile.files6
6 files changed, 309 insertions, 27 deletions
diff --git a/usr/src/psm/promif/ieee1275/sun4/prom_fio.c b/usr/src/psm/promif/ieee1275/sun4/prom_fio.c
new file mode 100644
index 0000000000..3909b21170
--- /dev/null
+++ b/usr/src/psm/promif/ieee1275/sun4/prom_fio.c
@@ -0,0 +1,219 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <sys/promif.h>
+#include <sys/promimpl.h>
+
+int
+prom_fopen(ihandle_t fsih, char *path)
+{
+ cell_t ci[10];
+ size_t len;
+
+#ifdef PROM_32BIT_ADDRS
+ char *opath = NULL;
+
+ if ((uintptr_t)path > (uint32_t)-1) {
+ opath = path;
+ len = prom_strlen(opath) + 1; /* include terminating NUL */
+ path = promplat_alloc(len);
+ if (path == NULL)
+ return (0);
+ (void) prom_strcpy(path, opath);
+ }
+#endif
+ len = prom_strlen(path);
+
+ promif_preprom();
+ ci[0] = p1275_ptr2cell("call-method"); /* Service name */
+ ci[1] = (cell_t)4; /* #argument cells */
+ ci[2] = (cell_t)3; /* #result cells */
+ ci[3] = p1275_ptr2cell("open-file"); /* Arg1: Method name */
+ ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
+ ci[5] = p1275_uint2cell(len); /* Arg3: Len */
+ ci[6] = p1275_ptr2cell(path); /* Arg4: Pathname */
+
+ (void) p1275_cif_handler(&ci);
+
+ promif_postprom();
+
+#ifdef PROM_32BIT_ADDRS
+ if (opath != NULL)
+ promplat_free(path, len + 1);
+#endif
+
+ if (ci[7] != 0) /* Catch result */
+ return (-1);
+
+ if (ci[8] == 0) /* Res1: failed */
+ return (-1);
+
+ return (p1275_cell2int(ci[9])); /* Res2: fd */
+}
+
+
+int
+prom_fseek(ihandle_t fsih, int fd, unsigned long long offset)
+{
+ cell_t ci[10];
+
+ ci[0] = p1275_ptr2cell("call-method"); /* Service name */
+ ci[1] = (cell_t)4; /* #argument cells */
+ ci[2] = (cell_t)3; /* #result cells */
+ ci[3] = p1275_ptr2cell("seek-file"); /* Arg1: Method name */
+ ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
+ ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
+ ci[6] = p1275_ull2cell_low(offset); /* Arg4: Offset */
+
+ promif_preprom();
+ (void) p1275_cif_handler(&ci);
+ promif_postprom();
+
+ if (ci[7] != 0) /* Catch result */
+ return (-1);
+
+ if (ci[8] == 0) /* Res1: failed */
+ return (-1);
+
+ return (p1275_cell2int(ci[9])); /* Res2: off */
+}
+
+
+int
+prom_fread(ihandle_t fsih, int fd, caddr_t buf, size_t len)
+{
+ cell_t ci[10];
+#ifdef PROM_32BIT_ADDRS
+ caddr_t obuf = NULL;
+
+ if ((uintptr_t)buf > (uint32_t)-1) {
+ obuf = buf;
+ buf = promplat_alloc(len);
+ if (buf == NULL)
+ return (-1);
+ }
+#endif
+
+ promif_preprom();
+
+ ci[0] = p1275_ptr2cell("call-method"); /* Service name */
+ ci[1] = (cell_t)5; /* #argument cells */
+ ci[2] = (cell_t)2; /* #result cells */
+ ci[3] = p1275_ptr2cell("read-file"); /* Arg1: Method name */
+ ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
+ ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
+ ci[6] = p1275_uint2cell(len); /* Arg4: buffer length */
+ ci[7] = p1275_ptr2cell(buf); /* Arg5: buffer address */
+
+ (void) p1275_cif_handler(&ci);
+
+ promif_postprom();
+
+#ifdef PROM_32BIT_ADDRS
+ if (obuf != NULL) {
+ promplat_bcopy(buf, obuf, len);
+ promplat_free(buf, len);
+ }
+#endif
+
+ if (ci[8] != 0) /* Catch result */
+ return (-1);
+
+ return (p1275_cell2int(ci[9])); /* Res2: actual length */
+}
+
+int
+prom_fsize(ihandle_t fsih, int fd, size_t *size)
+{
+ cell_t ci[8];
+
+ promif_preprom();
+
+ ci[0] = p1275_ptr2cell("call-method"); /* Service name */
+ ci[1] = (cell_t)3; /* #argument cells */
+ ci[2] = (cell_t)2; /* #result cells */
+ ci[3] = p1275_ptr2cell("size-file"); /* Arg1: Method name */
+ ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
+ ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
+
+ (void) p1275_cif_handler(&ci);
+
+ promif_postprom();
+
+ if (ci[6] != 0) /* Catch result */
+ return (-1);
+
+ *size = p1275_cell2uint(ci[7]); /* Res2: size */
+ return (0);
+}
+
+
+int
+prom_compinfo(ihandle_t fsih, int fd, int *iscmp, size_t *fsize, size_t *bsize)
+{
+ cell_t ci[10];
+
+ promif_preprom();
+
+ ci[0] = p1275_ptr2cell("call-method"); /* Service name */
+ ci[1] = (cell_t)3; /* #argument cells */
+ ci[2] = (cell_t)4; /* #result cells */
+ ci[3] = p1275_ptr2cell("cinfo-file"); /* Arg1: Method name */
+ ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
+ ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
+
+ (void) p1275_cif_handler(&ci);
+
+ promif_postprom();
+
+ if (ci[6] != 0) /* Catch result */
+ return (-1);
+
+ *iscmp = p1275_cell2int(ci[7]); /* Res2: iscmp */
+ *fsize = p1275_cell2uint(ci[8]); /* Res3: fsize */
+ *bsize = p1275_cell2uint(ci[9]); /* Res4: bsize */
+ return (0);
+}
+
+void
+prom_fclose(ihandle_t fsih, int fd)
+{
+ cell_t ci[7];
+
+ ci[0] = p1275_ptr2cell("call-method"); /* Service name */
+ ci[1] = (cell_t)3; /* #argument cells */
+ ci[2] = (cell_t)1; /* #result cells */
+ ci[3] = p1275_ptr2cell("close-file"); /* Arg1: Method name */
+ ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
+ ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
+
+ promif_preprom();
+ (void) p1275_cif_handler(&ci);
+ promif_postprom();
+
+}
diff --git a/usr/src/psm/promif/ieee1275/sun4/prom_init.c b/usr/src/psm/promif/ieee1275/sun4/prom_init.c
index 66779087c9..8ca6d3742f 100644
--- a/usr/src/psm/promif/ieee1275/sun4/prom_init.c
+++ b/usr/src/psm/promif/ieee1275/sun4/prom_init.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 1994, 2001-2003 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -107,12 +106,6 @@ prom_init(char *pgmname, void *p1275cookie)
*/
(void) prom_set_preprom(default_prepost_prom);
(void) prom_set_postprom(default_prepost_prom);
-
- if (&plat_setprop_enter != NULL) {
- prom_setprop_enter = &plat_setprop_enter;
- prom_setprop_exit = &plat_setprop_exit;
- ASSERT(prom_setprop_exit != NULL);
- }
}
/*
diff --git a/usr/src/psm/promif/ieee1275/sun4/prom_mem.c b/usr/src/psm/promif/ieee1275/sun4/prom_mem.c
index 6983d1e09a..ada9a7fad2 100644
--- a/usr/src/psm/promif/ieee1275/sun4/prom_mem.c
+++ b/usr/src/psm/promif/ieee1275/sun4/prom_mem.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,8 +19,8 @@
* CDDL HEADER END
*/
/*
- * Copyright (c) 1991-1994, by Sun Microsystems, Inc.
- * All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -62,7 +61,7 @@ prom_memory_ihandle(void)
* and a single size cell in the "memory" node.
*/
int
-prom_allocate_phys(size_t size, u_int align, unsigned long long *physaddr)
+prom_allocate_phys(size_t size, uint_t align, unsigned long long *physaddr)
{
cell_t ci[10];
int rv;
@@ -72,7 +71,7 @@ prom_allocate_phys(size_t size, u_int align, unsigned long long *physaddr)
return (-1);
if (align == 0)
- align = (u_int)1;
+ align = (uint_t)1;
ci[0] = p1275_ptr2cell("call-method"); /* Service name */
ci[1] = (cell_t)4; /* #argument cells */
@@ -162,3 +161,43 @@ prom_free_phys(size_t size, unsigned long long physaddr)
(void) p1275_cif_handler(&ci);
promif_postprom();
}
+
+static pnode_t
+prom_mem_phandle(void)
+{
+ static pnode_t pmem = 0;
+
+ if (pmem == (pnode_t)0) {
+ ihandle_t ih;
+
+ if ((ih = prom_memory_ihandle()) == (ihandle_t)-1)
+ prom_panic("Can't get memory ihandle");
+ pmem = prom_getphandle(ih);
+ }
+ return (pmem);
+}
+
+
+int
+prom_phys_installed_len(void)
+{
+ return (prom_getproplen(prom_mem_phandle(), "reg"));
+}
+
+int
+prom_phys_avail_len(void)
+{
+ return (prom_getproplen(prom_mem_phandle(), "available"));
+}
+
+int
+prom_phys_installed(caddr_t prop)
+{
+ return (prom_getprop(prom_mem_phandle(), "reg", prop));
+}
+
+int
+prom_phys_avail(caddr_t prop)
+{
+ return (prom_getprop(prom_mem_phandle(), "available", prop));
+}
diff --git a/usr/src/psm/promif/ieee1275/sun4u/Makefile.files b/usr/src/psm/promif/ieee1275/sun4u/Makefile.files
index 6808bc6499..40f83a581e 100644
--- a/usr/src/psm/promif/ieee1275/sun4u/Makefile.files
+++ b/usr/src/psm/promif/ieee1275/sun4u/Makefile.files
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -31,15 +31,17 @@
#
#
-# Note that the kernel doesn't use/need prom_map.o and prom_alloc.o
+# Note that the kernel doesn't use/need prom_map.o
#
#
# PROM Platform-dependent routines
#
CORE_OBJS += \
+ prom_alloc.o \
prom_cpuctl.o \
prom_efcode.o \
+ prom_fio.o \
prom_getunum.o \
prom_heartbeat.o \
prom_idprom.o \
diff --git a/usr/src/psm/promif/ieee1275/sun4u/prom_mmu.c b/usr/src/psm/promif/ieee1275/sun4u/prom_mmu.c
index c5556dc756..a9cfe6662e 100644
--- a/usr/src/psm/promif/ieee1275/sun4u/prom_mmu.c
+++ b/usr/src/psm/promif/ieee1275/sun4u/prom_mmu.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,8 +19,8 @@
* CDDL HEADER END
*/
/*
- * Copyright (c) 1991-1994, by Sun Microsystems, Inc.
- * All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -105,7 +104,7 @@ prom_unmap_phys(size_t size, caddr_t virt)
* Allocate aligned or unaligned virtual address space, unmapped.
*/
caddr_t
-prom_allocate_virt(u_int align, size_t size)
+prom_allocate_virt(uint_t align, size_t size)
{
cell_t ci[9];
int rv;
@@ -219,6 +218,34 @@ prom_unmap_virt(size_t size, caddr_t virt)
promif_postprom();
}
+static pnode_t
+prom_mmu_phandle(void)
+{
+ static pnode_t pmmu = 0;
+
+ if (pmmu == (pnode_t)0) {
+ ihandle_t ih;
+
+ if ((ih = prom_mmu_ihandle()) == (ihandle_t)-1)
+ prom_panic("Can't get mmu ihandle");
+ pmmu = prom_getphandle(ih);
+ }
+ return (pmmu);
+}
+
+
+int
+prom_virt_avail_len(void)
+{
+ return (prom_getproplen(prom_mmu_phandle(), "available"));
+}
+
+int
+prom_virt_avail(caddr_t prop)
+{
+ return (prom_getprop(prom_mmu_phandle(), "available", prop));
+}
+
/*
* Translate virtual address to physical address.
* Returns 0: Success; Non-zero: failure.
diff --git a/usr/src/psm/promif/ieee1275/sun4v/Makefile.files b/usr/src/psm/promif/ieee1275/sun4v/Makefile.files
index 2914265a0c..0cb087efa2 100644
--- a/usr/src/psm/promif/ieee1275/sun4v/Makefile.files
+++ b/usr/src/psm/promif/ieee1275/sun4v/Makefile.files
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -31,15 +31,17 @@
#
#
-# Note that the kernel doesn't use/need prom_map.o and prom_alloc.o
+# Note that the kernel doesn't use/need prom_map.o
#
#
# PROM Platform-dependent routines
#
CORE_OBJS += \
+ prom_alloc.o \
prom_cpuctl.o \
prom_efcode.o \
+ prom_fio.o \
prom_getunum.o \
prom_idprom.o \
prom_heartbeat.o \