Sorry man, I am out of ideas. Although when you say it "keeps gpsd locked
out", what exactly does that mean? An open() of that device returns
EBUSY? Or you just don't get any input?
Okay, I've got ONE more idea.
Looking at things more closely ... I realize that zs_maskintr() just sets
the interrupt mask in a copy of the register value; it doesn't actually load
it onto the chip. To do THAT, you need to call zs_loadchannelregs();
it looks like you want to copy the corresponding code in TIOCDCDTIMESTAMP
that checks cs->cs_heldchange and zst->zst_tx_busy.