[haiku-commits] r42541 - in haiku/trunk: headers/private/graphics/radeon_hd src/add-ons/accelerants/radeon_hd src/add-ons/kernel/drivers/graphics/radeon_hd

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 2 Aug 2011 16:58:57 +0200 (CEST)

Author: kallisti5
Date: 2011-08-02 16:58:56 +0200 (Tue, 02 Aug 2011)
New Revision: 42541
Changeset: https://dev.haiku-os.org/changeset/42541

Modified:
   haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h
   haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp
   haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h
   haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp
   haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.h
   haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp
Log:
* Move bios_info into shared info
* Pull pci_rom base address from pci subsystem
* Point AtomBIOS parser to pci rom address
  to set up and malloc atom_context
* This is untested! Don't run on an
  expensive card until I test it on a cheaper
  one!


Modified: haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h
===================================================================
--- haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h  2011-08-02 
10:56:39 UTC (rev 42540)
+++ haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h  2011-08-02 
14:58:56 UTC (rev 42541)
@@ -71,6 +71,9 @@
        area_id                 mode_list_area;         // area containing 
display mode list
        uint32                  mode_count;
 
+       uint32                  rom_base;                       // AtomBIOS 
base location
+       uint32                  rom_size;                       // AtomBIOS size
+
        display_mode    current_mode;
        uint32                  bytes_per_row;
        uint32                  bits_per_pixel;

Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp
===================================================================
--- haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp        
2011-08-02 10:56:39 UTC (rev 42540)
+++ haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp        
2011-08-02 14:58:56 UTC (rev 42541)
@@ -37,7 +37,6 @@
 
 
 struct accelerant_info *gInfo;
-struct bios_info *gBIOS;
 display_info *gDisplay[MAX_DISPLAY];
 
 
@@ -100,13 +99,11 @@
        // initialize global accelerant info structure
 
        gInfo = (accelerant_info *)malloc(sizeof(accelerant_info));
-       gBIOS = (bios_info *)malloc(sizeof(bios_info));
 
-       if (gInfo == NULL || gBIOS == NULL)
+       if (gInfo == NULL)
                return B_NO_MEMORY;
 
        memset(gInfo, 0, sizeof(accelerant_info));
-       memset(gBIOS, 0, sizeof(bios_info));
 
        for (uint32 id = 0; id < MAX_DISPLAY; id++) {
                gDisplay[id] = (display_info *)malloc(sizeof(display_info));
@@ -131,7 +128,6 @@
        if (ioctl(device, RADEON_GET_PRIVATE_DATA, &data,
                        sizeof(radeon_get_private_data)) != 0) {
                free(gInfo);
-               free(gBIOS);
                return B_ERROR;
        }
 
@@ -142,7 +138,6 @@
        status_t status = sharedCloner.InitCheck();
        if (status < B_OK) {
                free(gInfo);
-               free(gBIOS);
                TRACE("%s, failed shared area%i, %i\n",
                        __func__, data.shared_info_area, 
gInfo->shared_info_area);
                return status;
@@ -155,7 +150,6 @@
        status = regsCloner.InitCheck();
        if (status < B_OK) {
                free(gInfo);
-               free(gBIOS);
                return status;
        }
 
@@ -189,8 +183,6 @@
                free(gInfo);
        }
 
-       free(gBIOS);
-
        for (uint32 id = 0; id < MAX_DISPLAY; id++) {
                if (gDisplay[id] != NULL) {
                        free(gDisplay[id]->regs);

Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h
===================================================================
--- haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h  2011-08-02 
10:56:39 UTC (rev 42540)
+++ haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h  2011-08-02 
14:58:56 UTC (rev 42541)
@@ -10,6 +10,7 @@
 #define RADEON_HD_ACCELERANT_H
 
 
+#include "atom.h"
 #include "mode.h"
 #include "radeon_hd.h"
 #include "pll.h"
@@ -112,6 +113,7 @@
 
 
 extern accelerant_info *gInfo;
+extern atom_context *gAtomBIOS;
 extern display_info *gDisplay[MAX_DISPLAY];
 
 

Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp
===================================================================
--- haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp      2011-08-02 
10:56:39 UTC (rev 42540)
+++ haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp      2011-08-02 
14:58:56 UTC (rev 42541)
@@ -25,7 +25,7 @@
 #endif
 
 
-// AtomBios related calls
+atom_context *gAtomBIOS;
 
 
 status_t
@@ -54,10 +54,14 @@
        atom_card_info->pll_read = _read32;
        atom_card_info->pll_write = _write32;
 
-       // System VGA shadow bios? Why not (temporary)
-       atom_parse(atom_card_info, (void*)0xC0000);
+       // Point AtomBIOS parser to card bios and malloc gAtomBIOS
+       gAtomBIOS = atom_parse(atom_card_info, 
(void*)gInfo->shared_info->rom_base);
 
-       // TODO : we need to get a copy of the VGA bios :(
+       if (gAtomBIOS == NULL) {
+               TRACE("%s: couldn't parse system AtomBIOS\n", __func__);
+               return B_ERROR;
+       }
+
        #if 0
        rdev->mode_info.atom_context = atom_parse(atom_card_info, rdev->bios);
        mutex_init(&rdev->mode_info.atom_context->mutex);

Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.h
===================================================================
--- haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.h        2011-08-02 
10:56:39 UTC (rev 42540)
+++ haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.h        2011-08-02 
14:58:56 UTC (rev 42541)
@@ -14,12 +14,6 @@
 #include "atom.h"
 
 
-struct bios_info {
-       uint32 location;
-       uint32 size;
-};
-
-
 status_t bios_init();
 
 

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp     
2011-08-02 10:56:39 UTC (rev 42540)
+++ haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp     
2011-08-02 14:58:56 UTC (rev 42541)
@@ -102,6 +102,9 @@
        info.shared_info->frame_buffer_int
                = read32(info.registers + R6XX_CONFIG_FB_BASE);
 
+       info.shared_info->rom_base = info.pci->u.h0.rom_base;
+               // Grab ROM base from PCI (AtomBIOS location for card)
+
        strcpy(info.shared_info->device_identifier, info.device_identifier);
 
        // Pull active monitor VESA EDID from boot loader


Other related posts:

  • » [haiku-commits] r42541 - in haiku/trunk: headers/private/graphics/radeon_hd src/add-ons/accelerants/radeon_hd src/add-ons/kernel/drivers/graphics/radeon_hd - kallisti5