#define PSZ 8
#include "xf86.h"
#include "xf86_OSproc.h"
#include "xf86_ansic.h"
#include "compiler.h"
#include "xf86PciInfo.h"
#include "xf86Pci.h"
#include "ct_driver.h"
#if defined(__arm32__) && defined(__NetBSD__)
#include <machine/sysarch.h>
#define arm32_drain_writebuf() sysarch(1, 0)
#elif defined(__arm32__)
#define arm32_drain_writebuf()
#endif
#define ChipsBank(pScreen) CHIPSPTR(xf86Screens[pScreen->myNum])->Bank
#ifdef DIRECT_REGISTER_ACCESS
int
CHIPSSetRead(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x10));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSSetWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x11));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSSetReadWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x10));
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x11));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSSetReadPlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x10));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSSetWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x11));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSSetReadWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x10));
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x11));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSWINSetRead(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x10));
outb(cPtr->PIOBase + 0x3D6, 0x0C);
tmp = inb(cPtr->PIOBase + 0x3D7) & 0xEF;
outw(cPtr->PIOBase + 0x3D6, (((((bank >> 1) & 0x10) | tmp) << 8) | 0x0C));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSWINSetWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x11));
outb(cPtr->PIOBase + 0x3D6, 0x0C);
tmp = inb(cPtr->PIOBase + 0x3D7) & 0xBF;
outw(cPtr->PIOBase + 0x3D6, (((((bank << 1) & 0x40) | tmp) << 8) | 0x0C));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSWINSetReadWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x10));
outw(cPtr->PIOBase + 0x3D6, ((((bank << 3) & 0xFF) << 8) | 0x11));
outb(cPtr->PIOBase + 0x3D6, 0x0C);
tmp = inb(cPtr->PIOBase + 0x3D7) & 0xAF;
outw(cPtr->PIOBase + 0x3D6,
(((((bank << 1) & 0x40) | ((bank >> 1) & 0x10) | tmp) << 8) | 0x0C));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSWINSetReadPlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x10));
outb(cPtr->PIOBase + 0x3D6, 0x0C);
tmp = inb(cPtr->PIOBase + 0x3D7) & 0xEF;
outw(cPtr->PIOBase + 0x3D6, (((((bank << 1) & 0x10) | tmp) << 8) | 0x0C));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSWINSetWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x11));
outb(cPtr->PIOBase + 0x3D6, 0x0C);
tmp = inb(cPtr->PIOBase + 0x3D7) & 0xBF;
outw(cPtr->PIOBase + 0x3D6, (((((bank << 3) & 0x40) | tmp) << 8) | 0x0C));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSWINSetReadWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x10));
outw(cPtr->PIOBase + 0x3D6, ((((bank << 5) & 0xFF) << 8) | 0x11));
outb(cPtr->PIOBase + 0x3D6, 0x0C);
tmp = inb(cPtr->PIOBase + 0x3D7) & 0xAF;
outw(cPtr->PIOBase + 0x3D6,
(((((bank << 3) & 0x40) | ((bank << 1) & 0x10) | tmp) << 8) | 0x0C));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSHiQVSetReadWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, (((bank & 0x7F) << 8) | 0x0E));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
int
CHIPSHiQVSetReadWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
outw(cPtr->PIOBase + 0x3D6, ((((bank << 2) & 0x7F) << 8) | 0x0E));
#ifdef __arm32__
if (bank != ChipsBank(pScreen)) {
arm32_drain_writebuf();
ChipsBank(pScreen) = bank;
}
#endif
return 0;
}
#else
int
CHIPSSetRead(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x10, ((bank << 3) & 0xFF));
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSSetWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x11, ((bank << 3) & 0xFF));
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSSetReadWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x10, ((bank << 3) & 0xFF));
cPtr->writeXR(cPtr, 0x11, ((bank << 3) & 0xFF));
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSSetReadPlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x10, ((bank << 5) & 0xFF));
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSSetWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x11, ((bank << 5) & 0xFF));
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSSetReadWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x10, ((bank << 5) & 0xFF));
cPtr->writeXR(cPtr, 0x11, ((bank << 5) & 0xFF));
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSWINSetRead(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
cPtr->writeXR(cPtr, 0x10, ((bank << 3) & 0xFF));
tmp = cPtr->readXR(cPtr, 0x0C) & 0xEF;
cPtr->writeXR(cPtr, 0x0C, ((bank >> 1) & 0x10) | tmp);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSWINSetWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
cPtr->writeXR(cPtr, 0x11, ((bank << 3) & 0xFF));
tmp = cPtr->readXR(cPtr, 0x0C) & 0xBF;
cPtr->writeXR(cPtr, 0x0C, ((bank << 1) & 0x40) | tmp);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSWINSetReadWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
cPtr->writeXR(cPtr, 0x10, ((bank << 3) & 0xFF));
cPtr->writeXR(cPtr, 0x11, ((bank << 3) & 0xFF));
tmp = cPtr->readXR(cPtr, 0x0C) & 0xAF;
cPtr->writeXR(cPtr, 0x0C, ((bank << 1) & 0x40) | ((bank >> 1) & 0x10) | tmp);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSWINSetReadPlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
cPtr->writeXR(cPtr, 0x10, ((bank << 5) & 0xFF));
tmp = cPtr->readXR(cPtr, 0x0C) & 0xEF;
cPtr->writeXR(cPtr, 0x0C, ((bank << 1) & 0x10) | tmp);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSWINSetWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
cPtr->writeXR(cPtr, 0x11, ((bank << 5) & 0xFF));
tmp = cPtr->readXR(cPtr, 0x0C) & 0xBF;
cPtr->writeXR(cPtr, 0x0C, ((bank << 3) & 0x40) | tmp);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSWINSetReadWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
register unsigned char tmp;
cPtr->writeXR(cPtr, 0x10, ((bank << 5) & 0xFF));
cPtr->writeXR(cPtr, 0x11, ((bank << 5) & 0xFF));
tmp = cPtr->readXR(cPtr, 0x0C) & 0xAF;
cPtr->writeXR(cPtr, 0x0C, ((bank << 3) & 0x40) | ((bank << 1) & 0x10) | tmp);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSHiQVSetReadWrite(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x0E, bank & 0x7F);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
int
CHIPSHiQVSetReadWritePlanar(ScreenPtr pScreen, int bank)
{
CHIPSPtr cPtr = CHIPSPTR(xf86Screens[pScreen->myNum]);
cPtr->writeXR(cPtr, 0x0E, (bank << 2) & 0x7F);
#ifdef __arm32__
if (bank != cPtr->Bank) {
arm32_drain_writebuf();
cPtr->Bank = bank;
}
#endif
return 0;
}
#endif