⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atimach64io.h

📁 x.org上有关ati系列显卡最新驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atimach64io.h,v 1.15 2003/04/23 21:51:29 tsi Exp $ *//* * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of Marc Aurele La France not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission.  Marc Aurele La France makes no representations * about the suitability of this software for any purpose.  It is provided * "as-is" without express or implied warranty. * * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * DRI support by: *    Manuel Teira *    Leif Delgass <ldelgass@retinalburn.net> */#ifndef ___ATIMACH64IO_H___#if !defined(___ATI_H___) && defined(XFree86Module)# error Missing #include "ati.h" before #include "atimach64io.h"# undef XFree86Module#endif#define ___ATIMACH64IO_H___ 1#include "atiio.h"#include "atistruct.h"/* * A few important notes on some of the I/O statements provided: * * inl/outl     32-bit R/W through PIO space.  The register is specified as the *              actual PIO address.  These are actually defined in compiler.h. * * inw/outw     16-bit counterparts to inl/outl.  Not used for Mach64 support. * * inb/outb     8-bit counterparts to inl/outl. * * inm/outm     32-bit R/W through MMIO space.  The register is specified as *              the actual MMIO offset (with Block 1 following Block 0), which, *              in this case, is equivalent to the register's IOPortTag from *              atiregs.h.  Can be used for those few non-FIFO'ed registers *              outside of Block 0's first 256 bytes.  inm() can also be used *              for FIFO'ed registers if, and only if, it can be guaranteed to *              not have been previously FIFO'ed (e.g. when the engine is *              idle).  pATI->pBlock array elements must have been previously *              set up by ATIMapApertures(). * * outf         32-bit write through MMIO cache.  Identical to outm() but *              intended for FIFO'ed registers.  There is no inf() provided. * * inr/outr     32-bit R/W through PIO or MMIO.  Which one depends on the *              machine architecture.  The register is specified as a IOPortTag *              from atiregs.h.  Can only be used for registers in the first *              256 bytes of MMIO space (in Block 0).  Note that all of these *              registers are non-FIFO'ed. * * in8/out8     8-bit counterparts to inr/outr. * * For portability reasons, inr/outr/in8/out8 should be used in preference to * inl/outl/inb/outb to/from any register space starting with CRTC_H_TOTAL_DISP * but before DST_OFF_PITCH (in the order defined by atiregs.h).  None of * inm/outm/outf should ever be used for these registers. * * outf()'s should be grouped together as much as possible, while respecting * any ordering constraints the engine might impose.  Groups larger than 16 * outf()'s should be split up into two or more groups as needed (but not * necessarily wanted).  The outf() groups that result should be immediately * preceeded by an ATIMach64WaitForFIFO(n) call, where "n" is the number of * outf()'s in the group with the exception that groups containing a single * outf() should not be thus preceeded.  This means "n" should not be less than * 2, nor larger than 16. *//* * Cave canem (or it WILL bite you):  All Mach64 non-VGA registers are * ================================   little-endian, no matter how they are *                                    accessed (nor by what). */#define inm(_Register)                                                   \    MMIO_IN32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)],            \              (_Register) & MM_IO_SELECT)#define outm(_Register, _Value)                                          \    MMIO_OUT32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)],           \               (_Register) & MM_IO_SELECT, _Value)#ifdef AVOID_CPIO#   define inr(_Register) \        MMIO_IN32(pATI->pBlock[0], (_Register) & MM_IO_SELECT)#   define outr(_Register, _Value) \        MMIO_OUT32(pATI->pBlock[0], (_Register) & MM_IO_SELECT, _Value)#   define in8(_Register)                                                \        MMIO_IN8(pATI->pBlock[0],                                        \                 (_Register) & (MM_IO_SELECT | IO_BYTE_SELECT))#   define out8(_Register, _Value)                                       \        MMIO_OUT8(pATI->pBlock[0],                                       \                  (_Register) & (MM_IO_SELECT | IO_BYTE_SELECT), _Value)/* Cause a cpp syntax error if any of these are used */#undef inb#undef inw#undef inl#undef outb#undef outw#undef outl#define inb()            /* Nothing */#define inw()            /* Nothing */#define inl()            /* Nothing */#define outb()           /* Nothing */#define outw()           /* Nothing */#define outl()           /* Nothing */#else /* AVOID_CPIO */#   define ATIIOPort(_PortTag)                                 \        (((pATI->CPIODecoding == SPARSE_IO) ?                  \          ((_PortTag) & (SPARSE_IO_SELECT | IO_BYTE_SELECT)) : \          ((_PortTag) & (BLOCK_IO_SELECT | IO_BYTE_SELECT))) | \         pATI->CPIOBase)#   define inr(_Register) \        inl(ATIIOPort(_Register))#   define outr(_Register, _Value) \        outl(ATIIOPort(_Register), _Value)#   define in8(_Register) \        inb(ATIIOPort(_Register))#   define out8(_Register, _Value) \        outb(ATIIOPort(_Register), _Value)#endif /* AVOID_CPIO */extern void ATIMach64PollEngineStatus(ATIPtr);/* * MMIO cache definitions. * * Many FIFO'ed registers can be cached by the driver.  Registers that qualify * for caching must not contain values that can change without driver * intervention.  Thus registers that contain hardware counters, strobe lines, * etc., cannot be cached.  This caching is intended to minimise FIFO use. * There is therefore not much point to enable it for non-FIFO'ed registers. * * The cache for a particular 32-bit register is enabled by coding a * CacheRegister() line for that register in the ATIMach64Set() function.  The * integrity of the cache for a particular register should be verified by the * ATIMach64Sync() function.  This code should be kept in register order, as * defined in atiregs.h. */#define CacheByte(___Register) pATI->MMIOCached[CacheSlotOf(___Register) >> 3]#define CacheBit(___Register)  (0x80U >> (CacheSlotOf(___Register) & 0x07U))#define RegisterIsCached(__Register) \    (CacheByte(__Register) & CacheBit(__Register))#define CacheSlot(__Register) pATI->MMIOCache[CacheSlotOf(__Register)]#define CacheRegister(__Register) \    CacheByte(__Register) |= CacheBit(__Register)#define UncacheRegister(__Register) \    CacheByte(__Register) &= ~CacheBit(__Register)/* This would be quite a bit slower as a function */#define outf(_Register, _Value)                                        \    do                                                                 \    {                                                                  \        CARD32 _IOValue = (_Value);                                    \                                                                       \        if (!RegisterIsCached(_Register) ||                            \            (_IOValue != CacheSlot(_Register)))                        \        {                                                              \            while (!pATI->nAvailableFIFOEntries--)                     \                ATIMach64PollEngineStatus(pATI);                       \            MMIO_OUT32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)], \                       (_Register) & MM_IO_SELECT, _IOValue);          \            CacheSlot(_Register) = _IOValue;                           \            pATI->EngineIsBusy = TRUE;                                 \        }                                                              \    } while (0)/* * This is no longer as critical, especially for _n == 1.  However, * there is still a need to ensure _n <= pATI->nFIFOEntries. */#define ATIMach64WaitForFIFO(_pATI, _n)           \    while ((_pATI)->nAvailableFIFOEntries < (_n)) \        ATIMach64PollEngineStatus(_pATI)#define ATIMach64WaitForIdle(_pATI)         \    while ((_pATI)->EngineIsBusy)           \        ATIMach64PollEngineStatus(_pATI)#ifdef XF86DRI_DEVEL /* * DRI Sync and Lock definitions.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -