Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 May 2008 12:25:03 +0200
From:      Matthias Apitz <matthias.apitz@oclc.org>
To:        freebsd-drivers@freebsd.org
Subject:   question about tty->t_outq && clist && cblock
Message-ID:  <20080514102503.GA5862@rebelion.Sisis.de>

next in thread | raw e-mail | index | archive | help

Hello,

I've some small questions about the struct 'clist', 'cblock' and 'tty'

/usr/src/sys/sys/tty.h says about 'clist'

/*
 * Clists are character lists, which is a variable length linked list
 * of cblocks, with a count of the number of characters in the list.
 */
struct clist {
        int     c_cc;           /* Number of characters in the clist. */
        int     c_cbcount;      /* Number of cblocks. */
        int     c_cbmax;        /* Max # cblocks allowed for this clist.  */
        int     c_cbreserved;   /* # cblocks reserved for this clist. */
        char    *c_cf;          /* Pointer to the first cblock. */
        char    *c_cl;          /* Pointer to the last cblock. */
};

and about 'tty'

struct tty {
        struct  clist t_rawq;           /* Device raw input queue. */
        long    t_rawcc;                /* Raw input queue statistics.  */
        struct  clist t_canq;           /* Device canonical queue. */
        long    t_cancc;                /* Canonical queue statistics.  */
        struct  clist t_outq;           /* Device output queue. */
        ...
}

and /usr/src/sys/sys/clist.h about 'cblock'

struct cblock {
        struct cblock *c_next;                  /* next cblock in queue */
        unsigned char c_quote[CBQSIZE];         /* quoted characters */
        unsigned char c_info[CBSIZE];           /* characters */
};

In the driver it seems that tty->t_outq.c_cf is pointing to the data
bytes itself which the driver should send to the device and not to
a 'cblock' (the comment in 'clist' says *c_cf; is Pointer to the first
cblock);

is this just a small error in the comment and t_outq.c_cf is really
pointing to cblock.c_info[]?

what would be the correct way to pick up the next 'cblock' in that chain
if there is already more data to deliver when for example
tty->t_outq.c_cc says 810 bytes? picking up the 4 byte pointer at
t_outq.c_cf - 20?

thanks in advance for some clarification


	matthias

-- 
Matthias Apitz
http://www.UnixArea.de/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080514102503.GA5862>