> It's not ioctl() overhead, it's what has to be done in the driver to
> get the information you request.
>
> (1) Stop the chip
> (2) Read the media interface using an awful SERIAL protocol in which
> you manipulate 3 bits using multiple instructions, to send
> or receive a single BIT (not BYTE) of data. You do the 8 times
> per byte.
> (3) Restart the chip.
Are you sure about this? In the tulip.c driver the following appears to be the
salient code:
static int private_ioctl(struct device *dev, struct ifreq *rq, int cmd)
{
struct tulip_private *tp = (struct tulip_private *)dev->priv;
long ioaddr = dev->base_addr;
u16 *data = (u16 *)&rq->ifr_data;
int phy = tp->phys[0] & 0x1f;
long flags;
switch(cmd) {
case SIOCDEVPRIVATE: /* Get the address of the PHY in use. */
if (tp->mii_cnt)
data[0] = phy;
else if (tp->flags & HAS_NWAY143)
data[0] = 32;
else if (tp->chip_id == COMET)
data[0] = 1;
else
return -ENODEV;
I don't see any device stopping or reading of the media interface here. Now
there may be something very subtle hidden somewhere that I'm not seeing, but
this looks like some relatively straightforward comparisons.
Chris
-- Chris Friesen | MailStop: 043/33/F10 Nortel Networks | work: (613) 765-0557 3500 Carling Avenue | fax: (613) 765-2986 Nepean, ON K2H 8E9 Canada | email: cfriesen@nortelnetworks.com - 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/