コード例 #1
0
ファイル: virtio_net.c プロジェクト: Hooman3/minix
static void
virtio_net_config(ether_addr_t * addr)
{
	u32_t mac14;
	u32_t mac56;
	int i;

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_MAC)) {
		dprintf(("Mac set by host: "));
		mac14 = virtio_sread32(net_dev, 0);
		mac56 = virtio_sread32(net_dev, 4);
		memcpy(&addr->ea_addr[0], &mac14, 4);
		memcpy(&addr->ea_addr[4], &mac56, 2);

		for (i = 0; i < 6; i++)
			dprintf(("%02x%s", addr->ea_addr[i],
					 i == 5 ? "\n" : ":"));
	} else {
		dput(("No mac"));
	}

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_STATUS)) {
		dput(("Current Status %x", (u32_t)virtio_sread16(net_dev, 6)));
	} else {
		dput(("No status"));
	}

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_CTRL_VQ))
		dput(("Host supports control channel"));

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_CTRL_RX))
		dput(("Host supports control channel for RX"));
}
コード例 #2
0
static int
virtio_net_config(void)
{
	u32_t mac14;
	u32_t mac56;
	int i;

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_MAC)) {
		dprintf(("Mac set by host: "));
		mac14 = virtio_sread32(net_dev, 0);
		mac56 = virtio_sread32(net_dev, 4);
		*(u32_t*)virtio_net_mac = mac14;
		*(u16_t*)(virtio_net_mac + 4) = mac56;

		for (i = 0; i < 6; i++)
			printf("%02x%s", virtio_net_mac[i],
					 i == 5 ? "\n" : ":");
	} else {
		dput(("No mac"));
	}

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_STATUS)) {
		dput(("Current Status %x", (u32_t)virtio_sread16(net_dev, 6)));
	} else {
		dput(("No status"));
	}

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_CTRL_VQ))
		dput(("Host supports control channel"));

	if (virtio_host_supports(net_dev, VIRTIO_NET_F_CTRL_RX))
		dput(("Host supports control channel for RX"));

	return OK;
}
コード例 #3
0
ファイル: virtio_blk.c プロジェクト: AgamAgarwal/minix
static int
virtio_blk_feature_setup(void)
{
	/* Feature setup for virtio-blk
	 *
	 * FIXME: Besides the geometry, everything is just debug output
	 * FIXME2: magic numbers
	 */
	if (virtio_host_supports(blk_dev, VIRTIO_BLK_F_SEG_MAX)) {
		blk_config.seg_max = virtio_sread32(blk_dev, 12);
		dprintf(("Seg Max: %d", blk_config.seg_max));
	}

	if (virtio_host_supports(blk_dev, VIRTIO_BLK_F_GEOMETRY)) {
		blk_config.geometry.cylinders = virtio_sread16(blk_dev, 16);
		blk_config.geometry.heads = virtio_sread8(blk_dev, 18);
		blk_config.geometry.sectors = virtio_sread8(blk_dev, 19);

		dprintf(("Geometry: cyl=%d heads=%d sectors=%d",
					blk_config.geometry.cylinders,
					blk_config.geometry.heads,
					blk_config.geometry.sectors));
	}

	if (virtio_host_supports(blk_dev, VIRTIO_BLK_F_SIZE_MAX))
		dprintf(("Has size max"));

	if (virtio_host_supports(blk_dev, VIRTIO_BLK_F_FLUSH))
		dprintf(("Supports flushing"));

	if (virtio_host_supports(blk_dev, VIRTIO_BLK_F_BLK_SIZE)) {
		blk_config.blk_size = virtio_sread32(blk_dev, 20);
		dprintf(("Block Size: %d", blk_config.blk_size));
	}

	if (virtio_host_supports(blk_dev, VIRTIO_BLK_F_BARRIER))
		dprintf(("Supports barrier"));

	return 0;
}