static void rtas_nvram_fetch(PowerPCCPU *cpu, sPAPREnvironment *spapr,

                             uint32_t token, uint32_t nargs,

                             target_ulong args,

                             uint32_t nret, target_ulong rets)

{

    sPAPRNVRAM *nvram = spapr->nvram;

    hwaddr offset, buffer, len;

    int alen;

    void *membuf;



    if ((nargs != 3) || (nret != 2)) {

        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);

        return;

    }



    if (!nvram) {

        rtas_st(rets, 0, RTAS_OUT_HW_ERROR);

        rtas_st(rets, 1, 0);

        return;

    }



    offset = rtas_ld(args, 0);

    buffer = rtas_ld(args, 1);

    len = rtas_ld(args, 2);



    if (((offset + len) < offset)

        || ((offset + len) > nvram->size)) {

        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);

        rtas_st(rets, 1, 0);

        return;

    }



    membuf = cpu_physical_memory_map(buffer, &len, 1);

    if (nvram->drive) {

        alen = bdrv_pread(nvram->drive, offset, membuf, len);

    } else {

        assert(nvram->buf);



        memcpy(membuf, nvram->buf + offset, len);

        alen = len;

    }

    cpu_physical_memory_unmap(membuf, len, 1, len);



    rtas_st(rets, 0, (alen < len) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);

    rtas_st(rets, 1, (alen < 0) ? 0 : alen);

}

static void rtas_nvram_fetch(PowerPCCPU *cpu, sPAPREnvironment *spapr,

                             uint32_t token, uint32_t nargs,

                             target_ulong args,

                             uint32_t nret, target_ulong rets)

{

    sPAPRNVRAM *nvram = spapr->nvram;

    hwaddr offset, buffer, len;

    int alen;

    void *membuf;



    if ((nargs != 3) || (nret != 2)) {

        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);

        return;

    }



    if (!nvram) {

        rtas_st(rets, 0, RTAS_OUT_HW_ERROR);

        rtas_st(rets, 1, 0);

        return;

    }



    offset = rtas_ld(args, 0);

    buffer = rtas_ld(args, 1);

    len = rtas_ld(args, 2);



    if (((offset + len) < offset)

        || ((offset + len) > nvram->size)) {

        rtas_st(rets, 0, RTAS_OUT_PARAM_ERROR);

        rtas_st(rets, 1, 0);

        return;

    }



    membuf = cpu_physical_memory_map(buffer, &len, 1);

    if (nvram->drive) {

        alen = bdrv_pread(nvram->drive, offset, membuf, len);

    } else {

        assert(nvram->buf);



        memcpy(membuf, nvram->buf + offset, len);

        alen = len;

    }

    cpu_physical_memory_unmap(membuf, len, 1, len);



    rtas_st(rets, 0, (alen < len) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);

    rtas_st(rets, 1, (alen < 0) ? 0 : alen);

}

static void FUNC_0(PowerPCCPU *VAR_0, sPAPREnvironment *VAR_1,

                             uint32_t VAR_2, uint32_t VAR_3,

                             target_ulong VAR_4,

                             uint32_t VAR_5, target_ulong VAR_6)

{

    sPAPRNVRAM *nvram = VAR_1->nvram;

    hwaddr offset, buffer, len;

    int VAR_7;

    void *VAR_8;



    if ((VAR_3 != 3) || (VAR_5 != 2)) {

        rtas_st(VAR_6, 0, RTAS_OUT_PARAM_ERROR);

        return;

    }



    if (!nvram) {

        rtas_st(VAR_6, 0, RTAS_OUT_HW_ERROR);

        rtas_st(VAR_6, 1, 0);

        return;

    }



    offset = rtas_ld(VAR_4, 0);

    buffer = rtas_ld(VAR_4, 1);

    len = rtas_ld(VAR_4, 2);



    if (((offset + len) < offset)

        || ((offset + len) > nvram->size)) {

        rtas_st(VAR_6, 0, RTAS_OUT_PARAM_ERROR);

        rtas_st(VAR_6, 1, 0);

        return;

    }



    VAR_8 = cpu_physical_memory_map(buffer, &len, 1);

    if (nvram->drive) {

        VAR_7 = bdrv_pread(nvram->drive, offset, VAR_8, len);

    } else {

        assert(nvram->buf);



        memcpy(VAR_8, nvram->buf + offset, len);

        VAR_7 = len;

    }

    cpu_physical_memory_unmap(VAR_8, len, 1, len);



    rtas_st(VAR_6, 0, (VAR_7 < len) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS);

    rtas_st(VAR_6, 1, (VAR_7 < 0) ? 0 : VAR_7);

}

static void FUNC_0(PowerPCCPU *VAR_0, sPAPREnvironment *VAR_1,
uint32_t VAR_2, uint32_t VAR_3,
target_ulong VAR_4,
uint32_t VAR_5, target_ulong VAR_6)
{ sPAPRNVRAM *nvram = VAR_1->nvram; hwaddr offset, buffer, len; int VAR_7; void *VAR_8; if ((VAR_3 != 3) || (VAR_5 != 2)) { rtas_st(VAR_6, 0, RTAS_OUT_PARAM_ERROR); return; } if (!nvram) { rtas_st(VAR_6, 0, RTAS_OUT_HW_ERROR); rtas_st(VAR_6, 1, 0); return; } offset = rtas_ld(VAR_4, 0); buffer = rtas_ld(VAR_4, 1); len = rtas_ld(VAR_4, 2); if (((offset + len) < offset)
|| ((offset + len) > nvram->size)) { rtas_st(VAR_6, 0, RTAS_OUT_PARAM_ERROR); rtas_st(VAR_6, 1, 0); return; } VAR_8 = cpu_physical_memory_map(buffer, &len, 1); if (nvram->drive) { VAR_7 = bdrv_pread(nvram->drive, offset, VAR_8, len); } else { assert(nvram->buf); memcpy(VAR_8, nvram->buf + offset, len); VAR_7 = len; } cpu_physical_memory_unmap(VAR_8, len, 1, len); rtas_st(VAR_6, 0, (VAR_7 < len) ? RTAS_OUT_HW_ERROR : RTAS_OUT_SUCCESS); rtas_st(VAR_6, 1, (VAR_7 < 0) ? 0 : VAR_7); }