diff options
| author | Dave Jones <davej@codemonkey.org.uk> | 2003-01-02 16:04:37 -0100 |
|---|---|---|
| committer | Dave Jones <davej@tetrachloride.(none)> | 2003-01-02 16:04:37 -0100 |
| commit | baa151e7ab600f7ea1e8aa46ae79807d61c10013 (patch) | |
| tree | c365ef10956dd8e0c59925aeea76c7e644d04a2b | |
| parent | 8dfa03ebf25ac7cfbf204829acd6ef9d55192f03 (diff) | |
[AGP] add agp_num_entries() function to determine GATT table size - reserved IOMMU entries.
Currently, only the K8 GART needs this, but this is cleaner than
exporting the agp_reserved_memory variable.
| -rw-r--r-- | drivers/char/agp/agp.h | 4 | ||||
| -rw-r--r-- | drivers/char/agp/amd-k8-agp.c | 7 | ||||
| -rw-r--r-- | drivers/char/agp/generic.c | 36 |
3 files changed, 40 insertions, 7 deletions
diff --git a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h index e001b44a5b39..8c1e3d9e09ac 100644 --- a/drivers/char/agp/agp.h +++ b/drivers/char/agp/agp.h @@ -1,5 +1,6 @@ /* - * AGPGART module version 0.99 + * AGPGART module version 0.100 + * Copyright (C) 2002 Dave Jones * Copyright (C) 1999 Jeff Hartmann * Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Xi Graphics, Inc. @@ -46,6 +47,7 @@ void agp_generic_destroy_page(void *addr); int agp_generic_suspend(void); void agp_generic_resume(void); void agp_free_key(int key); +int agp_num_entries(void); #define PFX "agpgart: " diff --git a/drivers/char/agp/amd-k8-agp.c b/drivers/char/agp/amd-k8-agp.c index f7a2a3f81d0b..b2d7f7c1efac 100644 --- a/drivers/char/agp/amd-k8-agp.c +++ b/drivers/char/agp/amd-k8-agp.c @@ -14,8 +14,6 @@ #include <linux/agp_backend.h> #include "agp.h" -extern int agp_memory_reserved; - static u_int64_t pci_read64 (struct pci_dev *dev, int reg) { union { @@ -48,16 +46,13 @@ static void pci_write64 (struct pci_dev *dev, int reg, u64 value) static int x86_64_insert_memory(agp_memory * mem, off_t pg_start, int type) { int i, j, num_entries; - void *temp; long tmp; u32 pte; u64 addr; temp = agp_bridge.current_size; - num_entries = A_SIZE_32(temp)->num_entries; - - num_entries -= agp_memory_reserved>>PAGE_SHIFT; + num_entries = agp_num_entries(); if (type != 0 || mem->type != 0) return -EINVAL; diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index cc5ab2feb26e..5b7f3282bb70 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c @@ -203,6 +203,40 @@ static int agp_return_size(void) return current_size; } +int agp_num_entries(void) +{ + int num_entries; + void *temp; + + temp = agp_bridge.current_size; + + switch (agp_bridge.size_type) { + case U8_APER_SIZE: + num_entries = A_SIZE_8(temp)->num_entries; + break; + case U16_APER_SIZE: + num_entries = A_SIZE_16(temp)->num_entries; + break; + case U32_APER_SIZE: + num_entries = A_SIZE_32(temp)->num_entries; + break; + case LVL2_APER_SIZE: + num_entries = A_SIZE_LVL2(temp)->num_entries; + break; + case FIXED_APER_SIZE: + num_entries = A_SIZE_FIX(temp)->num_entries; + break; + default: + num_entries = 0; + break; + } + + num_entries -= agp_memory_reserved>>PAGE_SHIFT; + if (num_entries<0) + num_entries = 0; + return num_entries; +} + /* Routine to copy over information structure */ int agp_copy_info(agp_kern_info * info) @@ -713,3 +747,5 @@ EXPORT_SYMBOL(agp_generic_alloc_by_type); EXPORT_SYMBOL(agp_generic_free_by_type); EXPORT_SYMBOL(global_cache_flush); +EXPORT_SYMBOL_GPL(agp_num_entries); + |
