Changeset 5d684e4 in mainline


Ignore:
Timestamp:
2006-09-23T13:12:10Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6ff1f1e
Parents:
28ecadb
Message:

Convert sparc64 framebuffer code to configure from the OpenFirmware device tree memory representation.

Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/sparc64/loader/main.c

    r28ecadb r5d684e4  
    5858        }
    5959       
    60         if (!ofw_screen(&bootinfo.screen)) {
    61                 printf("Error: unable to get screen properties, halting.\n");
    62                 halt();
    63         }
    64         bootinfo.screen.addr = ofw_translate(bootinfo.screen.addr);
    65         /* transform scanline to bytes with respect to potential alignment */
    66         bootinfo.screen.scanline = bootinfo.screen.scanline*bpp2align[bootinfo.screen.bpp >> 3];
    67        
    6860        if (!ofw_cpu(&bootinfo.cpu))
    6961                printf("Error: unable to get cpu properties\n");
    7062
    71         printf("\nDevice statistics\n");
     63        printf("\nDevice info\n");
    7264        printf(" cpu: %dMHz\n", bootinfo.cpu.clock_frequency/1000000);
    7365        printf(" memory: %dM\n", bootinfo.memmap.total>>20);
    74         printf(" screen at %P, resolution %dx%d, %d bpp (scanline %d bytes)\n", (uintptr_t) bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
    7566
    7667        printf("\nMemory statistics\n");
  • boot/arch/sparc64/loader/main.h

    r28ecadb r5d684e4  
    5454        taskmap_t taskmap;
    5555        memmap_t memmap;
    56         screen_t screen;
    5756        cpu_t cpu;
    5857        ballocs_t ballocs;
  • boot/arch/sparc64/loader/ofwarch.c

    r28ecadb r5d684e4  
    3838#include "main.h"
    3939
    40 int bpp2align[] = {
    41         [0] = 0,                /** Invalid bpp. */
    42         [1] = 1,                /** 8bpp is not aligned. */
    43         [2] = 2,                /** 16bpp is naturally aligned. */
    44         [3] = 4,                /** 24bpp is aligned on 4 byte boundary. */
    45         [4] = 4,                /** 32bpp is naturally aligned. */
    46 };
    47 
    4840void write(const char *str, const int len)
    4941{
     
    6052{
    6153        return flag != -1;
    62 }
    63 
    64 int ofw_keyboard(keyboard_t *keyboard)
    65 {
    66         char device_name[BUF_SIZE];
    67         uint32_t virtaddr;
    68                
    69         if (ofw_get_property(ofw_aliases, "keyboard", device_name, sizeof(device_name)) <= 0)
    70                 return false;
    71                                        
    72         phandle device = ofw_find_device(device_name);
    73         if (device == -1)
    74                 return false;
    75                                                                        
    76         if (ofw_get_property(device, "address", &virtaddr, sizeof(virtaddr)) <= 0)
    77                 return false;
    78                                                                                                
    79         if (!(keyboard->addr = ofw_translate((void *) ((uintptr_t) virtaddr))))
    80                 return false;
    81 
    82         return true;
    8354}
    8455
  • kernel/arch/sparc64/Makefile.inc

    r28ecadb r5d684e4  
    9696        arch/$(ARCH)/src/ddi/ddi.c \
    9797        arch/$(ARCH)/src/drivers/tick.c \
    98         arch/$(ARCH)/src/drivers/kbd.c
     98        arch/$(ARCH)/src/drivers/kbd.c \
     99        arch/$(ARCH)/src/drivers/scr.c
    99100
    100101ifeq ($(CONFIG_TSB),y)
  • kernel/arch/sparc64/include/boot/boot.h

    r28ecadb r5d684e4  
    7272
    7373typedef struct {
    74         uintptr_t addr;
    75         uint32_t width;
    76         uint32_t height;
    77         uint32_t bpp;
    78         uint32_t scanline;
    79 } screen_t;
    80 
    81 typedef struct {
    8274        uint32_t clock_frequency;
    8375} processor_t;
     
    9082        taskmap_t taskmap;
    9183        memmap_t memmap;
    92         screen_t screen;
    9384        processor_t processor;
    9485        ballocs_t ballocs;
  • kernel/arch/sparc64/src/console.c

    r28ecadb r5d684e4  
    3636#include <arch/types.h>
    3737#include <typedefs.h>
    38 #include <genarch/fb/fb.h>
    39 #include <arch/drivers/fb.h>
    4038
     39#include <arch/drivers/scr.h>
    4140#include <arch/drivers/kbd.h>
     41
    4242#ifdef CONFIG_Z8530
    4343#include <genarch/kbd/z8530.h>
     
    5353#include <proc/thread.h>
    5454#include <arch/mm/tlb.h>
    55 #include <arch/boot/boot.h>
    5655#include <genarch/ofw/ofw_tree.h>
    5756#include <arch.h>
     
    8483                panic("Can't find %s\n", prop->value);
    8584
    86         fb_init(bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height,
    87                 bootinfo.screen.bpp, bootinfo.screen.scanline, true);
    88        
     85        scr_init(screen);
     86
    8987        prop = ofw_tree_getprop(aliases, "keyboard");
    9088        if (!prop)
  • kernel/genarch/include/ofw/ofw_tree.h

    r28ecadb r5d684e4  
    134134extern bool ofw_ffb_apply_ranges(ofw_tree_node_t *node, ofw_ffb_reg_t *reg, uintptr_t *pa);
    135135
     136extern bool ofw_pci_reg_absolutize(ofw_tree_node_t *node, ofw_pci_reg_t *reg, ofw_pci_reg_t *out);
     137
    136138#endif
  • kernel/genarch/src/ofw/pci.c

    r28ecadb r5d684e4  
    4242#include <macros.h>
    4343
    44 #define PCI_SPACE_MASK  0x03000000
     44#define PCI_SPACE_MASK          0x03000000
     45#define PCI_ABS_MASK            0x80000000     
     46#define PCI_REG_MASK            0x000000ff
    4547
    4648bool ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa)
     
    7476}
    7577
     78bool ofw_pci_reg_absolutize(ofw_tree_node_t *node, ofw_pci_reg_t *reg, ofw_pci_reg_t *out)
     79{
     80        if (reg->space & PCI_ABS_MASK) {
     81                /* already absolute */
     82                out->space = reg->space;
     83                out->addr = reg->addr;
     84                out->size = reg->size;
     85                return true;
     86        }
     87       
     88        ofw_tree_property_t *prop;
     89        ofw_pci_reg_t *assigned_address;
     90        count_t assigned_addresses;
     91       
     92        prop = ofw_tree_getprop(node, "assigned-addresses");
     93        if (!prop)
     94                panic("Can't find \"assigned-addresses\" property.\n");
     95       
     96        assigned_addresses = prop->size / sizeof(ofw_pci_reg_t);
     97        assigned_address = prop->value;
     98       
     99        int i;
     100       
     101        for (i = 0; i < assigned_addresses; i++) {
     102                if ((assigned_address[i].space & PCI_REG_MASK) == (reg->space & PCI_REG_MASK)) {
     103                        out->space = assigned_address[i].space;
     104                        out->addr = reg->addr + assigned_address[i].addr;
     105                        out->size = reg->size;
     106                        return true;
     107                }
     108        }
     109       
     110        return false;
     111}
     112
    76113/** @}
    77114 */
Note: See TracChangeset for help on using the changeset viewer.