mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-29 15:44:02 +00:00
sculpt_manager: Pci_info -> Board_info
This is a preparatory commit for issue #5150. Board_info is designated for the selection of device drivers. It is not specific to PCI devices.
This commit is contained in:
parent
b67df08c9d
commit
27e0500452
@ -292,10 +292,11 @@ struct Sculpt::Main : Input_event_handler,
|
||||
*/
|
||||
void refresh_storage_dialog() override { _generate_dialog(); }
|
||||
|
||||
Pci_info _pci_info { .wifi_present = true,
|
||||
.modem_present = true };
|
||||
Board_info _board_info { .wifi_present = true,
|
||||
.lan_present = false,
|
||||
.modem_present = true };
|
||||
|
||||
Network _network { _env, _heap, *this, *this, _child_states, *this, _runtime_state, _pci_info };
|
||||
Network _network { _env, _heap, *this, *this, _child_states, *this, _runtime_state };
|
||||
|
||||
/**
|
||||
* Network::Action interface
|
||||
@ -753,13 +754,11 @@ struct Sculpt::Main : Input_event_handler,
|
||||
_popup.state, _deploy._children };
|
||||
|
||||
Conditional_widget<Network_widget>
|
||||
_network_widget {
|
||||
Conditional_widget<Network_widget>::Attr { .centered = true },
|
||||
_network_widget { Conditional_widget<Network_widget>::Attr { .centered = true },
|
||||
Id { "net settings" },
|
||||
_network._nic_target, _network._access_points,
|
||||
_network._wifi_connection, _network._nic_state,
|
||||
_network.wpa_passphrase, _network._wlan_config_policy,
|
||||
_pci_info };
|
||||
_network.wpa_passphrase, _network._wlan_config_policy };
|
||||
|
||||
void _view_main_dialog(Scope<> &s) const
|
||||
{
|
||||
@ -844,7 +843,7 @@ struct Sculpt::Main : Input_event_handler,
|
||||
_network_title_bar.view_status(s, network_status_message());
|
||||
});
|
||||
|
||||
s.widget(_network_widget, _network_title_bar.selected());
|
||||
s.widget(_network_widget, _network_title_bar.selected(), _board_info);
|
||||
|
||||
s.widget(_software_title_bar, [&] (auto &s) {
|
||||
_software_title_bar.view_status(s, _software_status_message()); });
|
||||
@ -1602,11 +1601,11 @@ struct Sculpt::Main : Input_event_handler,
|
||||
bool regenerate_dialog = false;
|
||||
|
||||
/* mobile data connectivity depends on the presence of a battery */
|
||||
if (_power_state.modem_present() != _pci_info.modem_present) {
|
||||
if (_power_state.modem_present() != _board_info.modem_present) {
|
||||
|
||||
/* update condition for the "Mobile data" network option */
|
||||
_pci_info.modem_present = _power_state.modem_present()
|
||||
&& _modem_state.ready();
|
||||
_board_info.modem_present = _power_state.modem_present()
|
||||
&& _modem_state.ready();
|
||||
|
||||
regenerate_dialog = true;
|
||||
}
|
||||
@ -1739,10 +1738,10 @@ struct Sculpt::Main : Input_event_handler,
|
||||
|
||||
/* update condition of "Mobile data" network option */
|
||||
{
|
||||
bool const orig_mobile_data_ready = _pci_info.modem_present;
|
||||
_pci_info.modem_present = _power_state.modem_present()
|
||||
&& _modem_state.ready();
|
||||
if (orig_mobile_data_ready != _pci_info.modem_present)
|
||||
bool const orig_mobile_data_ready = _board_info.modem_present;
|
||||
_board_info.modem_present = _power_state.modem_present()
|
||||
&& _modem_state.ready();
|
||||
if (orig_mobile_data_ready != _board_info.modem_present)
|
||||
regenerate_dialog = true;
|
||||
}
|
||||
|
||||
|
@ -203,27 +203,18 @@ struct Sculpt::Main : Input_event_handler,
|
||||
** Device discovery **
|
||||
**********************/
|
||||
|
||||
Attached_rom_dataspace _pci_devices { _env, "report -> drivers/pci_devices" };
|
||||
Attached_rom_dataspace _devices { _env, "report -> drivers/devices" };
|
||||
|
||||
Signal_handler<Main> _pci_devices_handler {
|
||||
_env.ep(), *this, &Main::_handle_pci_devices };
|
||||
Signal_handler<Main> _devices_handler {
|
||||
_env.ep(), *this, &Main::_handle_devices };
|
||||
|
||||
Pci_info _pci_info { };
|
||||
Board_info _board_info { };
|
||||
|
||||
void _handle_pci_devices()
|
||||
void _handle_devices()
|
||||
{
|
||||
_pci_devices.update();
|
||||
_pci_info.wifi_present = false;
|
||||
_pci_info.lan_present = true;
|
||||
_pci_info.modem_present = false;
|
||||
_devices.update();
|
||||
|
||||
_pci_devices.xml().for_each_sub_node("device", [&] (Xml_node device) {
|
||||
device.with_optional_sub_node("pci-config", [&] (Xml_node pci) {
|
||||
/* detect Intel Wireless card */
|
||||
if (pci.attribute_value("class", 0UL) == 0x28000)
|
||||
_pci_info.wifi_present = true;
|
||||
});
|
||||
});
|
||||
_board_info = Board_info::from_xml(_devices.xml());
|
||||
|
||||
update_network_dialog();
|
||||
}
|
||||
@ -275,7 +266,7 @@ struct Sculpt::Main : Input_event_handler,
|
||||
** Network **
|
||||
*************/
|
||||
|
||||
Network _network { _env, _heap, *this, *this, _child_states, *this, _runtime_state, _pci_info };
|
||||
Network _network { _env, _heap, *this, *this, _child_states, *this, _runtime_state };
|
||||
|
||||
struct Network_top_level_dialog : Top_level_dialog
|
||||
{
|
||||
@ -287,7 +278,7 @@ struct Sculpt::Main : Input_event_handler,
|
||||
void view(Scope<> &s) const override
|
||||
{
|
||||
s.sub_scope<Frame>([&] (Scope<Frame> &s) {
|
||||
_main._network.dialog.view(s); });
|
||||
_main._network.dialog.view(s, _main._board_info); });
|
||||
}
|
||||
|
||||
void click(Clicked_at const &at) override
|
||||
@ -1406,7 +1397,7 @@ struct Sculpt::Main : Input_event_handler,
|
||||
* Subscribe to reports
|
||||
*/
|
||||
_update_state_rom .sigh(_update_state_handler);
|
||||
_pci_devices .sigh(_pci_devices_handler);
|
||||
_devices .sigh(_devices_handler);
|
||||
_window_list .sigh(_window_list_handler);
|
||||
_decorator_margins .sigh(_decorator_margins_handler);
|
||||
_scan_rom .sigh(_scan_handler);
|
||||
@ -1426,7 +1417,7 @@ struct Sculpt::Main : Input_event_handler,
|
||||
*/
|
||||
_handle_gui_mode();
|
||||
_storage.handle_storage_devices_update();
|
||||
_handle_pci_devices();
|
||||
_handle_devices();
|
||||
_handle_runtime_config();
|
||||
|
||||
/*
|
||||
|
56
repos/gems/src/app/sculpt_manager/model/board_info.h
Normal file
56
repos/gems/src/app/sculpt_manager/model/board_info.h
Normal file
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* \brief Board discovery information
|
||||
* \author Norman Feske
|
||||
* \date 2018-06-01
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
#ifndef _MODEL__BOARD_INFO_H_
|
||||
#define _MODEL__BOARD_INFO_H_
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace Sculpt { struct Board_info; }
|
||||
|
||||
struct Sculpt::Board_info
|
||||
{
|
||||
bool wifi_present;
|
||||
bool lan_present;
|
||||
bool modem_present;
|
||||
|
||||
static Board_info from_xml(Xml_node const &devices)
|
||||
{
|
||||
bool wifi = false, lan = false;
|
||||
|
||||
devices.for_each_sub_node("device", [&] (Xml_node const &device) {
|
||||
device.with_optional_sub_node("pci-config", [&] (Xml_node const &pci) {
|
||||
|
||||
auto has_class = [&] (unsigned class_value)
|
||||
{
|
||||
return pci.attribute_value("class", 0UL) == class_value;
|
||||
};
|
||||
|
||||
/* PCI class values */
|
||||
static constexpr unsigned WIFI = 0x28000,
|
||||
LAN = 0x20000;
|
||||
|
||||
if (has_class(WIFI)) wifi = true;
|
||||
if (has_class(LAN)) lan = true;
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
.wifi_present = wifi,
|
||||
.lan_present = lan,
|
||||
.modem_present = false
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* _MODEL__BOARD_INFO_H_ */
|
@ -1,28 +0,0 @@
|
||||
/*
|
||||
* \brief PCI discovery information
|
||||
* \author Norman Feske
|
||||
* \date 2018-06-01
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
#ifndef _MODEL__PCI_INFO_H_
|
||||
#define _MODEL__PCI_INFO_H_
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace Sculpt { struct Pci_info; }
|
||||
|
||||
struct Sculpt::Pci_info
|
||||
{
|
||||
bool wifi_present = false;
|
||||
bool lan_present = false;
|
||||
bool modem_present = false;
|
||||
};
|
||||
|
||||
#endif /* _MODEL__PCI_INFO_H_ */
|
@ -20,7 +20,7 @@
|
||||
|
||||
/* local includes */
|
||||
#include <model/child_exit_state.h>
|
||||
#include <model/pci_info.h>
|
||||
#include <model/board_info.h>
|
||||
#include <view/network_widget.h>
|
||||
#include <runtime.h>
|
||||
#include <keyboard_focus.h>
|
||||
@ -53,7 +53,6 @@ struct Sculpt::Network : Network_widget::Action
|
||||
Runtime_config_generator &_runtime_config_generator;
|
||||
|
||||
Runtime_info const &_runtime_info;
|
||||
Pci_info const &_pci_info;
|
||||
|
||||
using Wlan_config_policy = Network_widget::Wlan_config_policy;
|
||||
|
||||
@ -113,8 +112,7 @@ struct Sculpt::Network : Network_widget::Action
|
||||
|
||||
Network_widget dialog {
|
||||
_nic_target, _access_points,
|
||||
_wifi_connection, _nic_state, wpa_passphrase, _wlan_config_policy,
|
||||
_pci_info };
|
||||
_wifi_connection, _nic_state, wpa_passphrase, _wlan_config_policy };
|
||||
|
||||
Managed_config<Network> _wlan_config {
|
||||
_env, "config", "wifi", *this, &Network::_handle_wlan_config };
|
||||
@ -218,12 +216,12 @@ struct Sculpt::Network : Network_widget::Action
|
||||
Network(Env &env, Allocator &alloc, Action &action, Info const &info,
|
||||
Registry<Child_state> &child_states,
|
||||
Runtime_config_generator &runtime_config_generator,
|
||||
Runtime_info const &runtime_info, Pci_info const &pci_info)
|
||||
Runtime_info const &runtime_info)
|
||||
:
|
||||
_env(env), _alloc(alloc), _action(action), _info(info),
|
||||
_child_states(child_states),
|
||||
_runtime_config_generator(runtime_config_generator),
|
||||
_runtime_info(runtime_info), _pci_info(pci_info)
|
||||
_runtime_info(runtime_info)
|
||||
{
|
||||
/*
|
||||
* Subscribe to reports
|
||||
|
@ -17,7 +17,7 @@
|
||||
/* local includes */
|
||||
#include <model/nic_target.h>
|
||||
#include <model/nic_state.h>
|
||||
#include <model/pci_info.h>
|
||||
#include <model/board_info.h>
|
||||
#include <view/ap_selector_widget.h>
|
||||
|
||||
namespace Sculpt { struct Network_widget; }
|
||||
@ -29,7 +29,6 @@ struct Sculpt::Network_widget : Widget<Frame>
|
||||
|
||||
Nic_target const &_nic_target;
|
||||
Nic_state const &_nic_state;
|
||||
Pci_info const &_pci_info;
|
||||
|
||||
struct Action : Ap_selector_widget::Action
|
||||
{
|
||||
@ -47,7 +46,7 @@ struct Sculpt::Network_widget : Widget<Frame>
|
||||
_wifi { Id { "Wifi" }, Type::WIFI },
|
||||
_modem { Id { "Mobile data" }, Type::MODEM };
|
||||
|
||||
void view(Scope<Hbox> &s, Nic_target const &target, Pci_info const &pci_info) const
|
||||
void view(Scope<Hbox> &s, Nic_target const &target, Board_info const &board_info) const
|
||||
{
|
||||
Type const selected = target.type();
|
||||
|
||||
@ -61,15 +60,15 @@ struct Sculpt::Network_widget : Widget<Frame>
|
||||
s.widget(_local, selected);
|
||||
|
||||
if (target.managed() || target.manual_type == Nic_target::WIRED)
|
||||
if (pci_info.lan_present)
|
||||
if (board_info.lan_present)
|
||||
s.widget(_wired, selected);
|
||||
|
||||
if (target.managed() || target.manual_type == Nic_target::WIFI)
|
||||
if (pci_info.wifi_present)
|
||||
if (board_info.wifi_present)
|
||||
s.widget(_wifi, selected);
|
||||
|
||||
if (target.managed() || target.manual_type == Nic_target::MODEM)
|
||||
if (pci_info.modem_present)
|
||||
if (board_info.modem_present)
|
||||
s.widget(_modem, selected);
|
||||
}
|
||||
|
||||
@ -94,21 +93,20 @@ struct Sculpt::Network_widget : Widget<Frame>
|
||||
Wifi_connection const &wifi_connection,
|
||||
Nic_state const &nic_state,
|
||||
Blind_wpa_passphrase const &wpa_passphrase,
|
||||
Wlan_config_policy const &wlan_config_policy,
|
||||
Pci_info const &pci_info)
|
||||
Wlan_config_policy const &wlan_config_policy)
|
||||
:
|
||||
_nic_target(nic_target), _nic_state(nic_state), _pci_info(pci_info),
|
||||
_nic_target(nic_target), _nic_state(nic_state),
|
||||
_ap_selector(Id { "aps" },
|
||||
access_points, wifi_connection,
|
||||
wlan_config_policy, wpa_passphrase)
|
||||
{ }
|
||||
|
||||
void view(Scope<Frame> &s) const
|
||||
void view(Scope<Frame> &s, Board_info const &board_info) const
|
||||
{
|
||||
s.sub_scope<Vbox>([&] (Scope<Frame, Vbox> &s) {
|
||||
s.sub_scope<Min_ex>(35);
|
||||
|
||||
s.widget(_target_selector, _nic_target, _pci_info);
|
||||
s.widget(_target_selector, _nic_target, board_info);
|
||||
|
||||
if (_nic_target.wifi() || _nic_target.wired() || _nic_target.modem()) {
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user