From 82bca02b9f241ecb76a6d64ffc4c289e0aee95ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 13 May 2006 19:48:17 +0000 Subject: [PATCH] You can now specify how much memory the chip can use for graphics memory via a settings file. However, you cannot specify less than the amount taken by the BIOS (ie. your settings will be ignored if you do). Just put something like the following into a "intel_extreme" settings file: graphics_memory_size 16 To allocate 16 MB in total. Note, whatever value you specify will be rounded up to the next power of two, ie. if you specify 6 MB, 8 will be taken. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17444 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../graphics/intel_extreme/intel_extreme.cpp | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp b/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp index 66e731013e..7e059dca5d 100644 --- a/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp +++ b/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme.cpp @@ -11,6 +11,7 @@ #include "driver.h" #include "utility.h" +#include #include #include @@ -91,6 +92,36 @@ init_overlay_registers(overlay_registers *registers) } +static size_t +determine_desired_memory_size() +{ + size_t size = 8; // 8 MB + + void *settings = load_driver_settings("intel_extreme"); + if (settings != NULL) { + size_t specified = 0; + const char *string = get_driver_parameter(settings, "graphics_memory_size", "0", "0"); + if (string != NULL) + specified = atoi(string); + + unload_driver_settings(settings); + + if (specified != 0) { + // take the next power of two + size_t desired = 1; + while (desired < specified) { + desired *= 2; + } + + if (desired < 128) + size = desired; + } + } + + return size << 20; +} + + static size_t determine_stolen_memory_size(intel_info &info) { @@ -258,14 +289,17 @@ intel_extreme_init(intel_info &info) // Determine the amount of "stolen" (ie. reserved by the BIOS) graphics memory // and see if we need to allocate some more. - // TODO: introduce a settings value which you can use to cut down the memory - // requirements, or make it allocate the memory on demand! + // TODO: make it allocate the memory on demand! + + size_t totalSize = determine_desired_memory_size(); size_t stolenSize = determine_stolen_memory_size(info); - dprintf(DEVICE_NAME ": detected %ld MB of stolen memory\n", stolenSize / 1024 / 1024); + totalSize = max_c(totalSize, stolenSize); + + dprintf(DEVICE_NAME ": detected %ld MB of stolen memory, reserving %ld MB total\n", + stolenSize / 1024 / 1024, totalSize / 1024 / 1024); AreaKeeper additionalMemoryCreator; - size_t totalSize = max_c(8 * 1024 * 1024, stolenSize); uint8 *additionalMemory; if (stolenSize < totalSize) {