diff options
| author | setje <none@none> | 2007-12-07 16:04:33 -0800 |
|---|---|---|
| committer | setje <none@none> | 2007-12-07 16:04:33 -0800 |
| commit | 986fd29a0dc13f7608ef7f508f6e700bd7bc2720 (patch) | |
| tree | 8612567367832542a32a2c8bbf3b9b7ef7639ab7 /usr/src/psm/promif | |
| parent | f3b585ce799a83688c5532c430f6133f098431c2 (diff) | |
| download | illumos-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.c | 219 | ||||
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4/prom_init.c | 13 | ||||
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4/prom_mem.c | 53 | ||||
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4u/Makefile.files | 6 | ||||
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4u/prom_mmu.c | 39 | ||||
| -rw-r--r-- | usr/src/psm/promif/ieee1275/sun4v/Makefile.files | 6 |
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 \ |
