Author: kallisti5 Date: 2011-08-07 07:19:42 +0200 (Sun, 07 Aug 2011) New Revision: 42591 Changeset: https://dev.haiku-os.org/changeset/42591 Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.h haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp Log: * add allocation of atombios fb scratch * add free of allocated fb scratch Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp =================================================================== --- haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp 2011-08-07 03:48:58 UTC (rev 42590) +++ haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.cpp 2011-08-07 05:19:42 UTC (rev 42591) @@ -1272,6 +1272,7 @@ { if (ctx != NULL) { free(ctx->iio); + free(ctx->scratch); delete_sem(ctx->exec_sem); } @@ -1319,3 +1320,32 @@ return B_OK; } + +status_t +atom_allocate_fb_scratch(atom_context *ctx) +{ + int index = GetIndexIntoMasterTable(DATA, VRAM_UsageByFirmware); + uint16 data_offset; + int usage_bytes = 0; + _ATOM_VRAM_USAGE_BY_FIRMWARE *firmware; + + if (atom_parse_data_header(ctx, index, NULL, NULL, NULL, &data_offset)) { + firmware = (_ATOM_VRAM_USAGE_BY_FIRMWARE *) + ((uint16*)ctx->bios + data_offset); + + TRACE("Atom firmware requested 0x%" B_PRIX32 " %" B_PRIu16 "kb\n", + firmware->asFirmwareVramReserveInfo[0].ulStartAddrUsedByFirmware, + firmware->asFirmwareVramReserveInfo[0].usFirmwareUseInKb); + + usage_bytes + = firmware->asFirmwareVramReserveInfo[0].usFirmwareUseInKb * 1024; + } + if (usage_bytes == 0) + usage_bytes = 20 * 1024; + /* allocate some scratch memory */ + ctx->scratch = (uint32*)malloc(usage_bytes); + if (!ctx->scratch) + return B_NO_MEMORY; + + return B_OK; +} Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.h =================================================================== --- haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.h 2011-08-07 03:48:58 UTC (rev 42590) +++ haiku/trunk/src/add-ons/accelerants/radeon_hd/atombios/atom.h 2011-08-07 05:19:42 UTC (rev 42591) @@ -154,5 +154,7 @@ uint8 * crev); status_t atom_asic_init(atom_context *); void atom_destroy(atom_context *); +status_t atom_allocate_fb_scratch(atom_context *ctx); + #endif Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp =================================================================== --- haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp 2011-08-07 03:48:58 UTC (rev 42590) +++ haiku/trunk/src/add-ons/accelerants/radeon_hd/bios.cpp 2011-08-07 05:19:42 UTC (rev 42591) @@ -111,6 +111,7 @@ // Post card radeon_bios_init_scratch(); + atom_allocate_fb_scratch(gAtomContext); return B_OK; }