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