sculpt: support for pinephone wifi driver

This patch replaces the former 'nic_drv' and 'nic_drv_dtb' functions
by a more general 'nic_driver_routes' function that can return one or
multiple platform-specific ROM routes for NIC-driver binaries and dtb
files. This allows for supplying customizations for the wifi driver
as well. E.g., on the PinePhone, this hook can be used to handle the
renaming of the 'wifi_drv' to 'a64_wifi_drv'.

Related to issue #4813 and issue genodelabs/genode-allwinner#17.
This commit is contained in:
Norman Feske 2023-04-05 14:10:26 +02:00 committed by Christian Helmuth
parent 1d376717c1
commit 54d7a48c9b
2 changed files with 29 additions and 18 deletions

View File

@ -150,22 +150,35 @@ proc log_route { } {
}
proc nic_drv { } {
##
# ROM routes that relabel generic NIC driver names to platform-specific binaries
#
proc nic_driver_routes { } {
if {[have_board pc]} { return ipxe_nic_drv }
if {[have_board imx8q_evk]} { return fec_nic_drv }
if {[have_board mnt_reform2]} { return fec_nic_drv }
set result(pc) {
<service name="ROM" label="nic_drv"> <parent label="ipxe_nic_drv"/> </service>
<service name="ROM" label="wifi_drv"> <parent label="pc_wifi_drv"/> </service>
}
return nic_unavailable
}
set result(mnt_reform2) {
<service name="ROM" label="nic_drv"> <parent label="fec_nic_drv"/> </service>
<service name="ROM" label="nic_drv.dtb"> <parent label="fec_nic_drv-mnt_reform2.dtb"/> </service>
}
set result(imx8q_evk) {
<service name="ROM" label="nic_drv"> <parent label="fec_nic_drv"/> </service>
<service name="ROM" label="nic_drv.dtb"> <parent label="fec_nic_drv-imx8q_evk.dtb"/> </service>
}
proc nic_drv_dtb { } {
set result(pinephone) {
<service name="ROM" label="wifi_drv"> <parent label="a64_wifi_drv"/> </service>
<service name="ROM" label="wifi_drv.dtb"> <parent label="wifi-pinephone.dtb"/> </service>
}
if {[have_board imx8q_evk]} { return fec_nic_drv-imx8q_evk.dtb }
if {[have_board mnt_reform2]} { return fec_nic_drv-mnt_reform2.dtb }
if {[info exists result([board])]} {
return $result([board]); }
return nic_unavailable
return "";
}
@ -627,9 +640,7 @@ install_config {
<child name="leitzentrale" label="fonts"/> </service>
<service name="Report"> <child name="fs_report"/> </service>
<service name="LOG" label="unlogged"> <parent/> </service>
} [log_route] {
<service name="ROM" label="nic_drv"> <parent label="} [nic_drv] {"/> </service>
<service name="ROM" label="nic_drv.dtb"> <parent label="} [nic_drv_dtb] {"/> </service>
} [log_route] [nic_driver_routes] {
<service name="Event" label="global"> <child name="nitpicker"/> </service>
<service name="Event" label="leitzentrale"> <child name="leitzentrale"/> </service>
<service name="Capture" label="global"> <child name="nitpicker"/> </service>

View File

@ -19,12 +19,10 @@ void Sculpt::gen_wifi_drv_start_content(Xml_generator &xml)
Cap_quota{250}, Ram_quota{32*1024*1024},
Priority::NETWORK);
xml.node("binary", [&] () {
xml.attribute("name", "pc_wifi_drv");
});
xml.node("config", [&] () {
xml.attribute("dtb", "wifi_drv.dtb");
xml.node("vfs", [&] () {
gen_named_node(xml, "dir", "dev", [&] () {
xml.node("null", [&] () {});
@ -60,7 +58,8 @@ void Sculpt::gen_wifi_drv_start_content(Xml_generator &xml)
xml.node("parent", [&] () {
xml.attribute("label", "wifi"); }); });
gen_parent_rom_route(xml, "pc_wifi_drv");
gen_parent_rom_route(xml, "wifi_drv");
gen_parent_rom_route(xml, "wifi_drv.dtb");
gen_parent_rom_route(xml, "ld.lib.so");
gen_parent_rom_route(xml, "libcrypto.lib.so");
gen_parent_rom_route(xml, "vfs.lib.so");
@ -70,6 +69,7 @@ void Sculpt::gen_wifi_drv_start_content(Xml_generator &xml)
gen_parent_rom_route(xml, "vfs_wifi.lib.so");
gen_parent_rom_route(xml, "libssl.lib.so");
gen_parent_rom_route(xml, "wifi.lib.so");
gen_parent_rom_route(xml, "a64_wifi.lib.so");
gen_parent_rom_route(xml, "wpa_driver_nl80211.lib.so");
gen_parent_rom_route(xml, "wpa_supplicant.lib.so");
gen_parent_rom_route(xml, "iwlwifi-1000-5.ucode");