ast_tool.c revision 7fe5393c
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 "xf86PciInfo.h" 4015fb4814Smrg#include "xf86Pci.h" 4115fb4814Smrg 4215fb4814Smrg/* framebuffer offscreen manager */ 4315fb4814Smrg#include "xf86fbman.h" 4415fb4814Smrg 4515fb4814Smrg/* include xaa includes */ 4615fb4814Smrg#include "xaarop.h" 4715fb4814Smrg 4815fb4814Smrg/* H/W cursor support */ 4915fb4814Smrg#include "xf86Cursor.h" 5015fb4814Smrg 5115fb4814Smrg/* Driver specific headers */ 5215fb4814Smrg#include "ast.h" 5315fb4814Smrg 5415fb4814Smrg/* Prototype type declaration*/ 5515fb4814SmrgBool ASTMapMem(ScrnInfoPtr pScrn); 5615fb4814SmrgBool ASTUnmapMem(ScrnInfoPtr pScrn); 5715fb4814SmrgBool ASTMapMMIO(ScrnInfoPtr pScrn); 5815fb4814Smrgvoid ASTUnmapMMIO(ScrnInfoPtr pScrn); 5915fb4814Smrg 6015fb4814SmrgBool 6115fb4814SmrgASTMapMem(ScrnInfoPtr pScrn) 6215fb4814Smrg{ 6315fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 6415fb4814Smrg 65de78e416Smrg#ifndef XSERVER_LIBPCIACCESS 6615fb4814Smrg pAST->FBVirtualAddr = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER, 6715fb4814Smrg pAST->PciTag, 6815fb4814Smrg pAST->FBPhysAddr, pAST->FbMapSize); 69de78e416Smrg#else 70de78e416Smrg { 71de78e416Smrg void** result = (void**)&pAST->FBVirtualAddr; 72de78e416Smrg int err = pci_device_map_range(pAST->PciInfo, 73de78e416Smrg pAST->FBPhysAddr, 74de78e416Smrg pAST->FbMapSize, 75de78e416Smrg PCI_DEV_MAP_FLAG_WRITABLE | 76de78e416Smrg PCI_DEV_MAP_FLAG_WRITE_COMBINE, 77de78e416Smrg result); 787fe5393cSmrg 797fe5393cSmrg if (err) 80de78e416Smrg return FALSE; 81de78e416Smrg } 82de78e416Smrg#endif 837fe5393cSmrg 8415fb4814Smrg if (!pAST->FBVirtualAddr) 8515fb4814Smrg return FALSE; 8615fb4814Smrg 8715fb4814Smrg return TRUE; 8815fb4814Smrg} 8915fb4814Smrg 9015fb4814SmrgBool 9115fb4814SmrgASTUnmapMem(ScrnInfoPtr pScrn) 9215fb4814Smrg{ 9315fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 94de78e416Smrg 957fe5393cSmrg#ifndef XSERVER_LIBPCIACCESS 9615fb4814Smrg xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pAST->FBVirtualAddr, 9715fb4814Smrg pAST->FbMapSize); 98de78e416Smrg#else 99de78e416Smrg pci_device_unmap_range(pAST->PciInfo, pAST->FBVirtualAddr, pAST->FbMapSize); 100de78e416Smrg#endif 1017fe5393cSmrg 10215fb4814Smrg pAST->FBVirtualAddr = 0; 1037fe5393cSmrg 10415fb4814Smrg return TRUE; 10515fb4814Smrg} 10615fb4814Smrg 10715fb4814SmrgBool 10815fb4814SmrgASTMapMMIO(ScrnInfoPtr pScrn) 10915fb4814Smrg{ 11015fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 111de78e416Smrg#ifndef XSERVER_LIBPCIACCESS 112de78e416Smrg int mmioFlags; 11315fb4814Smrg 11415fb4814Smrg#if !defined(__alpha__) 11515fb4814Smrg mmioFlags = VIDMEM_MMIO | VIDMEM_READSIDEEFFECT; 11615fb4814Smrg#else 11715fb4814Smrg mmioFlags = VIDMEM_MMIO | VIDMEM_READSIDEEFFECT | VIDMEM_SPARSE; 11815fb4814Smrg#endif 11915fb4814Smrg 120de78e416Smrg 12115fb4814Smrg pAST->MMIOVirtualAddr = xf86MapPciMem(pScrn->scrnIndex, mmioFlags, 12215fb4814Smrg pAST->PciTag, 12315fb4814Smrg pAST->MMIOPhysAddr, pAST->MMIOMapSize); 124de78e416Smrg 125de78e416Smrg#else 126de78e416Smrg { 127de78e416Smrg void** result = (void**)&pAST->MMIOVirtualAddr; 128de78e416Smrg int err = pci_device_map_range(pAST->PciInfo, 129de78e416Smrg pAST->MMIOPhysAddr, 130de78e416Smrg pAST->MMIOMapSize, 131de78e416Smrg PCI_DEV_MAP_FLAG_WRITABLE, 132de78e416Smrg result); 1337fe5393cSmrg 1347fe5393cSmrg if (err) 135de78e416Smrg return FALSE; 136de78e416Smrg } 137de78e416Smrg 138de78e416Smrg#endif 13915fb4814Smrg if (!pAST->MMIOVirtualAddr) 14015fb4814Smrg return FALSE; 14115fb4814Smrg 14215fb4814Smrg return TRUE; 14315fb4814Smrg} 14415fb4814Smrg 14515fb4814Smrgvoid 14615fb4814SmrgASTUnmapMMIO(ScrnInfoPtr pScrn) 14715fb4814Smrg{ 14815fb4814Smrg ASTRecPtr pAST = ASTPTR(pScrn); 14915fb4814Smrg 150de78e416Smrg#ifndef XSERVER_LIBPCIACCESS 15115fb4814Smrg xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pAST->MMIOVirtualAddr, 15215fb4814Smrg pAST->MMIOMapSize); 153de78e416Smrg#else 154de78e416Smrg pci_device_unmap_range(pAST->PciInfo, pAST->MMIOVirtualAddr, pAST->MMIOMapSize); 155de78e416Smrg#endif 15615fb4814Smrg pAST->MMIOVirtualAddr = 0; 1577fe5393cSmrg 15815fb4814Smrg} 15915fb4814Smrg 16015fb4814Smrg 161