115fb4814Smrg/* 215fb4814Smrg * Copyright (c) 2005 ASPEED Technology Inc. 315fb4814Smrg * 415fb4814Smrg * Permission to use, copy, modify, distribute, and sell this software and its 515fb4814Smrg * documentation for any purpose is hereby granted without fee, provided that 615fb4814Smrg * the above copyright notice appear in all copies and that both that 715fb4814Smrg * copyright notice and this permission notice appear in supporting 815fb4814Smrg * documentation, and that the name of the authors not be used in 915fb4814Smrg * advertising or publicity pertaining to distribution of the software without 1015fb4814Smrg * specific, written prior permission. The authors makes no representations 1115fb4814Smrg * about the suitability of this software for any purpose. It is provided 1215fb4814Smrg * "as is" without express or implied warranty. 1315fb4814Smrg * 1415fb4814Smrg * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1515fb4814Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1615fb4814Smrg * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 1715fb4814Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 1815fb4814Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 1915fb4814Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 2015fb4814Smrg * PERFORMANCE OF THIS SOFTWARE. 2115fb4814Smrg */ 227fe5393cSmrg 2315fb4814Smrg#ifdef HAVE_CONFIG_H 2415fb4814Smrg#include <config.h> 2515fb4814Smrg#endif 2615fb4814Smrg#include "xf86.h" 2715fb4814Smrg#include "xf86_OSproc.h" 2815fb4814Smrg#include "xf86cmap.h" 2915fb4814Smrg#include "compiler.h" 3015fb4814Smrg#include "vgaHW.h" 3115fb4814Smrg#include "mipointer.h" 3215fb4814Smrg#include "micmap.h" 3315fb4814Smrg 3415fb4814Smrg#include "fb.h" 3515fb4814Smrg#include "regionstr.h" 3615fb4814Smrg#include "xf86xv.h" 3715fb4814Smrg#include <X11/extensions/Xv.h> 3815fb4814Smrg 3915fb4814Smrg#include "xf86Pci.h" 4015fb4814Smrg 4115fb4814Smrg/* framebuffer offscreen manager */ 4215fb4814Smrg#include "xf86fbman.h" 4315fb4814Smrg 4415fb4814Smrg/* include xaa includes */ 4515fb4814Smrg#include "xaarop.h" 4615fb4814Smrg 4715fb4814Smrg/* H/W cursor support */ 4815fb4814Smrg#include "xf86Cursor.h" 4915fb4814Smrg 5015fb4814Smrg/* Driver specific headers */ 5115fb4814Smrg#include "ast.h" 5215fb4814Smrg 5315fb4814SmrgBool 5415fb4814SmrgASTMapMem(ScrnInfoPtr pScrn) 5515fb4814Smrg{ 5615fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 5715fb4814Smrg 58de78e416Smrg#ifndef XSERVER_LIBPCIACCESS 5915fb4814Smrg pAST->FBVirtualAddr = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, 6015fb4814Smrg pAST->PciTag, 6115fb4814Smrg pAST->FBPhysAddr, pAST->FbMapSize); 62de78e416Smrg#else 63de78e416Smrg { 64de78e416Smrg void** result = (void**)&pAST->FBVirtualAddr; 65de78e416Smrg int err = pci_device_map_range(pAST->PciInfo, 66de78e416Smrg pAST->FBPhysAddr, 67de78e416Smrg pAST->FbMapSize, 68de78e416Smrg PCI_DEV_MAP_FLAG_WRITABLE | 69de78e416Smrg PCI_DEV_MAP_FLAG_WRITE_COMBINE, 70de78e416Smrg result); 717fe5393cSmrg 727fe5393cSmrg if (err) 73de78e416Smrg return FALSE; 74de78e416Smrg } 75de78e416Smrg#endif 767fe5393cSmrg 7715fb4814Smrg if (!pAST->FBVirtualAddr) 7815fb4814Smrg return FALSE; 7915fb4814Smrg 8015fb4814Smrg return TRUE; 8115fb4814Smrg} 8215fb4814Smrg 8315fb4814SmrgBool 8415fb4814SmrgASTUnmapMem(ScrnInfoPtr pScrn) 8515fb4814Smrg{ 8615fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 87de78e416Smrg 887fe5393cSmrg#ifndef XSERVER_LIBPCIACCESS 8915fb4814Smrg xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pAST->FBVirtualAddr, 9015fb4814Smrg pAST->FbMapSize); 91de78e416Smrg#else 92de78e416Smrg pci_device_unmap_range(pAST->PciInfo, pAST->FBVirtualAddr, pAST->FbMapSize); 93de78e416Smrg#endif 947fe5393cSmrg 9515fb4814Smrg pAST->FBVirtualAddr = 0; 967fe5393cSmrg 9715fb4814Smrg return TRUE; 9815fb4814Smrg} 9915fb4814Smrg 10015fb4814SmrgBool 10115fb4814SmrgASTMapMMIO(ScrnInfoPtr pScrn) 10215fb4814Smrg{ 10315fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 104de78e416Smrg#ifndef XSERVER_LIBPCIACCESS 105de78e416Smrg int mmioFlags; 10615fb4814Smrg 10715fb4814Smrg#if !defined(__alpha__) 10815fb4814Smrg mmioFlags = VIDMEM_MMIO | VIDMEM_READSIDEEFFECT; 10915fb4814Smrg#else 11015fb4814Smrg mmioFlags = VIDMEM_MMIO | VIDMEM_READSIDEEFFECT | VIDMEM_SPARSE; 11115fb4814Smrg#endif 11215fb4814Smrg 113de78e416Smrg 11415fb4814Smrg pAST->MMIOVirtualAddr = xf86MapPciMem(pScrn->scrnIndex, mmioFlags, 11515fb4814Smrg pAST->PciTag, 11615fb4814Smrg pAST->MMIOPhysAddr, pAST->MMIOMapSize); 117de78e416Smrg 118de78e416Smrg#else 119de78e416Smrg { 120de78e416Smrg void** result = (void**)&pAST->MMIOVirtualAddr; 121de78e416Smrg int err = pci_device_map_range(pAST->PciInfo, 122de78e416Smrg pAST->MMIOPhysAddr, 123de78e416Smrg pAST->MMIOMapSize, 124de78e416Smrg PCI_DEV_MAP_FLAG_WRITABLE, 125de78e416Smrg result); 1267fe5393cSmrg 1277fe5393cSmrg if (err) 128de78e416Smrg return FALSE; 129de78e416Smrg } 130de78e416Smrg 131de78e416Smrg#endif 13215fb4814Smrg if (!pAST->MMIOVirtualAddr) 13315fb4814Smrg return FALSE; 13415fb4814Smrg 13515fb4814Smrg return TRUE; 13615fb4814Smrg} 13715fb4814Smrg 13815fb4814Smrgvoid 13915fb4814SmrgASTUnmapMMIO(ScrnInfoPtr pScrn) 14015fb4814Smrg{ 14115fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 14215fb4814Smrg 143de78e416Smrg#ifndef XSERVER_LIBPCIACCESS 14415fb4814Smrg xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pAST->MMIOVirtualAddr, 14515fb4814Smrg pAST->MMIOMapSize); 146de78e416Smrg#else 147de78e416Smrg pci_device_unmap_range(pAST->PciInfo, pAST->MMIOVirtualAddr, pAST->MMIOMapSize); 148de78e416Smrg#endif 14915fb4814Smrg pAST->MMIOVirtualAddr = 0; 1507fe5393cSmrg 15115fb4814Smrg} 15215fb4814Smrg 15315fb4814Smrg 154