Revision 97c38f8c device_tree.c

b/device_tree.c
308 308
        exit(g_file_set_contents(dumpdtb, fdt, size, NULL) ? 0 : 1);
309 309
    }
310 310
}
311

  
312
int qemu_devtree_setprop_sized_cells_from_array(void *fdt,
313
                                                const char *node_path,
314
                                                const char *property,
315
                                                int numvalues,
316
                                                uint64_t *values)
317
{
318
    uint32_t *propcells;
319
    uint64_t value;
320
    int cellnum, vnum, ncells;
321
    uint32_t hival;
322

  
323
    propcells = g_new0(uint32_t, numvalues * 2);
324

  
325
    cellnum = 0;
326
    for (vnum = 0; vnum < numvalues; vnum++) {
327
        ncells = values[vnum * 2];
328
        if (ncells != 1 && ncells != 2) {
329
            return -1;
330
        }
331
        value = values[vnum * 2 + 1];
332
        hival = cpu_to_be32(value >> 32);
333
        if (ncells > 1) {
334
            propcells[cellnum++] = hival;
335
        } else if (hival != 0) {
336
            return -1;
337
        }
338
        propcells[cellnum++] = cpu_to_be32(value);
339
    }
340

  
341
    return qemu_devtree_setprop(fdt, node_path, property, propcells,
342
                                cellnum * sizeof(uint32_t));
343
}

Also available in: Unified diff