986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje/*
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * CDDL HEADER START
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * The contents of this file are subject to the terms of the
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * Common Development and Distribution License (the "License").
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * You may not use this file except in compliance with the License.
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * or http://www.opensolaris.org/os/licensing.
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * See the License for the specific language governing permissions
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * and limitations under the License.
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * When distributing Covered Code, include this CDDL HEADER in each
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * If applicable, add the following below this CDDL HEADER, with the
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * fields enclosed by brackets "[]" replaced with your own identifying
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * information: Portions Copyright [yyyy] [name of copyright owner]
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * CDDL HEADER END
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje/*
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje * Use is subject to license terms.
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#pragma ident "%Z%%M% %I% %E% SMI"
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#include <sys/promif.h>
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#include <sys/promimpl.h>
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeint
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeprom_fopen(ihandle_t fsih, char *path)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje{
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje cell_t ci[10];
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje size_t len;
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#ifdef PROM_32BIT_ADDRS
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje char *opath = NULL;
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if ((uintptr_t)path > (uint32_t)-1) {
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje opath = path;
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje len = prom_strlen(opath) + 1; /* include terminating NUL */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje path = promplat_alloc(len);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (path == NULL)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (0);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje (void) prom_strcpy(path, opath);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje }
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#endif
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje len = prom_strlen(path);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_preprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[0] = p1275_ptr2cell("call-method"); /* Service name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[1] = (cell_t)4; /* #argument cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[2] = (cell_t)3; /* #result cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[3] = p1275_ptr2cell("open-file"); /* Arg1: Method name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[5] = p1275_uint2cell(len); /* Arg3: Len */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[6] = p1275_ptr2cell(path); /* Arg4: Pathname */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje (void) p1275_cif_handler(&ci);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_postprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#ifdef PROM_32BIT_ADDRS
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (opath != NULL)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promplat_free(path, len + 1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#endif
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (ci[7] != 0) /* Catch result */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (ci[8] == 0) /* Res1: failed */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (p1275_cell2int(ci[9])); /* Res2: fd */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje}
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gwint
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gwprom_volopen(ihandle_t fsih, char *path)
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw{
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw cell_t ci[10];
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw size_t len;
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw#ifdef PROM_32BIT_ADDRS
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw char *opath = NULL;
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw if ((uintptr_t)path > (uint32_t)-1) {
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw opath = path;
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw len = prom_strlen(opath) + 1; /* include terminating NUL */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw path = promplat_alloc(len);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw if (path == NULL)
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw return (0);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw (void) prom_strcpy(path, opath);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw }
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw#endif
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw len = prom_strlen(path);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw promif_preprom();
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw ci[0] = p1275_ptr2cell("call-method"); /* Service name */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw ci[1] = (cell_t)4; /* #argument cells */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw ci[2] = (cell_t)3; /* #result cells */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw ci[3] = p1275_ptr2cell("open-volume"); /* Arg1: Method name */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw ci[5] = p1275_uint2cell(len); /* Arg3: Len */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw ci[6] = p1275_ptr2cell(path); /* Arg4: Pathname */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw (void) p1275_cif_handler(&ci);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw promif_postprom();
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw#ifdef PROM_32BIT_ADDRS
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw if (opath != NULL)
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw promplat_free(path, len + 1);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw#endif
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw if (ci[7] != 0) /* Catch result */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw return (-1);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw if (ci[8] == 0) /* Res1: failed */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw return (-1);
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw return (p1275_cell2int(ci[9])); /* Res2: fd */
e7cbe64f7a72dae5cb44f100db60ca88f3313c65gw}
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeint
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeprom_fseek(ihandle_t fsih, int fd, unsigned long long offset)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje{
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje cell_t ci[10];
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[0] = p1275_ptr2cell("call-method"); /* Service name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[1] = (cell_t)4; /* #argument cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[2] = (cell_t)3; /* #result cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[3] = p1275_ptr2cell("seek-file"); /* Arg1: Method name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[6] = p1275_ull2cell_low(offset); /* Arg4: Offset */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_preprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje (void) p1275_cif_handler(&ci);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_postprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (ci[7] != 0) /* Catch result */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (ci[8] == 0) /* Res1: failed */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (p1275_cell2int(ci[9])); /* Res2: off */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje}
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeint
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeprom_fread(ihandle_t fsih, int fd, caddr_t buf, size_t len)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje{
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje cell_t ci[10];
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#ifdef PROM_32BIT_ADDRS
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje caddr_t obuf = NULL;
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if ((uintptr_t)buf > (uint32_t)-1) {
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje obuf = buf;
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje buf = promplat_alloc(len);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (buf == NULL)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje }
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#endif
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_preprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[0] = p1275_ptr2cell("call-method"); /* Service name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[1] = (cell_t)5; /* #argument cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[2] = (cell_t)2; /* #result cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[3] = p1275_ptr2cell("read-file"); /* Arg1: Method name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[6] = p1275_uint2cell(len); /* Arg4: buffer length */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[7] = p1275_ptr2cell(buf); /* Arg5: buffer address */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje (void) p1275_cif_handler(&ci);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_postprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#ifdef PROM_32BIT_ADDRS
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (obuf != NULL) {
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promplat_bcopy(buf, obuf, len);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promplat_free(buf, len);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje }
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje#endif
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (ci[8] != 0) /* Catch result */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (p1275_cell2int(ci[9])); /* Res2: actual length */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje}
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeint
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeprom_fsize(ihandle_t fsih, int fd, size_t *size)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje{
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje cell_t ci[8];
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_preprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[0] = p1275_ptr2cell("call-method"); /* Service name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[1] = (cell_t)3; /* #argument cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[2] = (cell_t)2; /* #result cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[3] = p1275_ptr2cell("size-file"); /* Arg1: Method name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje (void) p1275_cif_handler(&ci);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_postprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (ci[6] != 0) /* Catch result */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *size = p1275_cell2uint(ci[7]); /* Res2: size */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (0);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje}
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeint
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeprom_compinfo(ihandle_t fsih, int fd, int *iscmp, size_t *fsize, size_t *bsize)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje{
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje cell_t ci[10];
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_preprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[0] = p1275_ptr2cell("call-method"); /* Service name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[1] = (cell_t)3; /* #argument cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[2] = (cell_t)4; /* #result cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[3] = p1275_ptr2cell("cinfo-file"); /* Arg1: Method name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje (void) p1275_cif_handler(&ci);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_postprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje if (ci[6] != 0) /* Catch result */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (-1);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *iscmp = p1275_cell2int(ci[7]); /* Res2: iscmp */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *fsize = p1275_cell2uint(ci[8]); /* Res3: fsize */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje *bsize = p1275_cell2uint(ci[9]); /* Res4: bsize */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje return (0);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje}
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjevoid
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setjeprom_fclose(ihandle_t fsih, int fd)
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje{
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje cell_t ci[7];
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[0] = p1275_ptr2cell("call-method"); /* Service name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[1] = (cell_t)3; /* #argument cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[2] = (cell_t)1; /* #result cells */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[3] = p1275_ptr2cell("close-file"); /* Arg1: Method name */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[4] = p1275_ihandle2cell(fsih); /* Arg2: fs ihandle */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje ci[5] = p1275_int2cell(fd); /* Arg3: file desc */
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_preprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje (void) p1275_cif_handler(&ci);
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje promif_postprom();
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje
986fd29a0dc13f7608ef7f508f6e700bd7bc2720setje}