/* Linux only, for port access ... see mmio.h */
#include <sys/io.h>
#include "local.h"
#include "tv_i2c.h"
#include "backend.h"
#include "tester.h"
#include "test_record.h"
CardPtr mmio_card = NULL;
void
mmio_port_perm (unsigned long from, unsigned long num, int turn_on)
{
printf ("perm %04X - %04X %s\n", from, from+num, turn_on ? "on" : "off");
}
CARD32 mmio_phys (void *base)
{
if (mmio_card && mmio_card->reg_mapped) {
return (CARD32) (base - mmio_card->reg_mapped);
} else {
return (CARD32) base;
}
}
CARD8
mmio_in8 (void* base, unsigned offset)
{
register CARD8 tmp;
if (testopt_snoop) {
tmp = *(volatile CARD8 *)(((CARD8*)(base)) + (offset));
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, tmp, BIT8, "in ");
} else {
tmp = recordRead (ZONE_MMIO, (CARD32) base + offset, BIT8, "in ");
}
return tmp;
}
CARD16
mmio_in16 (void* base, unsigned offset)
{
register CARD16 tmp;
if (testopt_snoop) {
tmp = *(volatile CARD16 *)(void *)(((CARD8*)(base)) + (offset));
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, tmp, BIT16, "in ");
} else {
tmp = recordRead (ZONE_MMIO, (CARD32) base + offset, BIT16, "in ");
}
return tmp;
}
CARD32
mmio_in32 (void* base, unsigned offset)
{
register CARD32 tmp;
if (testopt_snoop) {
tmp = *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset));
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, tmp, BIT32, "in ");
} else {
tmp =recordRead (ZONE_MMIO, (CARD32) base + offset, BIT32, "in ");
}
return tmp;
}
void
mmio_out8 (void* base, unsigned offset, CARD8 val)
{
if (testopt_snoop) {
*(volatile CARD8 *)(((CARD8*)(base)) + (offset)) = (val);
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, val, BIT8, "out");
} else {
recordWrite (ZONE_MMIO, (CARD32) base + offset, val, BIT8, "out");
}
}
void
mmio_out16 (void* base, unsigned offset, CARD16 val)
{
if (testopt_snoop) {
*(volatile CARD16 *)(void *)(((CARD8*)(base)) + (offset)) = (val);
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, val, BIT16, "out");
} else {
recordWrite (ZONE_MMIO, (CARD32) base + offset, val, BIT16, "out");
}
}
void
mmio_out32 (void* base, unsigned offset, CARD32 val)
{
if (testopt_snoop) {
*(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val);
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, val, BIT32, "out");
} else {
recordWrite (ZONE_MMIO, (CARD32) base + offset, val, BIT32, "out");
}
}
void
mmio_and32 (void* base, unsigned offset, CARD32 val)
{
register CARD32 tmp;
if (testopt_snoop) {
tmp = *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset));
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, tmp, BIT32, "== ");
tmp &= val;
*(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = tmp;
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, tmp, BIT32, "and");
} else {
tmp = recordRead (ZONE_MMIO, (CARD32) base + offset, BIT32, "== ");
recordWrite (ZONE_MMIO, (CARD32) base + offset, tmp & val, BIT32, "and");
}
}
void
mmio_or32 (void* base, unsigned offset, CARD32 val)
{
register CARD32 tmp;
if (testopt_snoop) {
tmp = *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset));
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, tmp, BIT32, "== ");
tmp |= val;
*(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = tmp;
recordWrite (ZONE_MMIO, mmio_phys (base) + offset, tmp, BIT32, "or ");
} else {
tmp = recordRead (ZONE_MMIO, (CARD32) base + offset, BIT32, "== ");
recordWrite (ZONE_MMIO, (CARD32) base + offset, tmp | val, BIT32, "or ");
}
}
CARD8
port_inb (CARD16 port)
{
register CARD8 tmp;
if (testopt_snoop) {
tmp = inb(port);
recordWrite (ZONE_PORT, port, tmp, BIT8, "in ");
} else {
tmp = recordRead (ZONE_PORT, port, BIT8, "in ");
}
return tmp;
}
CARD16
port_inw (CARD16 port)
{
register CARD16 tmp;
if (testopt_snoop) {
tmp = inw(port);
recordWrite (ZONE_PORT, (CARD32) port, tmp, BIT16, "in ");
} else {
tmp = recordRead (ZONE_PORT, (CARD32) port, BIT16, "in ");
}
return tmp;
}
void
port_outb (CARD16 port, CARD8 val)
{
if (testopt_snoop) outb (val, port);
recordWrite (ZONE_PORT, (CARD32) port, val, BIT8, "out");
}
void
port_outw (CARD16 port, CARD16 val)
{
if (testopt_snoop) outw (val, port);
recordWrite (ZONE_PORT, (CARD32) port, val, BIT16, "out");
}
syntax highlighted by Code2HTML, v. 0.9.1