I am running SuSE 9.3 on a Dell 500m with a i855GM,
which is using kernel 220.127.116.11-21.7 and Xorg 6.8.2-30
with a bunch of patches (typical for suse).
So patching the the i810 driver of cause partly failed.
Also it sounds like you only have tested with XFree.
It appears that your i810_cursor.c patch is almost
applied by SuSE. Only difference was that you had
where as SuSE had:
Using your "always on" or suse's version, did not make
any difference to me, to get the cursor on both screens
I needed to use SWCursor in both xorg.conf and i855crt.
Otherwise there was either no cursor or a garbage block.
FYI: on my system CURSOR_B_POSITION was already defined
As for the overlay patch, this was not an exact match,
but not to hard to figure out.
The only real incompatible code line was the one with
if(pPriv->refreshOK), which failed compiling because
pPriv->refreshOK was not defined. In the same function
the code used pPriv->overlayOK, so I change it to that
one (dont know if they have the exact same meaning).
I have attached a overlay patch which should work on a
similar system, and the compiled i810_driver.o.
Keep up the good work Andrea