lkml.org 
[lkml]   [2001]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: time question
    Bart Vandewoestyne wrote:
    >
    > I'm trying to port the DOS driver for a data aquisition card to linux
    > (http::/mc303.ulyssis.org). 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
    (http://www.ctyme.com/intr/rb-2271.htm).
    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:
    http://www.xml.com/ldd/chapter/book/ch06.html
    You may get some answers there.

    To begin with, you could try using
    mdelay(110);

    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 kernelnewbies.org 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.


    ~Randy
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 12:58    [W:0.030 / U:93.096 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site