b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * documentation for any purpose is hereby granted without fee, provided that
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * the above copyright notice appear in all copies and that both that copyright
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * notice and this permission notice appear in supporting documentation, and
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * that the name of Marc Aurele La France not be used in advertising or
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * publicity pertaining to distribution of the software without specific,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * written prior permission. Marc Aurele La France makes no representations
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * about the suitability of this software for any purpose. It is provided
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * "as-is" without express or implied warranty.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * PERFORMANCE OF THIS SOFTWARE.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#ifndef __MIBANK_H__
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define __MIBANK_H__ 1
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "scrnintstr.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Banking external interface.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * This is the banking function type. The return value is normally zero.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Non-zero returns can be used to implement the likes of scanline interleave,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * etc.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef int miBankProc(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScreenPtr /*pScreen*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*iBank*/
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef miBankProc *miBankProcPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _miBankInfo
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync /*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Banking refers to the use of one or more apertures (in the server's
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * address space) to access various parts of a potentially larger hardware
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * frame buffer.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Three different banking schemes are supported:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Single banking is indicated when pBankA and pBankB are equal and all
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * three miBankProcPtr's point to the same function. Here, both reads and
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * writes through the aperture access the same hardware location.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Shared banking is indicated when pBankA and pBankB are equal but the
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * source and destination functions differ. Here reads through the
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * aperture do not necessarily access the same hardware location as writes.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Double banking is indicated when pBankA and pBankB differ. Here two
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * independent apertures are used to provide read/write access to
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * potentially different hardware locations.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Any other combination will result in no banking.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync miBankProcPtr SetSourceBank; /* Set pBankA bank number */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync miBankProcPtr SetDestinationBank; /* Set pBankB bank number */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync miBankProcPtr SetSourceAndDestinationBanks; /* Set both bank numbers */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync pointer pBankA; /* First aperture location */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync pointer pBankB; /* First or second aperture location */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync /*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * BankSize is in units of sizeof(char) and is the size of each bank.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned long BankSize;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync /*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * nBankDepth is the colour depth associated with the maximum number of a
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * pixel's bits that are simultaneously accessible through the frame buffer
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * aperture.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int nBankDepth;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} miBankInfoRec, *miBankInfoPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT Bool
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncmiInitializeBanking(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScreenPtr /*pScreen*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*xsize*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*ysize*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*width*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync miBankInfoPtr /*pBankInfo*/
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * This function determines the minimum screen width, given a initial estimate
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * and various screen attributes. DDX needs to determine this width before
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * initializing the screen.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT int
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncmiScanLineWidth(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*xsize*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*ysize*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*width*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned long /*BankSize*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync PixmapFormatRec * /*pBankFormat*/,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int /*nWidthUnit*/
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#endif /* __MIBANK_H__ */