[lkml]   [2001]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: time question
Bart Vandewoestyne wrote:
> I'm trying to port the DOS driver for a data aquisition card to linux
> (http::/ It is my first linux driver writing
> attempt. Somewhere in the code i have the following lines of DOS-code
> that do some busy waiting:
> _bios_timeofday(_TIME_GETCLOCK,&tb); l = tb;
> while(l-tb < 2) _bios_timeofday(_TIME_GETCLOCK,&l);
> What is the best linux equivalent for this?

I don't have a DOS system + development tools handy.
Can you tell me what _bios_timeofday(_TIME_GETCLOCK, ptr) compiles/
assembles to? I.e., what software interrupt, and what the AH
register is set to on entry?

I'm guessing that this code is just doing a 2-tick delay
(18.2 ticks per second), using int. 0x1a, AH=00
This means that each tick is approximately 55 ms,
so the code is delaying for about 110 ms.

Take a look at the new Linux Device Drivers book (second edition),
in the "Flow of Time" chapeter:
You may get some answers there.

To begin with, you could try using

Is this busy-waiting loop used seldom or often?
If seldom, then using mdelay() might be OK.
If often, then a sleep queue seems to be preferred.
Read the LDD Time chapter.

You might also try for introductory kernel
questions. See the FAQ and the /documents/ directory.

>From your list of questions:

1. What kind of device do I need? Right now I am trying a
character device, but is this indeed what we need???

A: Yes. If it's not a block device and not a network device,
it's usually a character device.

2. If I need a character device, what linux-existing driver is good
to look at and learn from it?

A: I'm not aware of other data acq drivers in the kernel, but that's
just not my area. Are there any (anyone)?

3. How should I translate the assembler code of the DOS driver?
Can I use linux native system calls?
To what linux sytem calls can I map the inplI and outplI functions?

A: Sure, you can use native Linux system calls, if you know which
ones to use. However, some calls may actually be (g)lib calls instead
of system calls.

inplI(): same as inpl() on your web page (since bswap is
commented). Maps to:
value = inl(port);

outplI(): Only difference here is the 16-bit word-order of the
32-bit value to write to the I/O port. I'd suggest just getting
the data order correct in the calling function and using
outl(value, port);
in Linux drivers.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 12:58    [from the cache]
©2003-2014 Jasper Spaans. hosted at Digital Ocean