Author: blueswirl Date: 2008-11-24 20:29:24 +0100 (Mon, 24 Nov 2008) New Revision: 261
Modified: openbios-devel/drivers/build.xml openbios-devel/drivers/pci.c openbios-devel/drivers/vga_load_regs.c openbios-devel/include/openbios/nvram.h openbios-devel/modules/console.c openbios-devel/modules/nvram.c openbios-devel/modules/video.c Log: Fix Sparc32 and Sparc64 build by reverting some of the previous patches
Modified: openbios-devel/drivers/build.xml =================================================================== --- openbios-devel/drivers/build.xml 2008-11-24 18:36:19 UTC (rev 260) +++ openbios-devel/drivers/build.xml 2008-11-24 19:29:24 UTC (rev 261) @@ -14,7 +14,6 @@ <object source="obio.c" condition="DRIVER_OBIO"/> <object source="vga_load_regs.c" condition="DRIVER_VGA"/> <object source="vga_set_mode.c" condition="DRIVER_VGA"/> - <object source="vga_vbe.c" condition="DRIVER_VGA"/> </library>
<dictionary name="openbios" target="forth">
Modified: openbios-devel/drivers/pci.c =================================================================== --- openbios-devel/drivers/pci.c 2008-11-24 18:36:19 UTC (rev 260) +++ openbios-devel/drivers/pci.c 2008-11-24 19:29:24 UTC (rev 261) @@ -16,7 +16,6 @@ #include "openbios/config.h" #include "openbios/bindings.h" #include "openbios/kernel.h" -#include "openbios/pci.h" #include "libc/byteorder.h" #include "libc/vsprintf.h"
@@ -54,1227 +53,16 @@ { "close", ob_pci_close }, };
-/* PCI devices database */ -typedef struct pci_class_t pci_class_t; -typedef struct pci_subclass_t pci_subclass_t; -typedef struct pci_iface_t pci_iface_t; -typedef struct pci_dev_t pci_dev_t; - -typedef struct pci_config_t pci_config_t; - -struct pci_config_t { - char path[64]; - uint32_t regions[7]; - uint32_t sizes[7]; -}; - -struct pci_iface_t { - uint8_t iface; - const char *name; - const char *type; - const pci_dev_t *devices; - int (*config_cb)(pci_config_t *config); - const void *private; -}; - -struct pci_subclass_t { - uint8_t subclass; - const char *name; - const char *type; - const pci_dev_t *devices; - const pci_iface_t *iface; - int (*config_cb)(pci_config_t *config); - const void *private; -}; - -struct pci_class_t { - const char *name; - const char *type; - const pci_subclass_t *subc; -}; - -struct pci_dev_t { - uint16_t vendor; - uint16_t product; - const char *type; - const char *name; - const char *model; - const char *compat; - int acells; - int scells; - int icells; - int (*config_cb)(pci_config_t *config); - const void *private; -}; - -/* Current machine description */ - -typedef struct pci_bridge_t pci_bridge_t; - -/* Low level access helpers */ -struct pci_ops_t { - uint8_t (*config_readb)(pci_bridge_t *bridge, - uint8_t bus, uint8_t devfn, uint8_t offset); - void (*config_writeb)(pci_bridge_t *bridge, - uint8_t bus, uint8_t devfn, - uint8_t offset, uint8_t val); - uint16_t (*config_readw)(pci_bridge_t *bridge, - uint8_t bus, uint8_t devfn, uint8_t offset); - void (*config_writew)(pci_bridge_t *bridge, - uint8_t bus, uint8_t devfn, - uint8_t offset, uint16_t val); - uint32_t (*config_readl)(pci_bridge_t *bridge, - uint8_t bus, uint8_t devfn, uint8_t offset); - void (*config_writel)(pci_bridge_t *bridge, - uint8_t bus, uint8_t devfn, - uint8_t offset, uint32_t val); -}; - -static pci_subclass_t undef_subclass[] = { - { - 0x00, "misc undefined", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static int ide_config_cb2 (pci_config_t *config) +static int ob_pci_add_properties(pci_addr addr) { -#if 0 - ide_init(config->path, - config->regions[0] & ~0x0000000F, - config->regions[1] & ~0x0000000F, - config->regions[2] & ~0x0000000F, - config->regions[3] & ~0x0000000F); -#endif - return 0; -} - -static pci_dev_t ide_devices[] = { - { - 0x1095, 0x0646, /* CMD646 IDE controller */ - "pci-ide", "pci-ata", NULL, NULL, - 0, 0, 0, - ide_config_cb2, NULL, - }, - { - 0xFFFF, 0xFFFF, - NULL, NULL, NULL, NULL, - -1, -1, -1, - NULL, NULL, - }, -}; - -static pci_subclass_t mass_subclass[] = { - { - 0x00, "SCSI bus controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x01, "IDE controller", "ide", ide_devices, NULL, - NULL, NULL, - }, - { - 0x02, "Floppy disk controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x03, "IPI bus controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x04, "RAID controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x05, "ATA controller", "ata", NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc mass-storage controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_dev_t eth_devices[] = { - { 0x10EC, 0x8029, - NULL, "NE2000", "NE2000 PCI", NULL, - 0, 0, 0, - NULL, "ethernet", - }, - { - 0xFFFF, 0xFFFF, - NULL, NULL, NULL, NULL, - -1, -1, -1, - NULL, NULL, - }, -}; - -static int eth_config_cb (pci_config_t *config) -{ - phandle_t ph; - int props[12]; - int i; - - ph = find_dev(config->path); - - set_property(ph, "network-type", "ethernet", 9); - set_property(ph, "removable", "network", 8); - set_property(ph, "category", "net", 4); - - for (i = 0; i < 7; i++) - { - props[i*2] = config->regions[i]; - props[i*2 + 1] = config->sizes[i]; - } - set_property(ph, "reg", props, i * 2 * sizeof(int)); -} - -static pci_subclass_t net_subclass[] = { - { - 0x00, "ethernet controller", NULL, eth_devices, NULL, - eth_config_cb, "ethernet", - }, - { - 0x01, "token ring controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "FDDI controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x03, "ATM controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x04, "ISDN controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x05, "WordFip controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x06, "PICMG 2.14 controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc network controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_dev_t vga_devices[] = { - { - 0x1002, 0x5046, - NULL, "ATY", "ATY Rage128", "VGA", - 0, 0, 0, - NULL, NULL, - }, - { - 0x1234, 0x1111, - NULL, "QEMU,VGA", "Qemu VGA", "VGA", - 0, 0, 0, - NULL, NULL, - }, - { - 0xFFFF, 0xFFFF, - NULL, NULL, NULL, NULL, - -1, -1, -1, - NULL, NULL, - }, -}; - -/* VGA configuration */ - -static int vga_config_cb (pci_config_t *config) -{ - if (config->regions[0] != 0x00000000) - vga_vbe_init(config->path, config->regions[0], config->sizes[0], - config->regions[1], config->sizes[1]); - return 0; -} - -static struct pci_iface_t vga_iface[] = { - { - 0x00, "VGA controller", NULL, - vga_devices, &vga_config_cb, NULL, - }, - { - 0x01, "8514 compatible controller", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_subclass_t displ_subclass[] = { - { - 0x00, "display controller", NULL, NULL, vga_iface, - NULL, NULL, - }, - { - 0x01, "XGA display controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "3D display controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc display controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t media_subclass[] = { - { - 0x00, "video device", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x01, "audio device", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "computer telephony device", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc multimedia device", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t mem_subclass[] = { - { - 0x00, "RAM controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x01, "flash controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -pci_dev_t grackle_fake_bridge = { - 0xFFFF, 0xFFFF, - "pci", "pci-bridge", "DEC,21154", "DEC,21154.pci-bridge", - -1, -1, -1, - NULL, NULL, -}; - -static pci_dev_t uninorth_agp_fake_bridge = { - 0xFFFF, 0xFFFF, - "uni-north-agp", "uni-north-agp", NULL, "uni-north-agp", - -1, -1, -1, - NULL, NULL, -}; - -static pci_dev_t uninorth_fake_bridge = { - 0xFFFF, 0xFFFF, - "uni-north", "uni-north", NULL, "uni-north", - -1, -1, -1, - NULL, NULL, -}; - - -static pci_dev_t hbrg_devices[] = { - { - 0x106B, 0x0020, NULL, - "pci", "AAPL,UniNorth", "uni-north", - 3, 2, 1, - NULL, &uninorth_agp_fake_bridge, - }, - { - 0x106B, 0x001F, NULL, - "pci", "AAPL,UniNorth", "uni-north", - 3, 2, 1, - NULL, &uninorth_fake_bridge, - }, - { - 0x106B, 0x001E, NULL, - "pci", "AAPL,UniNorth", "uni-north", - 3, 2, 1, - NULL, &uninorth_fake_bridge, - }, - { - 0x1057, 0x0002, "pci", - "pci", "MOT,MPC106", "grackle", - 3, 2, 1, - NULL, &grackle_fake_bridge, - }, - { - 0x1057, 0x4801, NULL, - "pci-bridge", "PREP Host PCI Bridge - Motorola Raven", NULL, - 3, 2, 1, - NULL, NULL, - }, - { - 0xFFFF, 0xFFFF, - NULL, NULL, NULL, NULL, - -1, -1, -1, - NULL, NULL, - }, -}; - -static pci_dev_t PCIbrg_devices[] = { - { - 0x1011, 0x0026, NULL, - "pci-bridge", NULL, NULL, - 3, 2, 1, - NULL, NULL, - }, - { - 0xFFFF, 0xFFFF, - NULL, NULL, NULL, NULL, - -1, -1, -1, - NULL, NULL, - }, -}; - -static pci_subclass_t bridg_subclass[] = { - { - 0x00, "PCI host bridge", NULL, hbrg_devices, NULL, - NULL, NULL, - }, - { - 0x01, "ISA bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "EISA bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x03, "MCA bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x04, "PCI-to-PCI bridge", NULL, PCIbrg_devices, NULL, - NULL, NULL, - }, - { - 0x05, "PCMCIA bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x06, "NUBUS bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x07, "cardbus bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x08, "raceway bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x09, "semi-transparent PCI-to-PCI bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x0A, "infiniband-to-PCI bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc PCI bridge", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_iface_t serial_iface[] = { - { - 0x00, "XT serial controller", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "16450 serial controller", NULL, - NULL, NULL, NULL, - }, - { - 0x02, "16550 serial controller", NULL, - NULL, NULL, NULL, - }, - { - 0x03, "16650 serial controller", NULL, - NULL, NULL, NULL, - }, - { - 0x04, "16750 serial controller", NULL, - NULL, NULL, NULL, - }, - { - 0x05, "16850 serial controller", NULL, - NULL, NULL, NULL, - }, - { - 0x06, "16950 serial controller", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_iface_t par_iface[] = { - { - 0x00, "parallel port", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "bi-directional parallel port", NULL, - NULL, NULL, NULL, - }, - { - 0x02, "ECP 1.x parallel port", NULL, - NULL, NULL, NULL, - }, - { - 0x03, "IEEE 1284 controller", NULL, - NULL, NULL, NULL, - }, - { - 0xFE, "IEEE 1284 device", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_iface_t modem_iface[] = { - { - 0x00, "generic modem", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "Hayes 16450 modem", NULL, - NULL, NULL, NULL, - }, - { - 0x02, "Hayes 16550 modem", NULL, - NULL, NULL, NULL, - }, - { - 0x03, "Hayes 16650 modem", NULL, - NULL, NULL, NULL, - }, - { - 0x04, "Hayes 16750 modem", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_subclass_t comm_subclass[] = { - { - 0x00, "serial controller", NULL, NULL, serial_iface, - NULL, NULL, - }, - { - 0x01, "parallel port", NULL, NULL, par_iface, - NULL, NULL, - }, - { - 0x02, "multiport serial controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x03, "modem", NULL, NULL, modem_iface, - NULL, NULL, - }, - { - 0x04, "GPIB controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x05, "smart card", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc communication device", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_iface_t pic_iface[] = { - { - 0x00, "8259 PIC", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "ISA PIC", NULL, - NULL, NULL, NULL, - }, - { - 0x02, "EISA PIC", NULL, - NULL, NULL, NULL, - }, - { - 0x10, "I/O APIC", NULL, - NULL, NULL, NULL, - }, - { - 0x20, "I/O APIC", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_iface_t dma_iface[] = { - { - 0x00, "8237 DMA controller", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "ISA DMA controller", NULL, - NULL, NULL, NULL, - }, - { - 0x02, "EISA DMA controller", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_iface_t tmr_iface[] = { - { - 0x00, "8254 system timer", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "ISA system timer", NULL, - NULL, NULL, NULL, - }, - { - 0x02, "EISA system timer", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_iface_t rtc_iface[] = { - { - 0x00, "generic RTC controller", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "ISA RTC controller", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static const pci_dev_t sys_devices[] = { - /* IBM MPIC controller */ - { - 0x1014, 0x0002, - "open-pic", "MPIC", NULL, "chrp,open-pic", - 0, 0, 2, - NULL, NULL, - }, - /* IBM MPIC2 controller */ - { - 0x1014, 0xFFFF, - "open-pic", "MPIC2", NULL, "chrp,open-pic", - 0, 0, 2, - NULL, NULL, - }, - { - 0xFFFF, 0xFFFF, - NULL, NULL, NULL, NULL, - -1, -1, -1, - NULL, NULL, - }, -}; - -static pci_subclass_t sys_subclass[] = { - { - 0x00, "PIC", NULL, NULL, pic_iface, - NULL, NULL, - }, - { - 0x01, "DMA controller", NULL, NULL, dma_iface, - NULL, NULL, - }, - { - 0x02, "system timer", NULL, NULL, tmr_iface, - NULL, NULL, - }, - { - 0x03, "RTC controller", NULL, NULL, rtc_iface, - NULL, NULL, - }, - { - 0x04, "PCI hotplug controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc system peripheral", NULL, sys_devices, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t inp_subclass[] = { - { - 0x00, "keyboard controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x01, "digitizer", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "mouse controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x03, "scanner controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x04, "gameport controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc input device", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t dock_subclass[] = { - { - 0x00, "generic docking station", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc docking station", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t cpu_subclass[] = { - { - 0x00, "i386 processor", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x01, "i486 processor", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "pentium processor", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x10, "alpha processor", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x20, "PowerPC processor", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x30, "MIPS processor", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x40, "co-processor", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_iface_t usb_iface[] = { - { - 0x00, "UHCI USB controller", NULL, - NULL, NULL, NULL, - }, - { - 0x10, "OHCI USB controller", NULL, - NULL, NULL, NULL, - }, - { - 0x20, "EHCI USB controller", NULL, - NULL, NULL, NULL, - }, - { - 0x80, "misc USB controller", NULL, - NULL, NULL, NULL, - }, - { - 0xFE, "USB device", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_iface_t ipmi_iface[] = { - { - 0x00, "IPMI SMIC interface", NULL, - NULL, NULL, NULL, - }, - { - 0x01, "IPMI keyboard interface", NULL, - NULL, NULL, NULL, - }, - { - 0x02, "IPMI block transfer interface", NULL, - NULL, NULL, NULL, - }, - { - 0xFF, NULL, NULL, - NULL, NULL, NULL, - }, -}; - -static pci_subclass_t ser_subclass[] = { - { - 0x00, "Firewire bus controller", "ieee1394", NULL, NULL, - NULL, NULL, - }, - { - 0x01, "ACCESS bus controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "SSA controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x03, "USB controller", "usb", NULL, usb_iface, - NULL, NULL, - }, - { - 0x04, "fibre channel controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x05, "SMBus controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x06, "InfiniBand controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x07, "IPMI interface", NULL, NULL, ipmi_iface, - NULL, NULL, - }, - { - 0x08, "SERCOS controller", NULL, NULL, ipmi_iface, - NULL, NULL, - }, - { - 0x09, "CANbus controller", NULL, NULL, ipmi_iface, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t wrl_subclass[] = { - { - 0x00, "IRDA controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x01, "consumer IR controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x10, "RF controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x11, "bluetooth controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x12, "broadband controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc wireless controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t sat_subclass[] = { - { - 0x01, "satellite TV controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x02, "satellite audio controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x03, "satellite voice controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x04, "satellite data controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t crypt_subclass[] = { - { - 0x00, "cryptographic network controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x10, "cryptographic entertainment controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc cryptographic controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static pci_subclass_t spc_subclass[] = { - { - 0x00, "DPIO module", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x01, "performances counters", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x10, "communication synchronisation", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x20, "management card", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0x80, "misc signal processing controller", NULL, NULL, NULL, - NULL, NULL, - }, - { - 0xFF, NULL, NULL, NULL, NULL, - NULL, NULL, - }, -}; - -static const pci_class_t pci_classes[] = { - /* 0x00 */ - { "undefined", NULL, undef_subclass, }, - /* 0x01 */ - { "mass-storage controller", NULL, mass_subclass, }, - /* 0x02 */ - { "network controller", "network", net_subclass, }, - /* 0x03 */ - { "display controller", "display", displ_subclass, }, - /* 0x04 */ - { "multimedia device", NULL, media_subclass, }, - /* 0x05 */ - { "memory controller", "memory-controller", mem_subclass, }, - /* 0x06 */ - { "PCI bridge", "pci", bridg_subclass, }, - /* 0x07 */ - { "communication device", NULL, comm_subclass,}, - /* 0x08 */ - { "system peripheral", NULL, sys_subclass, }, - /* 0x09 */ - { "input device", NULL, inp_subclass, }, - /* 0x0A */ - { "docking station", NULL, dock_subclass, }, - /* 0x0B */ - { "processor", NULL, cpu_subclass, }, - /* 0x0C */ - { "serial bus controller", NULL, ser_subclass, }, - /* 0x0D */ - { "wireless controller", NULL, wrl_subclass, }, - /* 0x0E */ - { "intelligent I/O controller", NULL, NULL, }, - /* 0x0F */ - { "satellite communication controller", NULL, sat_subclass, }, - /* 0x10 */ - { "cryptographic controller", NULL, crypt_subclass, }, - /* 0x11 */ - { "signal processing controller", NULL, spc_subclass, }, -}; - -phandle_t pic_handle; -static int macio_config_cb (pci_config_t *config) -{ - char buf[64]; - phandle_t ph; - int props[2]; - - sprintf(buf, "%s/interrupt-controller", config->path); - REGISTER_NAMED_NODE(ob_pci_node, buf); - - ph = find_dev(buf); - set_property(ph, "device_type", "interrupt-controller", 21); - set_property(ph, "compatible", "heathrow\0mac-risc", 18); - set_int_property(ph, "#interrupt-cells", 1); - props[0]= 0x10; - props[1]= 0x20; - set_property(ph, "reg", &props, sizeof(props)); - pic_handle = ph; - - cuda_init(config->path, config->regions[0]); - macio_nvram_init(config->path, config->regions[0]); -#if 0 - ide_init(config->path, - config->regions[0] + 0x1f000, - config->regions[0] + 0x1f000 + 0x1000, - config->regions[0] + 0x1f000 + 0x2000, - config->regions[0] + 0x1f000 + 0x3000); -#endif -#if 0 - OF_finalize_pci_macio(device->common.OF_private, - device->regions[0] & ~0x0000000F, device->sizes[0], - private_data); -#endif - return 0; -} - -static const pci_dev_t misc_pci[] = { - /* Paddington Mac I/O */ - { - 0x106B, 0x0017, - "mac-io", "mac-io", "AAPL,343S1211", "paddington\1heathrow", - 1, 1, 1, - &macio_config_cb, NULL, - }, - /* KeyLargo Mac I/O */ - { - 0x106B, 0x0022, - "mac-io", "mac-io", "AAPL,Keylargo", "Keylargo", - 1, 1, 2, - &macio_config_cb, NULL, - }, - { - 0xFFFF, 0xFFFF, - NULL, NULL, NULL, NULL, - -1, -1, -1, - NULL, NULL, - }, -}; - -static pci_dev_t *pci_find_device (uint8_t class, uint8_t subclass, - uint8_t iface, uint16_t vendor, - uint16_t product) -{ - int (*config_cb)(pci_config_t *config); - const pci_class_t *pclass; - const pci_subclass_t *psubclass; - const pci_iface_t *piface; - const pci_dev_t *dev; - const void *private; - pci_dev_t *new; - const char *name, *type; - - name = "unknown"; - type = "unknown"; - config_cb = NULL; - private = NULL; - - if (class == 0x00 && subclass == 0x01) { - /* Special hack for old style VGA devices */ - class = 0x03; - subclass = 0x00; - } else if (class == 0xFF) { - /* Special case for misc devices */ - dev = misc_pci; - goto find_device; - } - if (class > (sizeof(pci_classes) / sizeof(pci_class_t))) { - name = "invalid PCI device"; - type = "invalid"; - goto bad_device; - } - pclass = &pci_classes[class]; - name = pclass->name; - type = pclass->type; - for (psubclass = pclass->subc; ; psubclass++) { - if (psubclass->subclass == 0xFF) - goto bad_device; - if (psubclass->subclass == subclass) { - if (psubclass->name != NULL) - name = psubclass->name; - if (psubclass->type != NULL) - type = psubclass->type; - if (psubclass->config_cb != NULL) { - config_cb = psubclass->config_cb; - } - if (psubclass->private != NULL) - private = psubclass->private; - if (psubclass->iface != NULL) - break; - dev = psubclass->devices; - goto find_device; - } - } - for (piface = psubclass->iface; ; piface++) { - if (piface->iface == 0xFF) { - dev = psubclass->devices; - break; - } - if (piface->iface == iface) { - if (piface->name != NULL) - name = piface->name; - if (piface->type != NULL) - type = piface->type; - if (piface->config_cb != NULL) { - config_cb = piface->config_cb; - } - if (piface->private != NULL) - private = piface->private; - dev = piface->devices; - break; - } - } - find_device: - for (;; dev++) { - if (dev->vendor == 0xFFFF && dev->product == 0xFFFF) { - goto bad_device; - } - if (dev->vendor == vendor && dev->product == product) { - if (dev->name != NULL) - name = dev->name; - if (dev->type != NULL) - type = dev->type; - if (dev->config_cb != NULL) { - config_cb = dev->config_cb; - } - if (dev->private != NULL) - private = dev->private; - new = malloc(sizeof(pci_dev_t)); - if (new == NULL) - return NULL; - new->vendor = vendor; - new->product = product; - new->type = type; - new->name = name; - new->model = dev->model; - new->compat = dev->compat; - new->config_cb = config_cb; - new->private = private; - - return new; - } - } - bad_device: - printk("Cannot manage '%s' PCI device type '%s':\n %x %x (%x %x %x)\n", - name, type, vendor, product, class, subclass, iface); - - return NULL; -} - -#define set_bool_property(ph, name) set_property(ph, name, NULL, 0); - - -static int ob_pci_add_properties(pci_addr addr, pci_dev_t *pci_dev, - pci_config_t *config) -{ phandle_t dev=get_cur_dev(); int status,id; - uint16_t vendor_id, device_id; - uint8_t rev;
- vendor_id = pci_config_read16(addr, PCI_VENDOR_ID); - device_id = pci_config_read16(addr, PCI_DEVICE_ID); - rev = pci_config_read8(addr, PCI_REVISION_ID); - /* create properties as described in 2.5 */ - printk("%s\n", pci_dev->name); - set_int_property(dev, "vendor-id", vendor_id); - set_int_property(dev, "device-id", device_id); - set_int_property(dev, "revision-id", rev); + set_int_property(dev, "vendor-id", pci_config_read16(addr, PCI_VENDOR_ID)); + set_int_property(dev, "device-id", pci_config_read16(addr, PCI_DEVICE_ID)); + set_int_property(dev, "revision-id", pci_config_read8(addr, PCI_REVISION_ID)); set_int_property(dev, "interrupts", pci_config_read8(addr, PCI_INTERRUPT_LINE)); @@ -1282,7 +70,7 @@ set_int_property(dev, "min-grant", pci_config_read8(addr, PCI_MIN_GNT)); set_int_property(dev, "max-latency", pci_config_read8(addr, PCI_MAX_LAT));
- status = pci_config_read16(addr, PCI_STATUS); + status=pci_config_read16(addr, PCI_STATUS); set_int_property(dev, "devsel-speed", (status&PCI_STATUS_DEVSEL_MASK)>>10); @@ -1294,41 +82,24 @@ if(status&PCI_STATUS_UDF) set_bool_property(dev, "udf-supported");
- id = pci_config_read16(addr, PCI_SUBSYSTEM_VENDOR_ID); - if (id) + id=pci_config_read16(addr, PCI_SUBSYSTEM_VENDOR_ID); + if(id) set_int_property(dev, "subsystem-vendor-id", id); - id = pci_config_read16(addr, PCI_SUBSYSTEM_ID); - if (id) + id=pci_config_read16(addr, PCI_SUBSYSTEM_ID); + if(id) set_int_property(dev, "subsystem-id", id);
set_int_property(dev, "cache-line-size", pci_config_read16(addr, PCI_CACHE_LINE_SIZE)); - if (pci_dev->type) { - push_str(pci_dev->type); - fword("encode-string"); - push_str("device_type"); - fword("property"); - } - if (pci_dev->model) { - push_str(pci_dev->model); - fword("encode-string"); - push_str("model"); - fword("property"); - } - push_str(pci_dev->name); - fword("encode-string"); - push_str("class"); - fword("property"); - if (pci_dev->config_cb) - pci_dev->config_cb(config); }
+ static int ob_pci_add_reg(pci_addr addr) { PUSH(0); PUSH(0); - PUSH(addr&(~arch->cfg_base)); + PUSH(addr&(~0x80000000u)); fword("pci-addr-encode"); PUSH(0); PUSH(0); @@ -1338,6 +109,118 @@ fword("property"); }
+static int ob_pci_add_class(pci_addr addr) +{ + unsigned int class; + char *strc; + + class=pci_config_read16(addr, PCI_CLASS_DEVICE); + switch (class) { + case 0x001: strc="display"; break; + case 0x100: strc="scsi"; break; + case 0x101: strc="ide"; break; + case 0x102: strc="fdc"; break; + case 0x103: strc="ipi"; break; + case 0x104: strc="raid"; break; + case 0x200: strc="ethernet"; break; + case 0x201: strc="token-ring"; break; + case 0x202: strc="fddi"; break; + case 0x203: strc="atm"; break; + case 0x400: strc="video"; break; + case 0x401: strc="sound"; break; + case 0x500: strc="memory"; break; + case 0x501: strc="flash"; break; + case 0x600: strc="host"; break; + case 0x601: strc="isa"; break; + case 0x602: strc="eisa"; break; + case 0x603: strc="mca"; break; + case 0x604: strc="pci"; break; + case 0x605: strc="pcmcia"; break; + case 0x606: strc="nubus"; break; + case 0x607: strc="cardbus"; break; + case 0x680: strc="pmu"; break; /* not in pci binding */ + case 0x700: strc="serial"; break; + case 0x701: strc="parallel"; break; + case 0x703: strc="modem"; break; /* not in pci binding */ + case 0x800: strc="interrupt-controller"; break; + case 0x801: strc="dma-controller"; break; + case 0x802: strc="timer"; break; + case 0x803: strc="rtc"; break; + case 0x900: strc="keyboard"; break; + case 0x901: strc="pen"; break; + case 0x902: strc="mouse"; break; + case 0xC00: strc="firewire"; break; + case 0xC01: strc="access-bus"; break; + case 0xC02: strc="ssa"; break; + case 0xC03: strc="usb"; break; + case 0xC04: strc="fibre-channel"; break; + default: + switch (class>>8) { + case 0x3: strc="display"; break; + case 0xA: strc="dock"; break; + case 0xB: strc="cpu"; break; + default:strc="unknown"; break; + } + } + if ((class>>8) == 0x03) { + push_str(strc); + fword("encode-string"); + push_str("device_type"); + fword("property"); + } + push_str(strc); + fword("encode-string"); + push_str("class"); + fword("property"); + + +#ifdef CONFIG_DEBUG_PCI + printk("%s\n", strc); +#endif +} + +static void +pci_enable_rom(pci_addr dev) +{ + u32 rom_addr; + + rom_addr=pci_config_read32(dev, PCI_ROM_ADDRESS); + rom_addr |= PCI_ROM_ADDRESS_ENABLE; + pci_config_write32(dev, PCI_ROM_ADDRESS, rom_addr); +} + +static void +pci_disable_rom(pci_addr dev) +{ + u32 rom_addr; + + rom_addr=pci_config_read32(dev, PCI_ROM_ADDRESS); + rom_addr &= ~PCI_ROM_ADDRESS_ENABLE; + pci_config_write32(dev, PCI_ROM_ADDRESS, rom_addr); +} + + +static void ob_pci_scan_rom(pci_addr addr) +{ + unsigned long rom_addr=pci_config_read32(addr,PCI_ROM_ADDRESS); + unsigned char *walk; + + rom_addr &= PCI_ROM_ADDRESS_MASK; + if(rom_addr) { + printk(" ROM found at 0x%lx\n",rom_addr); + pci_enable_rom(addr); + walk=phys_to_virt((unsigned char *)rom_addr); + if (walk[0]!=0x55 || walk[1]!=0xaa) { + printk("no pci rom\n"); + goto rom_err; + } + +rom_err: + pci_disable_rom(addr); + } + +} + #ifdef CONFIG_XBOX static char pci_xbox_blacklisted (int bus, int devnum, int fn) { @@ -1377,92 +260,14 @@ } #endif
-static void -ob_pci_configure(pci_arch_t *addr, pci_dev_t *pci_dev, pci_config_t *config, - uint32_t *mem_base, uint32_t *io_base) - +static void ob_scan_pci_bus(int bus, char *path) { - uint32_t smask, omask, amask, size, reloc, min_align; - uint32_t *base; - pci_addr config_addr; - int reg; - - omask = 0x00000000; - for (reg = 0; reg < 7; reg++) { - - config->regions[reg] = 0x00000000; - config->sizes[reg] = 0x00000000; - - if ((omask & 0x0000000f) == 0x4) { - /* 64 bits memory mapping */ - continue; - } - - if (reg == 6) - config_addr = PCI_ROM_ADDRESS; - else - config_addr = PCI_BASE_ADDR_0 + reg * 4; - - /* get region size */ - - pci_config_write32(addr, config_addr, 0xffffffff); - smask = pci_config_read32(addr, config_addr); - if (smask == 0x00000000 || smask == 0xffffffff) - continue; - - if (smask & 0x00000001 && reg != 6) { - /* I/O space */ - base = *io_base; - min_align = 1 << 7; - amask = 0x00000001; - pci_config_write16(addr, PCI_COMMAND, - pci_config_read16(addr, - PCI_COMMAND) | - PCI_COMMAND_IO); - } else { - /* Memory Space */ - base = *mem_base; - min_align = 1 << 16; - amask = 0x0000000F; - if (reg == 6) { - smask |= 1; /* ROM */ - } - pci_config_write16(addr, PCI_COMMAND, - pci_config_read16(addr, - PCI_COMMAND) | - PCI_COMMAND_MEMORY); - } - omask = smask & amask; - smask &= ~amask; - size = (~smask) + 1; - config->sizes[reg] = size; - reloc = base; - if (size < min_align) - size = min_align; - reloc = (reloc + size -1) & ~(size - 1); - if (*io_base == base) { - *io_base = reloc + size; - reloc -= arch->io_base; - } else { - *mem_base = reloc + size; - } - pci_config_write32(addr, config_addr, reloc | omask); - config->regions[reg] = reloc; -printk("region %08x size %08x\n", config->regions[reg], config->sizes[reg]); - } -} - -static void ob_scan_pci_bus(pci_arch_t *arch, int bus, uint32_t *mem_base, uint32_t *io_base, char *path) -{ int devnum, fn, is_multi, vid, did; unsigned int htype; pci_addr addr; char * nodetemp = "%s/pci%x,%x"; + char nodebuff[32]; phandle_t dnode, dbus; - pci_config_t config; - pci_dev_t *pci_dev; - uint32_t ccode; - uint8_t class, subclass, iface, rev;
for (devnum = 0; devnum < 32; devnum++) { is_multi = 0; @@ -1471,21 +276,13 @@ if (pci_xbox_blacklisted (bus, devnum, fn)) continue; #endif + addr = PCI_ADDR(bus, devnum, fn); vid = pci_config_read16(addr, PCI_VENDOR_ID); did = pci_config_read16(addr, PCI_DEVICE_ID);
if (vid==0xffff || vid==0) continue; - - ccode = pci_config_read16(addr, PCI_CLASS_DEVICE); - class = ccode >> 8; - subclass = ccode; - iface = pci_config_read8(addr, PCI_CLASS_PROG); - rev = pci_config_read8(addr, PCI_REVISION_ID); - - pci_dev = pci_find_device(class, subclass, iface, vid, did); - #ifdef CONFIG_DEBUG_PCI printk("%x:%x.%x - %x:%x - ", bus, devnum, fn, vid, did); @@ -1497,55 +294,35 @@ activate_device(path);
dbus=get_cur_dev(); - if (pci_dev == NULL || pci_dev->name == NULL) - sprintf(config.path, nodetemp, path, vid, did); - else - sprintf(config.path, "%s/%s", path, pci_dev->name); + sprintf(nodebuff, nodetemp, path, vid, did); #ifdef CONFIG_DEBUG_PCI - printk("%s - ", config.path); + printk("%s - ", nodebuff); #endif - REGISTER_NAMED_NODE(ob_pci_node, config.path); - dnode=find_dev(config.path); + REGISTER_NAMED_NODE(ob_pci_node, nodebuff); + dnode=find_dev(nodebuff); activate_dev( dnode ); - ob_pci_configure(addr, pci_dev, &config, - mem_base, io_base); -{ - int irq_pin, irq_line; - static uint8_t heathrow_pci_irqs[4] = { 0x15, 0x16, 0x17, 0x18 }; - irq_pin = pci_config_read8(addr, PCI_INTERRUPT_PIN); - if (irq_pin > 0) { - irq_pin = (devnum + irq_pin - 1) & 3; - irq_line = heathrow_pci_irqs[irq_pin]; - } -} - ob_pci_add_properties(addr, pci_dev, &config); + + ob_pci_add_properties(addr); ob_pci_add_reg(addr); + ob_pci_add_class(addr); + ob_pci_scan_rom(addr); device_end(); - + activate_dev( dbus ); } } }
+ int ob_pci_init(void) { - pci_bridge_t *pci_bridge; - pci_dev_t *pci_dev; - int bus, devfn; - phandle_t aliases; - phandle_t ph; - char buf[64]; - uint32_t mem_base, io_base; + char *path="/pci"; + int bus;
printk("Initializing PCI devices...\n"); - + /* brute force bus scan */ - - /* Find all PCI bridges */ - - mem_base = arch->mem_base; - io_base = arch->io_base; - for (bus = 0; bus<0x100; bus++) { - ob_scan_pci_bus(arch, bus, &mem_base, &io_base, "/pci"); + for (bus=0; bus<0x100; bus++) { + ob_scan_pci_bus(bus, path); } return 0; }
Modified: openbios-devel/drivers/vga_load_regs.c =================================================================== --- openbios-devel/drivers/vga_load_regs.c 2008-11-24 18:36:19 UTC (rev 260) +++ openbios-devel/drivers/vga_load_regs.c 2008-11-24 19:29:24 UTC (rev 261) @@ -22,8 +22,6 @@ * */
-static int depth; - // prototypes static int vga_decode_var(const struct screeninfo *var, struct vga_par *par); static int vga_set_regs(const struct vga_par *par); @@ -126,7 +124,11 @@ 0, // activate now -1,-1, // height and width in mm 0, // accel flags - 39721, // pixclock + 39721, // pixclock: 79442 -> 12.587 Mhz (NOT USED) + // 70616 -> 14.161 + // 39721 -> 25.175 + // 35308 -> 28.322 + 48, 16, 39, 8, // margins left,right,upper,lower 96, // hsync length 2, // vsync length
Modified: openbios-devel/include/openbios/nvram.h =================================================================== --- openbios-devel/include/openbios/nvram.h 2008-11-24 18:36:19 UTC (rev 260) +++ openbios-devel/include/openbios/nvram.h 2008-11-24 19:29:24 UTC (rev 261) @@ -21,7 +21,7 @@ extern void arch_nvram_get( char *buf ); extern void arch_nvram_put( char *buf );
-extern void nvram_init( char *path ); +extern void nvram_init( void ); extern void update_nvram( void );
#endif /* _H_NVRAM */
Modified: openbios-devel/modules/console.c =================================================================== --- openbios-devel/modules/console.c 2008-11-24 18:36:19 UTC (rev 260) +++ openbios-devel/modules/console.c 2008-11-24 19:29:24 UTC (rev 261) @@ -153,8 +153,21 @@ osi_fb_info_t fb; int i, x, offs, size, *dest, *src; - video_scroll( FONT_ADJ_HEIGHT ); + openbios_GetFBInfo( &fb );
+ offs = fb.rb * FONT_ADJ_HEIGHT; + size = (fb.h * fb.rb - offs)/16; + dest = (int*)fb.mphys; + src = (int*)(fb.mphys + offs); + + for( i=0; i<size; i++ ) { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = src[3]; + dest += 4; + src += 4; + } for( x=0; x<cons.w; x++ ) cons.buf[(cons.h-1)*cons.w + x] = 0; draw_line(cons.h-1);
Modified: openbios-devel/modules/nvram.c =================================================================== --- openbios-devel/modules/nvram.c 2008-11-24 18:36:19 UTC (rev 260) +++ openbios-devel/modules/nvram.c 2008-11-24 19:29:24 UTC (rev 261) @@ -18,13 +18,6 @@ #include "openbios/bindings.h" #include "openbios/nvram.h"
-#ifdef CONFIG_DEBUG_NVRAM -#define DPRINTF(fmt, args...) \ -do { printk("NVRAM: " fmt , ##args); } while (0) -#else -#define DPRINTF(fmt, args...) do {} while(0) -#endif - #define DEF_SYSTEM_SIZE 0xc10
#define NV_SIG_SYSTEM 0x70 @@ -84,12 +77,10 @@ return 1; }
- len=nvpart_size(*p); - if( len == 0) { + if( !(len=nvpart_size(*p)) ) { printk("invalid nvram partition length\n"); return -1; } - *p = (nvpart_t*)((char*)*p + len); if( *p < end ) return 1; @@ -228,7 +219,7 @@ uint mark_lo; } nvram_ibuf_t;
-DECLARE_UNNAMED_NODE( nvram, INSTALL_OPEN, sizeof(nvram_ibuf_t )); +DECLARE_NODE( nvram, INSTALL_OPEN, sizeof(nvram_ibuf_t), "Tnvram" );
/* ( pos_lo pos_hi -- status ) */ static void @@ -237,7 +228,7 @@ int pos_hi = POP(); int pos_lo = POP();
- DPRINTF("seek %08x %08x\n", pos_hi, pos_lo ); + /* printk("NVRAM: seek %08x %08x\n", pos_hi, pos_lo ); */ nd->mark_lo = pos_lo; nd->mark_hi = pos_hi;
@@ -263,7 +254,7 @@ n++; } PUSH(n); - DPRINTF("read %08x %x -- %x\n", (int)p, len, n); + /* printk("NVRAM: read %08x %x -- %x\n", (int)p, len, n); */ }
/* ( addr len -- actual ) */ @@ -279,14 +270,13 @@ n++; } PUSH(n); - DPRINTF("write %08x %x -- %x\n", (int)p, len, n ); + /* printk("NVRAM: write %08x %x -- %x\n", (int)p, len, n ); */ }
/* ( -- size ) */ static void nvram_size( __attribute__((unused)) nvram_ibuf_t *nd ) { - DPRINTF("nvram_size %d\n", nvram.size); PUSH( nvram.size ); }
@@ -299,9 +289,9 @@
void -nvram_init( char *path ) +nvram_init( void ) { nvconf_init(); - REGISTER_NAMED_NODE( nvram, path ); + REGISTER_NODE( nvram ); }
Modified: openbios-devel/modules/video.c =================================================================== --- openbios-devel/modules/video.c 2008-11-24 18:36:19 UTC (rev 260) +++ openbios-devel/modules/video.c 2008-11-24 19:29:24 UTC (rev 261) @@ -146,7 +146,7 @@ while( ww-- ) *p++ = col; } else { - char *p = (ushort*)pp + x; + char *p = (char*)pp + x; while( ww-- ) *p++ = col; } @@ -179,33 +179,10 @@ dac[1] = ((color >> 8) & 0xff) << 24; // Green dac[1] = (color & 0xff) << 24; // Blue } -#else - vga_set_color(ind, ((color >> 16) & 0xff), - ((color >> 8) & 0xff), - (color & 0xff)); #endif }
-void -video_scroll( int height ) -{ - int i, x, offs, size, *dest, *src;
- offs = video.fb.rb * height; - size = (video.fb.h * video.fb.rb - offs)/16; - dest = (int*)video.fb.mphys; - src = (int*)(video.fb.mphys + offs); - - for( i=0; i<size; i++ ) { - dest[0] = src[0]; - dest[1] = src[1]; - dest[2] = src[2]; - dest[3] = src[3]; - dest += 4; - src += 4; - } -} - /************************************************************************/ /* OF methods */ /************************************************************************/ @@ -280,18 +257,14 @@ PUSH(len); }
-#if 0 static void video_open(void) { RET(-1); } -#endif
NODE_METHODS( video ) = { -#if 0 {"open", video_open }, -#endif {"dimensions", video_dimensions }, {"set-colors", video_set_colors }, {"fill-rectangle", video_fill_rect }, @@ -305,15 +278,22 @@ /************************************************************************/
void -init_video( uint32_t fb, int width, int height, int depth, int rb ) +init_video( void ) { int i, s, size; - - video.fb.mphys = fb; - video.fb.w = width; - video.fb.h = height; - video.fb.depth = depth; - video.fb.rb = rb; + phandle_t ph=0; + + if( openbios_GetFBInfo(&video.fb) ) { + printk("init_video: No video display\n"); + return; + } + while( (ph=dt_iterate_type(ph, "display")) ) { + set_property( ph, "width", (char*)&video.fb.w, 4 ); + set_property( ph, "height", (char*)&video.fb.h, 4 ); + set_property( ph, "depth", (char*)&video.fb.depth, 4 ); + set_property( ph, "linebytes", (char*)&video.fb.rb, 4 ); + set_property( ph, "address", (char*)&video.fb.mphys, 4 ); + } video.has_video = 1; video.pal = malloc( 256 * sizeof(int) );
@@ -326,7 +306,7 @@ ofmem_claim_virt( video.fb.mphys, size, 0 ); ofmem_map( video.fb.mphys, video.fb.mphys, size, -1 ); #endif - + for( i=0; i<256; i++ ) set_color( i, i * 0x010101 );