mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 09:46:20 +00:00
parent
7770a0fbbe
commit
e527f6e5ac
120
repos/os/run/input.run
Normal file
120
repos/os/run/input.run
Normal file
@ -0,0 +1,120 @@
|
||||
#
|
||||
# Build
|
||||
#
|
||||
|
||||
set build_components {
|
||||
core init
|
||||
drivers/input
|
||||
drivers/timer
|
||||
drivers/pci
|
||||
test/input
|
||||
}
|
||||
|
||||
build $build_components
|
||||
|
||||
create_boot_directory
|
||||
|
||||
#
|
||||
# Generate config
|
||||
#
|
||||
|
||||
append config {
|
||||
<config>
|
||||
<parent-provides>
|
||||
<service name="ROM"/>
|
||||
<service name="RAM"/>
|
||||
<service name="IRQ"/>
|
||||
<service name="IO_MEM"/>
|
||||
<service name="IO_PORT"/>
|
||||
<service name="CAP"/>
|
||||
<service name="PD"/>
|
||||
<service name="RM"/>
|
||||
<service name="CPU"/>
|
||||
<service name="LOG"/>
|
||||
<service name="SIGNAL"/>
|
||||
</parent-provides>
|
||||
<default-route/>
|
||||
|
||||
<start name="timer">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<provides><service name="Timer"/></provides>
|
||||
<route>
|
||||
<service name="CAP"> <parent/> </service>
|
||||
<service name="LOG"> <parent/> </service>
|
||||
<service name="RM"> <parent/> </service>
|
||||
<service name="ROM"> <parent/> </service>
|
||||
<service name="SIGNAL"> <parent/> </service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="pci_drv">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<provides>
|
||||
<service name="PCI"/>
|
||||
</provides>
|
||||
<route>
|
||||
<service name="CAP"> <parent/> </service>
|
||||
<service name="IO_PORT"> <parent/> </service>
|
||||
<service name="IRQ"> <parent/> </service>
|
||||
<service name="LOG"> <parent/> </service>
|
||||
<service name="RAM"> <parent/> </service>
|
||||
<service name="RM"> <parent/> </service>
|
||||
<service name="ROM"> <parent/> </service>
|
||||
<service name="SIGNAL"> <parent/> </service>
|
||||
</route>
|
||||
<config>
|
||||
<policy label="ps2_drv">
|
||||
<device name="PS2"/>
|
||||
</policy>
|
||||
</config>
|
||||
</start>
|
||||
|
||||
<start name="ps2_drv">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<provides><service name="Input"/></provides>
|
||||
<route>
|
||||
<service name="CAP"> <parent/> </service>
|
||||
<service name="IO_PORT"> <parent/> </service>
|
||||
<service name="LOG"> <parent/> </service>
|
||||
<service name="RM"> <parent/> </service>
|
||||
<service name="SIGNAL"> <parent/> </service>
|
||||
<service name="PCI"> <child name="pci_drv"/> </service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="test-input">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<route>
|
||||
<service name="LOG"> <parent/> </service>
|
||||
<service name="RM"> <parent/> </service>
|
||||
<service name="SIGNAL"> <parent/> </service>
|
||||
|
||||
<service name="Input"> <child name="ps2_drv"/> </service>
|
||||
<service name="Timer"> <child name="timer"/> </service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
</config>}
|
||||
|
||||
install_config $config
|
||||
|
||||
#
|
||||
# Boot modules
|
||||
#
|
||||
|
||||
# generic modules
|
||||
set boot_modules {
|
||||
core init
|
||||
timer
|
||||
pci_drv
|
||||
ps2_drv
|
||||
test-input
|
||||
}
|
||||
|
||||
# platform-specific modules
|
||||
|
||||
build_boot_image $boot_modules
|
||||
|
||||
append qemu_args " -m 256 "
|
||||
|
||||
run_genode_until forever
|
@ -26,7 +26,7 @@ class Irq_handler
|
||||
{
|
||||
private:
|
||||
|
||||
Genode::Irq_connection _irq;
|
||||
Genode::Irq_session_client _irq;
|
||||
Genode::Signal_rpc_member<Irq_handler> _dispatcher;
|
||||
Input_driver &_input_driver;
|
||||
|
||||
@ -40,17 +40,16 @@ class Irq_handler
|
||||
|
||||
public:
|
||||
|
||||
Irq_handler(Server::Entrypoint &ep,
|
||||
int irq_number, Input_driver &input_driver)
|
||||
Irq_handler(Server::Entrypoint &ep, Input_driver &input_driver,
|
||||
Genode::Irq_session_capability irq_cap)
|
||||
:
|
||||
_irq(irq_number),
|
||||
_irq(irq_cap),
|
||||
_dispatcher(ep, *this, &Irq_handler::_handle),
|
||||
_input_driver(input_driver)
|
||||
{
|
||||
_irq.sigh(_dispatcher);
|
||||
_irq.ack_irq();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif /* _IRQ_HANDLER_H_ */
|
||||
|
@ -11,14 +11,16 @@
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
/* base includes */
|
||||
#include <base/env.h>
|
||||
#include <base/printf.h>
|
||||
#include <base/sleep.h>
|
||||
|
||||
/* os includes */
|
||||
#include <input/component.h>
|
||||
#include <input/root.h>
|
||||
#include <cap_session/connection.h>
|
||||
#include <os/server.h>
|
||||
#include <pci_session/connection.h>
|
||||
|
||||
/* local includes */
|
||||
#include "i8042.h"
|
||||
@ -40,16 +42,20 @@ struct Main
|
||||
Ps2_mouse ps2_mouse;
|
||||
Ps2_keyboard ps2_keybd;
|
||||
|
||||
Irq_handler ps2_mouse_irq;
|
||||
Pci::Connection platform;
|
||||
Pci::Device_client device_ps2;
|
||||
|
||||
Irq_handler ps2_keybd_irq;
|
||||
Irq_handler ps2_mouse_irq;
|
||||
|
||||
Main(Server::Entrypoint &ep)
|
||||
: ep(ep), root(ep.rpc_ep(), session),
|
||||
ps2_mouse(*i8042.aux_interface(), session.event_queue()),
|
||||
ps2_keybd(*i8042.kbd_interface(), session.event_queue(),
|
||||
i8042.kbd_xlate()),
|
||||
ps2_mouse_irq(ep, 12, ps2_mouse),
|
||||
ps2_keybd_irq(ep, 1, ps2_keybd)
|
||||
device_ps2(platform.device("PS2")),
|
||||
ps2_keybd_irq(ep, ps2_keybd, device_ps2.irq(0)),
|
||||
ps2_mouse_irq(ep, ps2_mouse, device_ps2.irq(1))
|
||||
{
|
||||
env()->parent()->announce(ep.manage(root));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user