2013-02-20 17:15:29 +01:00
|
|
|
/*
|
|
|
|
* \brief USB driver main program
|
|
|
|
* \author Norman Feske
|
2014-07-11 16:08:59 +02:00
|
|
|
* \author Sebastian Sumpf <sebastian.sumpf@genode-labs.com>
|
|
|
|
* \author Christian Menard <christian.menard@ksyslabs.org>
|
2013-02-20 17:15:29 +01:00
|
|
|
* \date 2012-01-29
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
2014-07-11 16:08:59 +02:00
|
|
|
* Copyright (C) 2012-2014 Genode Labs GmbH
|
|
|
|
* Copyright (C) 2014 Ksys Labs LLC
|
2013-02-20 17:15:29 +01:00
|
|
|
*
|
|
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
|
|
* under the terms of the GNU General Public License version 2.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/* Genode */
|
|
|
|
#include <base/printf.h>
|
|
|
|
#include <base/sleep.h>
|
2014-01-13 13:44:33 +01:00
|
|
|
#include <os/server.h>
|
2013-02-20 17:15:29 +01:00
|
|
|
#include <nic_session/nic_session.h>
|
2013-05-17 14:40:48 +02:00
|
|
|
|
2013-02-20 17:15:29 +01:00
|
|
|
/* Local */
|
2013-05-17 14:40:48 +02:00
|
|
|
#include <platform.h>
|
|
|
|
#include <routine.h>
|
|
|
|
#include <signal.h>
|
2013-02-20 17:15:29 +01:00
|
|
|
|
|
|
|
using namespace Genode;
|
|
|
|
|
|
|
|
extern "C" int subsys_usb_init();
|
|
|
|
extern "C" void subsys_input_init();
|
|
|
|
extern "C" void module_evdev_init();
|
|
|
|
extern "C" void module_hid_init();
|
|
|
|
extern "C" void module_hid_init_core();
|
2013-04-23 16:03:55 +02:00
|
|
|
extern "C" void module_hid_generic_init();
|
2014-06-02 13:50:17 +02:00
|
|
|
extern "C" void module_usb_storage_driver_init();
|
2014-12-02 16:04:47 +01:00
|
|
|
extern "C" void module_wacom_driver_init();
|
2013-04-23 16:03:55 +02:00
|
|
|
extern "C" void module_ch_driver_init();
|
2016-02-05 15:44:44 +01:00
|
|
|
extern "C" void module_ms_driver_init();
|
2014-07-11 16:08:59 +02:00
|
|
|
extern "C" void module_mt_driver_init();
|
2014-11-13 15:44:15 +01:00
|
|
|
extern "C" void module_raw_driver_init();
|
2013-02-20 17:15:29 +01:00
|
|
|
|
2015-02-25 17:46:26 +01:00
|
|
|
extern "C" void start_input_service(void *ep, void *services);
|
2013-02-20 17:15:29 +01:00
|
|
|
|
|
|
|
Routine *Routine::_current = 0;
|
|
|
|
Routine *Routine::_dead = 0;
|
2014-01-13 13:44:33 +01:00
|
|
|
Routine *Routine::_main = 0;
|
2013-02-20 17:15:29 +01:00
|
|
|
bool Routine::_all = false;
|
|
|
|
|
|
|
|
void breakpoint() { PDBG("BREAK"); }
|
|
|
|
|
|
|
|
|
|
|
|
static void init(Services *services)
|
|
|
|
{
|
2015-05-08 18:00:35 +02:00
|
|
|
/*
|
|
|
|
* The RAW driver is initialized first to make sure that it doesn't miss
|
|
|
|
* notifications about added devices.
|
|
|
|
*/
|
|
|
|
if (services->raw)
|
|
|
|
/* low level interface */
|
|
|
|
module_raw_driver_init();
|
|
|
|
|
2013-02-20 17:15:29 +01:00
|
|
|
/* USB */
|
|
|
|
subsys_usb_init();
|
|
|
|
|
|
|
|
/* input + HID */
|
|
|
|
if (services->hid) {
|
|
|
|
subsys_input_init();
|
|
|
|
module_evdev_init();
|
|
|
|
|
|
|
|
/* HID */
|
2013-03-25 17:56:00 +01:00
|
|
|
module_hid_init_core();
|
2013-02-20 17:15:29 +01:00
|
|
|
module_hid_init();
|
2013-04-23 16:03:55 +02:00
|
|
|
module_hid_generic_init();
|
|
|
|
module_ch_driver_init();
|
2016-02-05 15:44:44 +01:00
|
|
|
module_ms_driver_init();
|
2014-07-11 16:08:59 +02:00
|
|
|
module_mt_driver_init();
|
2014-12-02 16:04:47 +01:00
|
|
|
module_wacom_driver_init();
|
2013-02-20 17:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* host controller */
|
|
|
|
platform_hcd_init(services);
|
|
|
|
|
|
|
|
/* storage */
|
|
|
|
if (services->stor)
|
2014-06-02 13:50:17 +02:00
|
|
|
module_usb_storage_driver_init();
|
2013-02-20 17:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-01-13 13:44:33 +01:00
|
|
|
void start_usb_driver(Server::Entrypoint &ep)
|
2013-02-20 17:15:29 +01:00
|
|
|
{
|
|
|
|
Services services;
|
|
|
|
|
2013-05-17 14:40:48 +02:00
|
|
|
if (services.hid)
|
2015-02-25 17:46:26 +01:00
|
|
|
start_input_service(&ep.rpc_ep(), &services);
|
2013-02-20 17:15:29 +01:00
|
|
|
|
2014-01-13 13:44:33 +01:00
|
|
|
Timer::init(ep);
|
|
|
|
Irq::init(ep);
|
|
|
|
Event::init(ep);
|
|
|
|
Storage::init(ep);
|
|
|
|
Nic::init(ep);
|
2013-02-20 17:15:29 +01:00
|
|
|
|
2014-11-13 15:44:15 +01:00
|
|
|
if (services.raw)
|
2015-05-08 18:00:35 +02:00
|
|
|
Raw::init(ep, services.raw_report_device_list);
|
2014-11-13 15:44:15 +01:00
|
|
|
|
2013-02-20 17:15:29 +01:00
|
|
|
Routine::add(0, 0, "Main", true);
|
2014-06-02 13:50:17 +02:00
|
|
|
Routine::make_main_current();
|
2013-02-20 17:15:29 +01:00
|
|
|
init(&services);
|
|
|
|
|
2014-01-13 13:44:33 +01:00
|
|
|
Routine::main();
|
2013-02-20 17:15:29 +01:00
|
|
|
}
|