Miguel de Icaza writes:
>
> Another question regarding the Newport:
>
> > After waiting for the rex3 FIFO to drain, and the the xmap9 FIFO
> > to not be full, it sets the xmap9 mode register for the given "wid":
> >
> > xmap9SetModeReg( rex3, wid, displaymode,
> > ng1_video_timing[bd->boardnum]->cfreq );
>
> If the newport registers are available to the userland application,
> why the X server does not directly call those routines instead of
> relying on the kernel to perform them? Is it a convention that
> applications should only touch the rex3 registers and not attempt to
> program any of the other chips on the dcb?
>
> It would make sense since the graphics context switching would not
> involve the kernel peeking at the chips on the dcb what their context
> is and then the pain of restoring this.
I believe that making this work reasonably would require some way
of making a given user-mode primitive atomic. This can be hacked by via various
schemes, but the current IRIX implementation does all sequences which must
be atomic in the kernel. (For example, if I must BFIFOWAIT and then do
some stores, but I context switch after the BFIFOWAIT, there is no guarantee
that the FIFO is not full when I regain control.)
|