Linux????????????????????????+??·??
???????????? ???????[ 2012/12/25 10:21:35 ] ????????
???????????£?
static int ne_probe1(struct device *dev?? int ioaddr)
{
.....................//???????
/* Fixup for users that don't know that IRQ 2 is really IRQ 9??
or don't know which one to set. */
dev->irq = 9;//?????ж??????
/* Snarf the interrupt now. There's no point in waiting since we cannot
share and the board will usually be enabled. */
{
int irqval = request_irq (dev->irq?? ei_interrupt?? 0?? wordlength==2 ? "ne2000":"ne1000");//????????ж???ж????????ei_interrupt
if (irqval) {
printk (" unable to get IRQ %d (irqval=%d).
"?? dev->irq?? irqval);
return EAGAIN;
}
}
dev->base_addr = ioaddr;
request_region(ioaddr?? NE_IO_EXTENT?? wordlength==2 ? "ne2000":"ne1000");//?????????
for(i = 0; i < ETHER_ADDR_LEN; i++)
dev->dev_addr[i] = SA_prom[i];
ethdev_init(dev);//???ú?????dev?豸??????г????
printk("
%s: %s found at %#x?? using IRQ %d.
"??
dev->name?? name?? ioaddr?? dev->irq);
if (ei_debug > 0)
printk(version);
ei_status.name = name;
ei_status.tx_start_page = start_page;
ei_status.stop_page = stop_page;
ei_status.word16 = (wordlength == 2);
ei_status.rx_start_page = start_page + TX_PAGES;
#ifdef PACKETBUF_MEMSIZE
/* Allow the packet buffer size to be overridden by know-it-alls. */
ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
#endif
ei_status.reset_8390 = &ne_reset_8390;
ei_status.block_input = &ne_block_input;
ei_status.block_output = &ne_block_output;
NS8390_init(dev?? 0);//?????????е?????????????
return 0;
}
?????????????ethdev_init()?????drivers/net/8390.c?С????£?
/* Initialize the rest of the 8390 device structure. */
int ethdev_init(struct device *dev)
{
if (ei_debug > 1)
printk(version);
if (dev->priv == NULL) {//??????п??洢????????????????
struct ei_device *ei_local;//8390?????豸?????
dev->priv = kmalloc(sizeof(struct ei_device)?? GFP_KERNEL);//????????????
memset(dev->priv?? 0?? sizeof(struct ei_device));
ei_local = (struct ei_device *)dev->priv;
#ifndef NO_PINGPONG
ei_local->pingpong = 1;
#endif
}
/* The open call may be overridden by the card-specific code. */
if (dev->open == NULL)
dev->open = &ei_open;//?豸???????
/* We should have a dev->stop entry also. */
dev->hard_start_xmit = &ei_start_xmit;//?豸????????????????8390.c??
dev->get_stats = get_stats;
#ifdef HAVE_MULTICAST
dev->set_multicast_list = &set_multicast_list;
#endif
ether_setup(dev);//????????ú???????dev?豸????
return 0;
}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11