lkml.org 
[lkml]   [2008]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: 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


\
 
 \ /
  Last update: 2008-06-02 16:59    [from the cache]
©2003-2011 Jasper Spaans. Advertise on this site