IO configuration language

Martin Schröder martin.schroeder at openlimit.com
Thu Jun 19 15:03:05 CEST 2014


IO supports two configuration formats. The (legacy format ?) "IO 
configuration language" and a (newer ?) lua based one.

Except for some examples and the syntax file ioconfig.vim I could not 
find much documentation. But anyway I am running into trouble when using 
the lua based one instead of my existing (so far working) old one.


I have something like this (two network cards with each dmamem):
=== (old one)
hw-root {
	NIC0 => new Device() {
		.hid = "foodevice";
		new-res Mmio(0x111 ... 0x222);
	}
	NIC1 => new Device() {
		.hid = "foodevice";
		new-res Mmio(0x333 ... 0x444);
	}
	DMAMEM0 => new Device() {
		.hid = "dmamem";
		new-res Mmio_ram(0x80000, 0);
	}
	DMAMEM1 => new Device() {
		.hid = "dmamem";
		new-res Mmio_ram(0x80000, 0);
	}
}
client0 => new System_bus() {
	"foo.dev0" => wrap(hw-root.NIC0);
	"dmamem" => wrap(hw-root.DMAMEM0);
}
client1 => new System_bus() {
	"foo.dev1" => wrap(hw-root.NIC1);
	"dmamem" => wrap(hw-root.DMAMEM1);
}
===

and want to convert it into something like this:

=== (new one)
Io.hw_add_devices {
	NIC0 = Io.Hw.Device {
		hid = "foodevice"
		Io.Res.mmio(0x111, 0x222)
	},
	NIC1 = Io.Hw.Device {
		hid = "foodevice"
		Io.Res.mmio(0x333, 0x444)
	},
	DMAMEM0 = Io.Hw.Device {
		hid = "dmamem";
		Io.Mmio_data_space(0x80000, 0x80000);
	},
	DMAMEM1 = Io.Hw.Device {
		hid = "dmamem";
		Io.Mmio_data_space(0x80000, 0x80000);
	}
}
local hw = Io.Hw
Io.add_vbusses
{
	client0 = Io.Vi.System_bus(function ()
		dev0 = wrap(hw:match(NIC0));
		dev1 = wrap(hw:match(DMAMEM0));
	end),
	client1 = Io.Vi.System_bus(function ()
		dev0 = wrap(hw:match(NIC1));
		dev1 = wrap(hw:match(DMAMEM1));
	end)
}
===

So dev0 = wrap(hw:match(NIC0)); seems to be wrong. In all the examples I 
fould the hid-string dev0 = wrap(hw:match("foodevice")) is always used.


So three questions:

1) How can I use the device in the example if the hid is not unique? I 
even tried wrap(hw:device(NIC0)) but this does not work eiher.

2) How can I set the device name for client0/client1 into "foo.dev0" for 
dev0 as in the (old) example above? dev0.set_name("foo.dev0"); seems not 
to be the right one.

3) Is Io.mio_data_space(0x80000, 0x80000) the right replacement for 
"new-res Mmio_ram(0x80000, 0);" ?


Best regards,
    Martin






	







More information about the l4-hackers mailing list