Subversion Repositories HelenOS

Rev

Rev 3674 | Rev 4341 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3674 Rev 4337
Line 296... Line 296...
296
{
296
{
297
    unsigned int ac = ofw_get_address_cells(ofw_memory) /
297
    unsigned int ac = ofw_get_address_cells(ofw_memory) /
298
        (sizeof(uintptr_t) / sizeof(uint32_t));
298
        (sizeof(uintptr_t) / sizeof(uint32_t));
299
    unsigned int sc = ofw_get_size_cells(ofw_memory) /
299
    unsigned int sc = ofw_get_size_cells(ofw_memory) /
300
        (sizeof(uintptr_t) / sizeof(uint32_t));
300
        (sizeof(uintptr_t) / sizeof(uint32_t));
301
    printf("address cells: %d, size cells: %d. ", ac, sc);
-
 
302
 
301
 
303
    uintptr_t buf[((ac + sc) * MEMMAP_MAX_RECORDS)];
302
    uintptr_t buf[((ac + sc) * MEMMAP_MAX_RECORDS)];
304
    int ret = ofw_get_property(ofw_memory, "reg", buf, sizeof(buf));
303
    int ret = ofw_get_property(ofw_memory, "reg", buf, sizeof(buf));
305
    if (ret <= 0)       /* ret is the number of written bytes */
304
    if (ret <= 0)       /* ret is the number of written bytes */
306
        return false;
305
        return false;
Line 371... Line 370...
371
        return false;
370
        return false;
372
   
371
   
373
    return true;
372
    return true;
374
}
373
}
375
 
374
 
-
 
375
/**
-
 
376
 * Sets up the palette for the 8-bit color depth configuration so that the
-
 
377
 * 3:2:3 color scheme can be used. Checks that setting the palette makes sense
-
 
378
 * (appropriate nodes exist in the OBP tree and the color depth is not greater
-
 
379
 * than 8).
-
 
380
 *
-
 
381
 * @return  true if the palette has been set, false otherwise
-
 
382
 */
-
 
383
int setup_palette(void)
-
 
384
{
-
 
385
    char device_name[BUF_SIZE];
-
 
386
   
-
 
387
    /* resolve alias */
-
 
388
    if (ofw_get_property(ofw_aliases, "screen", device_name,
-
 
389
        sizeof(device_name)) <= 0)
-
 
390
        return false;
-
 
391
 
-
 
392
    /* for depth greater than 8 it makes no sense to set up the palette */
-
 
393
    uint32_t depth;
-
 
394
    phandle device = ofw_find_device(device_name);
-
 
395
    if (device == -1)
-
 
396
        return false;
-
 
397
    if (ofw_get_property(device, "depth", &depth, sizeof(uint32_t)) <= 0)
-
 
398
        return false;
-
 
399
    if (depth != 8)
-
 
400
        return false;
-
 
401
   
-
 
402
    /* required in order to be able to make a method call */
-
 
403
    ihandle screen = ofw_open(device_name);
-
 
404
    if (screen == -1)
-
 
405
        return false;
-
 
406
 
-
 
407
    /* setup the palette so that the (inverted) 3:2:3 scheme is usable */
-
 
408
    unsigned int i;
-
 
409
    for (i = 0; i < 256; i++)
-
 
410
        if (ofw_call("call-method", 6, 1, NULL, "color!", screen,
-
 
411
            255 - i,
-
 
412
            i << 5,
-
 
413
            (i >> 3) << 6,
-
 
414
            (i >> 5) << 5) != 0);
-
 
415
    return true;
-
 
416
}
376
 
417
 
377
void ofw_quiesce(void)
418
void ofw_quiesce(void)
378
{
419
{
379
    ofw_call("quiesce", 0, 0, NULL);
420
    ofw_call("quiesce", 0, 0, NULL);
380
}
421
}