Messages in this thread |  | | | Date | Mon, 2 Jun 2008 16:56:03 +0200 | | From | Rodolfo Giometti <> | | Subject | Re: LinuxPPS low-level IRQs timestamps & ldisc |
| |
On Mon, Jun 02, 2008 at 03:02:57PM +0100, Alan Cox wrote: > > It could be a bit better... I did as above since I supposed that you > > wished all PPS code should be removed from serial port code. > > Ideally. But if it is genuinely the case that the serial port IRQ handler > in some cases needs to do > > my_interrupt() { > get_timestamp() > frob_with_hardware() > ld->dcd_change(blah, timestamp) > } > > then that is still fairly clean and more importantly actually appears to > work. I'd avoid all the ifdefs with this in the serial drivers that need > more accuracy: > > { > struct timespec ts; > if (ld->dcd_change) > getnstimeofday(&ts); > existing tty stuff > if (ld->dcd_change) > ld->dcd_change(tty, status, &ts); > }
I prefere avoid the if clause for getnstimeofday() since each instruction delay may decrease time precision, so:
{ struct timespec ts; getnstimeofday(&ts); existing tty stuff if (ld->dcd_change) ld->dcd_change(tty, status, &ts); } In the wrost case the timestamp is not used.
> And in ld->dcd_change do > > struct timespec myts; > /* Caller passed NULL meaning 'do your own timestamp' */ > if (ts == NULL) { > ts = &myts; > getnstimeofday(&myts); > }
Ok.
> so for uart that would > > uart_dcd_change(struct uart_port *port, unsigned int status, > struct timespec *ts) { > { > ... > } > > passing the timestamp from the ttys own IRQ handler
Great!
Thanks,
Rodolfo
--
GNU/Linux Solutions e-mail: giometti@enneenne.com Linux Device Driver giometti@linux.it Embedded Systems phone: +39 349 2432127 UNIX programming skype: rodolfo.giometti
|  |