* Fixed the AGP interface to correctly use phys_addr_t where needed.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36962 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2010-05-28 09:19:11 +00:00
parent aa34e81cfc
commit 9a063f059c
3 changed files with 23 additions and 20 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2004-2008, Haiku, Inc. All Rights Reserved.
* Copyright 2004-2010, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _AGP_H_
@ -18,17 +18,17 @@ typedef struct agp_info {
uchar class_sub; /* specific device function */
uchar class_base; /* device type (display vs host bridge) */
struct {
uint32 capability_id; /* AGP capability register as defined in the AGP standard */
uint32 status; /* AGP STATUS register as defined in the AGP standard */
uint32 command; /* AGP COMMAND register as defined in the AGP standard */
uint32 capability_id; /* AGP capability register */
uint32 status; /* AGP status register */
uint32 command; /* AGP command register */
} interface;
} agp_info;
typedef struct aperture_info {
addr_t physical_base;
addr_t base;
size_t size;
size_t reserved_size;
phys_addr_t physical_base;
addr_t base;
size_t size;
size_t reserved_size;
} aperture_info;
/* flags for allocate_memory */
@ -43,13 +43,13 @@ typedef struct gart_bus_module_info gart_bus_module_info;
typedef struct agp_gart_module_info {
bus_manager_info info;
// AGP functionality
/* AGP functionality */
status_t (*get_nth_agp_info)(uint32 index, agp_info *info);
status_t (*acquire_agp)(void);
void (*release_agp)(void);
uint32 (*set_agp_mode)(uint32 command);
// GART functionality
/* GART functionality */
aperture_id (*map_aperture)(uint8 bus, uint8 device, uint8 function,
size_t size, addr_t *_apertureBase);
aperture_id (*map_custom_aperture)(gart_bus_module_info *module,
@ -59,7 +59,7 @@ typedef struct agp_gart_module_info {
status_t (*allocate_memory)(aperture_id id, size_t size,
size_t alignment, uint32 flags, addr_t *_apertureBase,
addr_t *_physicalBase);
phys_addr_t *_physicalBase);
status_t (*free_memory)(aperture_id id, addr_t apertureBase);
status_t (*reserve_aperture)(aperture_id id, size_t size,
addr_t *_apertureBase);
@ -90,7 +90,7 @@ struct agp_gart_bus_module_info {
status_t (*get_aperture_info)(void *aperture, aperture_info *info);
status_t (*set_aperture_size)(void *aperture, size_t size);
status_t (*bind_page)(void *aperture, uint32 offset,
addr_t physicalAddress);
phys_addr_t physicalAddress);
status_t (*unbind_page)(void *aperture, uint32 offset);
void (*flush_tlbs)(void *aperture);
};
@ -120,4 +120,5 @@ struct agp_gart_bus_module_info {
/* masks for command register bits */
#define AGP_ENABLE 0x00000100 /* set to 1 if AGP should be enabled */
#endif /* _AGP_H_ */

View File

@ -1,5 +1,5 @@
/*
* Copyright 2008-2009, Axel Dörfler, axeld@pinc-software.de.
* Copyright 2008-2010, Axel Dörfler, axeld@pinc-software.de.
* Copyright 2004-2006, Rudolf Cornelissen. All rights reserved.
*
* Distributed under the terms of the MIT License.
@ -660,7 +660,8 @@ Aperture::BindMemory(aperture_memory *memory, addr_t address, size_t size)
else
page = memory->pages[index];
physicalAddress = page->physical_page_number << PAGE_SHIFT;
physicalAddress
= (phys_addr_t)page->physical_page_number << PAGE_SHIFT;
#endif
}
@ -1006,9 +1007,8 @@ get_aperture_info(aperture_id id, aperture_info *info)
static status_t
allocate_memory(aperture_id id, size_t size, size_t alignment, uint32 flags,
addr_t *_apertureBase, addr_t *_physicalBase)
addr_t *_apertureBase, phys_addr_t *_physicalBase)
{
// TODO: _physicalBase should be a phys_addr_t*!
if ((flags & ~APERTURE_PUBLIC_FLAGS_MASK) != 0 || _apertureBase == NULL)
return B_BAD_VALUE;
@ -1034,7 +1034,8 @@ allocate_memory(aperture_id id, size_t size, size_t alignment, uint32 flags,
if (_physicalBase != NULL && (flags & B_APERTURE_NEED_PHYSICAL) != 0) {
#if defined(__HAIKU__) && !defined(GART_TEST)
*_physicalBase = memory->page->physical_page_number * B_PAGE_SIZE;
*_physicalBase
= (phys_addr_t)memory->page->physical_page_number * B_PAGE_SIZE;
#else
physical_entry entry;
status = get_memory_map((void *)memory->base, B_PAGE_SIZE, &entry, 1);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2008-2009, Axel Dörfler, axeld@pinc-software.de.
* Copyright 2008-2010, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
@ -253,8 +253,9 @@ determine_memory_sizes(intel_info &info, size_t &gttSize, size_t &stolenSize)
static void
set_gtt_entry(intel_info &info, uint32 offset, addr_t physicalAddress)
set_gtt_entry(intel_info &info, uint32 offset, phys_addr_t physicalAddress)
{
// TODO: this is not 64-bit safe!
write32(info.gtt_base + (offset >> GTT_PAGE_SHIFT),
(uint32)physicalAddress | GTT_ENTRY_VALID);
}
@ -462,7 +463,7 @@ intel_set_aperture_size(void *aperture, size_t size)
static status_t
intel_bind_page(void *aperture, uint32 offset, addr_t physicalAddress)
intel_bind_page(void *aperture, uint32 offset, phys_addr_t physicalAddress)
{
//TRACE("bind_page(offset %lx, physical %lx)\n", offset, physicalAddress);