コード例 #1
0
ファイル: ne2k.c プロジェクト: pratikmankawde/HelenOS_Nano
static int ne2k_dev_init(nic_t *nic_data)
{
	/* Get HW resources */
	hw_res_list_parsed_t hw_res_parsed;
	hw_res_list_parsed_init(&hw_res_parsed);
	
	int rc = nic_get_resources(nic_data, &hw_res_parsed);
	
	if (rc != EOK)
		goto failed;
	
	if (hw_res_parsed.irqs.count == 0) {
		rc = EINVAL;
		goto failed;
	}
	
	if (hw_res_parsed.io_ranges.count == 0) {
		rc = EINVAL;
		goto failed;
	}
	
	if (hw_res_parsed.io_ranges.ranges[0].size < NE2K_IO_SIZE) {
		rc = EINVAL;
		goto failed;
	}
	
	ne2k_t *ne2k = (ne2k_t *) nic_get_specific(nic_data);
	ne2k->irq = hw_res_parsed.irqs.irqs[0];
	
	ne2k->base_port = (void *) (uintptr_t)
	    hw_res_parsed.io_ranges.ranges[0].address;
	
	hw_res_list_parsed_clean(&hw_res_parsed);
	
	/* Enable port I/O */
	if (pio_enable(ne2k->base_port, NE2K_IO_SIZE, &ne2k->port) != EOK)
		return EADDRNOTAVAIL;
	
	
	ne2k->data_port = ne2k->port + NE2K_DATA;
	ne2k->receive_configuration = RCR_AB | RCR_AM;
	ne2k->probed = false;
	ne2k->up = false;
	
	/* Find out whether the device is present. */
	if (ne2k_probe(ne2k) != EOK)
		return ENOENT;
	
	ne2k->probed = true;
	
	rc = ne2k_register_interrupt(nic_data);
	if (rc != EOK)
		return EINVAL;
	
	return EOK;
	
failed:
	hw_res_list_parsed_clean(&hw_res_parsed);
	return rc;
}
コード例 #2
0
ファイル: ne2k_driver.c プロジェクト: caisan/mytos
void Init_Ne2k()
{
	ne = (NE2K*) AllocateKernel(sizeof(NE2K));
	if (!ne){disp_str("!yes");}
	mem_set((u32)ne,6,0);

	ne->iobase = 0x280;

	ne->nic_addr = ne->iobase + NE2K_NOVELL_NIC_OFFSET;
	ne->asic_addr = ne->iobase + NE2K_NOVELL_ASIC_OFFSET;
	if(!ne2k_probe(ne)){
		disp_str("yes");
	}
	disp_str("no");
}