Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Aug 2009 22:09:07 +1000 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Ed Schouten <ed@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r196506 - in head/sys: kern sys
Message-ID:  <20090824213600.T39644@delplex.bde.org>
In-Reply-To: <200908241053.n7OArUhX092666@svn.freebsd.org>
References:  <200908241053.n7OArUhX092666@svn.freebsd.org>

index | next in thread | previous in thread | raw e-mail

On Mon, 24 Aug 2009, Ed Schouten wrote:

> Log:
>  Allow multiple console devices per driver without insane code duplication.
>
>  Say, a driver wants to have multiple console devices to pick from, you
>  would normally write down something like this:
>
>  	CONSOLE_DRIVER(dev1);
>  	CONSOLE_DRIVER(dev2);
>
>  Unfortunately, this means that you have to declare 10 cn routines,
>  instead of 5. It also isn't possible to initialize cn_arg on beforehand.
>
>  I noticed this restriction when I was implementing some of the console
>  bits for my vt(4) driver in my newcons branch. I have a single set of cn
>  routines (termcn_*) which are shared by all vt(4) console devices.
>
>  In order to solve this, I'm adding a separate consdev_ops structure,
>  which contains all the function pointers. This structure is referenced
>  through consdev's cn_ops field.
>
>  While there, I'm removing CONS_DRIVER() and cn_checkc, which have been
>  deprecated for years. They weren't used throughout the source, until the
>  Xen console driver showed up. CONSOLE_DRIVER() has been changed to do
>  the right thing. It now declares both the consdev and consdev_ops
>  structure and ties them together. In other words: this change doesn't
>  change the KPI for drivers that used the regular way of declaring
>  console devices.

CONS_DRIVER() was a good interface, unlike CONSOLE_DRIVER().  Removing it
completes the bitrot in the support for cn_dbctl, and completes removal
of cn_checkc's good name at the driver level.

cn_dbctl is still needed to unbreak sysctl's support for ddb (see db_main.c
1.4.2.1, which depends on cn_dbctl's infrastructure not having rotted) and
can be used to unbreak polled i/o in all console drivers (not just in ddb
mode -- it should have been named cn_ioctl) (see other mail).

The higher level cngetc() and cncheckc() are still correctly named, now
fully inconsistently with the driver level.

Bruce


help

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