ati_pcigart.c (145132) | ati_pcigart.c (148211) |
---|---|
1/* ati_pcigart.h -- ATI PCI GART support -*- linux-c -*- 2 * Created: Wed Dec 13 21:52:19 2000 by gareth@valinux.com 3 */ 4/*- 5 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 6 * All Rights Reserved. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a --- 13 unchanged lines hidden (view full) --- 22 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 * DEALINGS IN THE SOFTWARE. 26 * 27 * Authors: 28 * Gareth Hughes <gareth@valinux.com> 29 * | 1/* ati_pcigart.h -- ATI PCI GART support -*- linux-c -*- 2 * Created: Wed Dec 13 21:52:19 2000 by gareth@valinux.com 3 */ 4/*- 5 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 6 * All Rights Reserved. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a --- 13 unchanged lines hidden (view full) --- 22 * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 * DEALINGS IN THE SOFTWARE. 26 * 27 * Authors: 28 * Gareth Hughes <gareth@valinux.com> 29 * |
30 * $FreeBSD: head/sys/dev/drm/ati_pcigart.c 145132 2005-04-16 03:44:47Z anholt $ | 30 * $FreeBSD: head/sys/dev/drm/ati_pcigart.c 148211 2005-07-20 21:10:57Z anholt $ |
31 */ 32 33#include "dev/drm/drmP.h" 34 35#if PAGE_SIZE == 8192 36# define ATI_PCIGART_TABLE_ORDER 2 37# define ATI_PCIGART_TABLE_PAGES (1 << 2) 38#elif PAGE_SIZE == 4096 39# define ATI_PCIGART_TABLE_ORDER 3 40# define ATI_PCIGART_TABLE_PAGES (1 << 3) 41#elif 42# error - PAGE_SIZE not 8K or 4K 43#endif 44 45# define ATI_MAX_PCIGART_PAGES 8192 /* 32 MB aperture, 4K pages */ 46# define ATI_PCIGART_PAGE_SIZE 4096 /* PCI GART page size */ 47 48int drm_ati_pcigart_init(drm_device_t *dev, unsigned long *addr, | 31 */ 32 33#include "dev/drm/drmP.h" 34 35#if PAGE_SIZE == 8192 36# define ATI_PCIGART_TABLE_ORDER 2 37# define ATI_PCIGART_TABLE_PAGES (1 << 2) 38#elif PAGE_SIZE == 4096 39# define ATI_PCIGART_TABLE_ORDER 3 40# define ATI_PCIGART_TABLE_PAGES (1 << 3) 41#elif 42# error - PAGE_SIZE not 8K or 4K 43#endif 44 45# define ATI_MAX_PCIGART_PAGES 8192 /* 32 MB aperture, 4K pages */ 46# define ATI_PCIGART_PAGE_SIZE 4096 /* PCI GART page size */ 47 48int drm_ati_pcigart_init(drm_device_t *dev, unsigned long *addr, |
49 dma_addr_t *bus_addr) | 49 dma_addr_t *bus_addr, int is_pcie) |
50{ 51 drm_sg_mem_t *entry = dev->sg; 52 unsigned long address = 0; 53 unsigned long pages; 54 u32 *pci_gart=0, page_base, bus_address = 0; 55 int i, j, ret = 0; 56 57 if ( !entry ) { --- 18 unchanged lines hidden (view full) --- 76 77 bzero( pci_gart, ATI_MAX_PCIGART_PAGES * sizeof(u32) ); 78 79 for ( i = 0 ; i < pages ; i++ ) { 80 entry->busaddr[i] = vtophys( entry->handle + (i*PAGE_SIZE) ); 81 page_base = (u32) entry->busaddr[i]; 82 83 for (j = 0; j < (PAGE_SIZE / ATI_PCIGART_PAGE_SIZE); j++) { | 50{ 51 drm_sg_mem_t *entry = dev->sg; 52 unsigned long address = 0; 53 unsigned long pages; 54 u32 *pci_gart=0, page_base, bus_address = 0; 55 int i, j, ret = 0; 56 57 if ( !entry ) { --- 18 unchanged lines hidden (view full) --- 76 77 bzero( pci_gart, ATI_MAX_PCIGART_PAGES * sizeof(u32) ); 78 79 for ( i = 0 ; i < pages ; i++ ) { 80 entry->busaddr[i] = vtophys( entry->handle + (i*PAGE_SIZE) ); 81 page_base = (u32) entry->busaddr[i]; 82 83 for (j = 0; j < (PAGE_SIZE / ATI_PCIGART_PAGE_SIZE); j++) { |
84 *pci_gart++ = cpu_to_le32( page_base ); | 84 if (is_pcie) { 85 *pci_gart = (cpu_to_le32(page_base)>>8) | 0xc; 86 DRM_DEBUG("PCIE: %d %08X %08X to %p\n", i, 87 page_base, (cpu_to_le32(page_base)>>8)|0xc, 88 pci_gart); 89 } else 90 *pci_gart = cpu_to_le32(page_base); 91 pci_gart++; |
85 page_base += ATI_PCIGART_PAGE_SIZE; 86 } 87 } 88 89 DRM_MEMORYBARRIER(); 90 91 ret = 1; 92 --- 24 unchanged lines hidden --- | 92 page_base += ATI_PCIGART_PAGE_SIZE; 93 } 94 } 95 96 DRM_MEMORYBARRIER(); 97 98 ret = 1; 99 --- 24 unchanged lines hidden --- |