#include <u.h>
#include <libc.h>
#include <bio.h>
#include "pci.h"
#include "vga.h"
/*
* Tvp3025 Viewpoint Video Interface Pallette.
* Assumes hooked up to an S3 Vision964.
* The #9GXE64pro uses bit 5 of Crt5C as RS4,
* giving access to the Bt485 emulation mode registers.
*/
static void
options(Vga* vga, Ctlr* ctlr)
{
tvp3020.options(vga, ctlr);
}
static void
init(Vga* vga, Ctlr* ctlr)
{
/*
* Although the Tvp3025 has a higher default
* speed-grade (135MHz), just use the 3020 code.
*/
tvp3020.init(vga, ctlr);
}
static void
load(Vga* vga, Ctlr* ctlr)
{
uchar crt5c, x;
crt5c = vgaxi(Crtx, 0x5C) & ~0x20;
vgaxo(Crtx, 0x5C, crt5c);
x = tvp3020xi(0x06) & ~0x80;
tvp3020xo(0x06, x);
tvp3020xo(0x0E, 0x00);
(tvp3020.load)(vga, ctlr);
if(ctlr->flag & Uenhanced)
tvp3020xo(0x29, 0x01);
ctlr->flag |= Fload;
}
static ulong
dumpclock(ulong d, ulong n, ulong p)
{
ulong f;
f = RefFreq*((n+2)*8);
f /= (d+2);
f >>= p;
return f;
}
static void
dump(Vga* vga, Ctlr* ctlr)
{
uchar crt5c;
int i;
ulong clock[4];
crt5c = vgaxi(Crtx, 0x5C);
vgaxo(Crtx, 0x5C, crt5c & ~0x20);
tvp3020.dump(vga, ctlr);
printitem(ctlr->name, "PCLK");
for(i = 0; i < 4; i++){
tvp3020xo(0x2C, (i<<4)|(i<<2)|i);
printreg(clock[i] = tvp3020xi(0x2D));
}
Bprint(&stdout, "%23ld\n", dumpclock(clock[0], clock[1], clock[2] & 0x07));
printitem(ctlr->name, "MCLK");
for(i = 0; i < 4; i++){
tvp3020xo(0x2C, (i<<4)|(i<<2)|i);
printreg(clock[i] = tvp3020xi(0x2E));
}
Bprint(&stdout, "%23ld\n", dumpclock(clock[0], clock[1], clock[2] & 0x07));
printitem(ctlr->name, "RCLK");
for(i = 0; i < 4; i++){
tvp3020xo(0x2C, (i<<4)|(i<<2)|i);
printreg(clock[i] = tvp3020xi(0x2F));
}
Bprint(&stdout, "%23ld\n", dumpclock(clock[0], clock[1], clock[2] & 0x07));
vgaxo(Crtx, 0x5C, crt5c);
}
Ctlr tvp3025 = {
"tvp3025", /* name */
0, /* snarf */
options, /* options */
init, /* init */
load, /* load */
dump, /* dump */
};
|