Hi!
I'm still working on my framebuffer driver for the Xbox.
Now I know that I just have to map 4MB of memory and access it, but I don't
know how to implement this in a good way.
A few lines from my driver (that doesn't show anything on the the until now):
struct xboxfb_softc {
struct device sc_dev;
bus_space_tag_t tag;
bus_space_handle_t handle;
};
void xboxfb_attach(struct device * parent, struct device * self, void * aux) {
struct xboxfb_softc *sc = (struct xboxfb_softc *) self;
struct pci_attach_args *pa = aux;
int ret;
sc->tag = pa->pa_memt;
ret = bus_space_map(sc->tag, XBOX_RAM_SIZE - XBOX_FB_SIZE,
XBOX_FB_SIZE, 2, &sc->handle);
for (i = 0; i < 10000; i++)
bus_space_write_4(sc->tag,sc->handle,i,XBOX_FB_BLUE);
}
What do I have to pass to bus_space_map as 4th argument? According to the
manpage, BUS_SPACE_MAP_LINEAR would be right, but that doesn't seem to exist
on i386. I tried the value 2 (this is the value on other architectures).
Do I have to take pa_memt or pa_iot (as a tag from the bus) ?
How large is the memory area of a "handle"?
Does bus_space_vaddr exist on i386? According to the manpage, this could be
useful for me.
A part of my kernel config:
xboxfb0 at pci? dev ? function ?
wsdisplay* at xboxfb? console ?
This is from NetBSD.
Best Regards,
Markus