From 6ef3f0f1538ff8b2e56a11ff0445089ee23fed7d Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 20 Feb 2013 17:15:29 +0100 Subject: [PATCH] usb: Move driver into library This raised the opportunity to structure the library more cleanly for each supported platform. --- dde_linux/lib/mk/arm/usb.inc | 6 + dde_linux/lib/mk/platform_arndale/usb.mk | 12 ++ dde_linux/lib/mk/platform_panda/usb.mk | 13 ++ dde_linux/lib/mk/usb.inc | 101 ++++++++++++ dde_linux/lib/mk/x86_32/usb.mk | 10 ++ dde_linux/src/drivers/usb/main.cc | 132 +-------------- dde_linux/src/drivers/usb/target.mk | 150 +----------------- .../usb/arm/platform => lib/usb/arm}/mem.cc | 0 .../usb/arm}/platform_arndale/platform.cc | 0 .../usb/arm}/platform_device.c | 0 .../usb/arm}/platform_panda/platform.cc | 0 dde_linux/src/{drivers => lib}/usb/dummies.c | 0 .../usb/include}/arm/platform/lx_emul.h | 0 .../usb/include}/arm/platform/platform.h | 0 .../usb => lib/usb/include}/lx_emul.h | 0 .../{drivers/usb => lib/usb/include}/mem.h | 0 .../usb => lib/usb/include}/nic/component.h | 0 .../usb => lib/usb/include}/platform.h | 0 .../usb => lib/usb/include}/routine.h | 0 .../{drivers/usb => lib/usb/include}/signal.h | 0 .../usb => lib/usb/include}/signal/dispatch.h | 0 .../usb/include}/storage/component.h | 0 .../usb => lib/usb/include}/storage/scsi.h | 0 .../usb/include/x86}/platform/lx_emul.h | 0 .../usb/include/x86}/platform/platform.h | 0 .../src/{drivers => lib}/usb/input/evdev.c | 0 .../usb/input/input_component.cc | 0 dde_linux/src/{drivers => lib}/usb/lx_emul.cc | 0 dde_linux/src/lib/usb/main.cc | 130 +++++++++++++++ dde_linux/src/{drivers => lib}/usb/nic/nic.cc | 0 .../src/{drivers => lib}/usb/pci_driver.cc | 0 .../src/{drivers => lib}/usb/signal/event.cc | 0 .../src/{drivers => lib}/usb/signal/irq.cc | 0 .../src/{drivers => lib}/usb/signal/timer.cc | 0 .../src/{drivers => lib}/usb/storage/scsi.c | 2 +- .../{drivers => lib}/usb/storage/storage.cc | 0 dde_linux/src/{drivers => lib}/usb/test.cc | 0 37 files changed, 281 insertions(+), 275 deletions(-) create mode 100644 dde_linux/lib/mk/arm/usb.inc create mode 100644 dde_linux/lib/mk/platform_arndale/usb.mk create mode 100644 dde_linux/lib/mk/platform_panda/usb.mk create mode 100644 dde_linux/lib/mk/usb.inc create mode 100644 dde_linux/lib/mk/x86_32/usb.mk rename dde_linux/src/{drivers/usb/arm/platform => lib/usb/arm}/mem.cc (100%) rename dde_linux/src/{drivers/usb/arm/platform => lib/usb/arm}/platform_arndale/platform.cc (100%) rename dde_linux/src/{drivers/usb/arm/platform => lib/usb/arm}/platform_device.c (100%) rename dde_linux/src/{drivers/usb/arm/platform => lib/usb/arm}/platform_panda/platform.cc (100%) rename dde_linux/src/{drivers => lib}/usb/dummies.c (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/arm/platform/lx_emul.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/arm/platform/platform.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/lx_emul.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/mem.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/nic/component.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/platform.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/routine.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/signal.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/signal/dispatch.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/storage/component.h (100%) rename dde_linux/src/{drivers/usb => lib/usb/include}/storage/scsi.h (100%) rename dde_linux/src/{drivers/usb/x86_32 => lib/usb/include/x86}/platform/lx_emul.h (100%) rename dde_linux/src/{drivers/usb/x86_32 => lib/usb/include/x86}/platform/platform.h (100%) rename dde_linux/src/{drivers => lib}/usb/input/evdev.c (100%) rename dde_linux/src/{drivers => lib}/usb/input/input_component.cc (100%) rename dde_linux/src/{drivers => lib}/usb/lx_emul.cc (100%) create mode 100644 dde_linux/src/lib/usb/main.cc rename dde_linux/src/{drivers => lib}/usb/nic/nic.cc (100%) rename dde_linux/src/{drivers => lib}/usb/pci_driver.cc (100%) rename dde_linux/src/{drivers => lib}/usb/signal/event.cc (100%) rename dde_linux/src/{drivers => lib}/usb/signal/irq.cc (100%) rename dde_linux/src/{drivers => lib}/usb/signal/timer.cc (100%) rename dde_linux/src/{drivers => lib}/usb/storage/scsi.c (99%) rename dde_linux/src/{drivers => lib}/usb/storage/storage.cc (100%) rename dde_linux/src/{drivers => lib}/usb/test.cc (100%) diff --git a/dde_linux/lib/mk/arm/usb.inc b/dde_linux/lib/mk/arm/usb.inc new file mode 100644 index 000000000..462de9e43 --- /dev/null +++ b/dde_linux/lib/mk/arm/usb.inc @@ -0,0 +1,6 @@ +SRC_C += platform_device.c +SRC_CC += mem.cc +INC_DIR += $(LIB_INC_DIR)/arm + +vpath platform_device.c $(LIB_DIR)/arm +vpath mem.cc $(LIB_DIR)/arm diff --git a/dde_linux/lib/mk/platform_arndale/usb.mk b/dde_linux/lib/mk/platform_arndale/usb.mk new file mode 100644 index 000000000..f8915f11b --- /dev/null +++ b/dde_linux/lib/mk/platform_arndale/usb.mk @@ -0,0 +1,12 @@ +include $(REP_DIR)/lib/mk/usb.inc +include $(REP_DIR)/lib/mk/arm/usb.inc + +CC_OPT += -DCONFIG_USB_EHCI_S5P -DCONFIG_USB_EHCI_TT_NEWSCHED +INC_DIR += $(CONTRIB_DIR)/arch/arm/plat-samsung/include +SRC_CC += platform.cc + +vpath platform.cc $(LIB_DIR)/arm/platform_arndale + + + + diff --git a/dde_linux/lib/mk/platform_panda/usb.mk b/dde_linux/lib/mk/platform_panda/usb.mk new file mode 100644 index 000000000..4f7f16ad6 --- /dev/null +++ b/dde_linux/lib/mk/platform_panda/usb.mk @@ -0,0 +1,13 @@ +include $(REP_DIR)/lib/mk/usb.inc +include $(REP_DIR)/lib/mk/arm/usb.inc + +CC_OPT += -DCONFIG_USB_EHCI_HCD_OMAP -DCONFIG_USB_EHCI_TT_NEWSCHED -DVERBOSE_DEBUG +SRC_C += usbnet.c smsc95xx.c +SRC_CC += platform.cc + +vpath platform.cc $(LIB_DIR)/arm/platform_panda +vpath %.c $(CONTRIB_DIR)/drivers/net/usb + + + + diff --git a/dde_linux/lib/mk/usb.inc b/dde_linux/lib/mk/usb.inc new file mode 100644 index 000000000..c73a743dc --- /dev/null +++ b/dde_linux/lib/mk/usb.inc @@ -0,0 +1,101 @@ +LIB_DIR = $(REP_DIR)/src/lib/usb +LIB_INC_DIR = $(LIB_DIR)/include + +LIBS += base cxx dde_kit libc-setjmp +SRC_CC += main.cc lx_emul.cc irq.cc timer.cc event.cc storage.cc \ + input_component.cc nic.cc +SRC_C += dummies.c scsi.c evdev.c + +CONTRIB_DIR := $(REP_DIR)/contrib +DRIVERS_DIR := $(CONTRIB_DIR)/drivers +USB_DIR := $(DRIVERS_DIR)/usb + +# +# The order of include-search directories is important, we need to look into +# 'contrib' before falling back to our custom 'lx_emul.h' header. +# +INC_DIR += $(LIB_INC_DIR) +INC_DIR += $(CONTRIB_DIR)/include + +CC_OPT += -U__linux__ -D__KERNEL__ +CC_OPT += -DCONFIG_USB_DEVICEFS -DCONFIG_HOTPLUG -DDEBUG + +CC_WARN = -Wall -Wno-unused-variable -Wno-uninitialized \ + -Wno-unused-function \ + +CC_C_OPT += -Wno-implicit-function-declaration -Wno-unused-but-set-variable \ + -Wno-pointer-sign + +# +# Suffix of global 'module_init' function +# +MOD_SUFFIX = +CC_OPT += -DMOD_SUFFIX=$(MOD_SUFFIX) + +# USB core +SRC_C += $(addprefix usb/core/,$(notdir $(wildcard $(USB_DIR)/core/*.c))) +SRC_C += usb/usb-common.c + +# USB host-controller driver +SRC_C += $(addprefix usb/host/, ehci-hcd.c) + +# USB hid +SRC_C += $(addprefix hid/usbhid/,hid-core.c hid-quirks.c) +SRC_C += hid/hid-input.c hid/hid-core.c input/evdev.c input/input.c + +# USB storage +SRC_C += $(addprefix usb/storage/,scsiglue.c protocol.c transport.c usb.c \ + initializers.c option_ms.c sierra_ms.c usual-tables.c) + +# SCSI +SRC_C += $(addprefix scsi/,scsi.c constants.c) + +# +# Determine the header files included by the contrib code. For each +# of these header files we create a symlink to 'lx_emul.h'. +# +GEN_INCLUDES := $(shell grep -rh "^\#include .*\/" $(CONTRIB_DIR) |\ + sed "s/^\#include *[<\"]\(.*\)[>\"].*/\1/" | sort | uniq) + +# +# Filter out original Linux headers that exist in the contrib directory +# +NO_GEN_INCLUDES := $(shell cd $(CONTRIB_DIR); find -name "*.h" | sed "s/.\///" | sed "s/.*include\///") +GEN_INCLUDES := $(filter-out $(NO_GEN_INCLUDES),$(GEN_INCLUDES)) + +# +# Put Linux headers in 'GEN_INC' dir, since some include use "../../" paths use +# three level include hierarchy +# +GEN_INC := $(shell pwd)/include/include/include + +$(shell mkdir -p $(GEN_INC)) + +GEN_INCLUDES := $(addprefix $(GEN_INC)/,$(GEN_INCLUDES)) +INC_DIR += $(GEN_INC) + +# +# Make sure to create the header symlinks prior building +# +$(SRC_C:.c=.o) $(SRC_CC:.cc=.o): $(GEN_INCLUDES) + + +# +# Add suffix, since there are two hid-core.c with the same module init function +# +hid/hid-core.o: MOD_SUFFIX="_core" + +$(GEN_INCLUDES): + $(VERBOSE)mkdir -p $(dir $@) + $(VERBOSE)ln -s $(LIB_INC_DIR)/lx_emul.h $@ + +vpath %.c $(DRIVERS_DIR) +vpath %.c $(USB_DIR)/host +vpath %.c $(LIB_DIR) +vpath %.cc $(LIB_DIR) +vpath %.cc $(LIB_DIR)/signal +vpath %.c $(LIB_DIR)/input +vpath %.cc $(LIB_DIR)/input +vpath %.cc $(LIB_DIR)/storage +vpath %.c $(LIB_DIR)/storage +vpath %.cc $(LIB_DIR)/nic diff --git a/dde_linux/lib/mk/x86_32/usb.mk b/dde_linux/lib/mk/x86_32/usb.mk new file mode 100644 index 000000000..be2b2bbc3 --- /dev/null +++ b/dde_linux/lib/mk/x86_32/usb.mk @@ -0,0 +1,10 @@ +include $(REP_DIR)/lib/mk/usb.inc + +CC_OPT += -DCONFIG_PCI +INC_DIR += $(LIB_INC_DIR)/x86 +SRC_C += $(addprefix usb/host/,pci-quirks.c uhci-hcd.c) +SRC_CC += pci_driver.cc + + + + diff --git a/dde_linux/src/drivers/usb/main.cc b/dde_linux/src/drivers/usb/main.cc index aaa3f036c..40c156903 100644 --- a/dde_linux/src/drivers/usb/main.cc +++ b/dde_linux/src/drivers/usb/main.cc @@ -1,132 +1,12 @@ /* - * \brief USB driver main program - * \author Norman Feske - * \author Sebastian Sumpf - * \date 2012-01-29 + * \brief Startup USB driver library + * \author Sebastian Sumpf + * \date 2013-02-20 */ -/* - * Copyright (C) 2012-2013 Genode Labs GmbH - * - * 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 -#include -#include -#include -#include -#include - -#include -/* Local */ -#include "storage/component.h" -#include "routine.h" -#include "signal.h" - -extern "C" { -#include -} - -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(); -extern "C" void module_usb_stor_init(); - -extern "C" void start_input_service(void *ep); - -Routine *Routine::_current = 0; -Routine *Routine::_dead = 0; -bool Routine::_all = false; - -void breakpoint() { PDBG("BREAK"); } - - -static void init(Services *services) +int main() { - /* start jiffies */ - dde_kit_timer_init(0, 0); - - /* USB */ - subsys_usb_init(); - - /* input + HID */ - if (services->hid) { - subsys_input_init(); - module_evdev_init(); - - /* HID */ - module_hid_init(); - } - - /* host controller */ - platform_hcd_init(services); - - /* storage */ - if (services->stor) - module_usb_stor_init(); -} - - -int main(int, char **) -{ - /* - * Initialize server entry point - */ - enum { STACK_SIZE = 4096 }; - static Cap_connection cap; - static Rpc_entrypoint ep_hid(&cap, STACK_SIZE, "usb_hid_ep"); - static Signal_receiver recv; - - Services services; - - try { - config()->xml_node().sub_node("hid"); - start_input_service(&ep_hid); - services.hid = true; - } catch (Config::Invalid) { - PDBG("No node found - not starting any USB services"); - return 0; - } catch (Xml_node::Nonexistent_sub_node) { - PDBG("No config node found - not starting the USB HID (Input) service"); - } - - try { - config()->xml_node().sub_node("storage"); - services.stor = true; - } catch (Xml_node::Nonexistent_sub_node) { - PDBG("No config node found - not starting the USB Storage (Block) service"); - } - - try { - config()->xml_node().sub_node("nic"); - services.nic = true; - } catch (Xml_node::Nonexistent_sub_node) { - PDBG("No config node found - not starting the USB Nic (Network) service"); - } - - Timer::init(&recv); - Irq::init(&recv); - Event::init(&recv); - Service_handler::s()->receiver(&recv); - Storage::init(&recv); - Nic::init(&recv); - - Routine::add(0, 0, "Main", true); - Routine::current_use_first(); - init(&services); - - Routine::remove(); - - /* will never be reached */ - sleep_forever(); - + extern void start_usb_driver(); + start_usb_driver(); return 0; } diff --git a/dde_linux/src/drivers/usb/target.mk b/dde_linux/src/drivers/usb/target.mk index fb45099ac..f3e8ea550 100644 --- a/dde_linux/src/drivers/usb/target.mk +++ b/dde_linux/src/drivers/usb/target.mk @@ -1,149 +1,3 @@ TARGET = usb_drv -LIBS = dde_kit libc-setjmp -SRC_CC = main.cc lx_emul.cc irq.cc timer.cc event.cc storage.cc \ - input_component.cc nic.cc -SRC_C = dummies.c scsi.c evdev.c - -CONTRIB_DIR := $(REP_DIR)/contrib -DRIVERS_DIR := $(CONTRIB_DIR)/drivers -USB_DIR := $(DRIVERS_DIR)/usb - -# -# The order of include-search directories is important, we need to look into -# 'contrib' before falling back to our custom 'lx_emul.h' header. -# -INC_DIR += $(PRG_DIR) -INC_DIR += $(CONTRIB_DIR)/include - -CC_OPT += -U__linux__ -D__KERNEL__ -CC_OPT += -DCONFIG_USB_DEVICEFS -DCONFIG_HOTPLUG -DDEBUG - -CC_WARN = -Wall -Wno-unused-variable -Wno-uninitialized \ - -Wno-unused-function \ - -CC_C_OPT += -Wno-implicit-function-declaration -Wno-unused-but-set-variable \ - -Wno-pointer-sign - -# -# Suffix of global 'module_init' function -# -MOD_SUFFIX = -CC_OPT += -DMOD_SUFFIX=$(MOD_SUFFIX) - -# USB core -SRC_C += $(addprefix usb/core/,$(notdir $(wildcard $(USB_DIR)/core/*.c))) -SRC_C += usb/usb-common.c - -# USB host-controller driver -SRC_C += $(addprefix usb/host/, ehci-hcd.c) - -# USB hid -SRC_C += $(addprefix hid/usbhid/,hid-core.c hid-quirks.c) -SRC_C += hid/hid-input.c hid/hid-core.c input/evdev.c input/input.c - -# USB storage -SRC_C += $(addprefix usb/storage/,scsiglue.c protocol.c transport.c usb.c \ - initializers.c option_ms.c sierra_ms.c usual-tables.c) - -# SCSI -SRC_C += $(addprefix scsi/,scsi.c constants.c) - -# -# Determine the header files included by the contrib code. For each -# of these header files we create a symlink to 'lx_emul.h'. -# -GEN_INCLUDES := $(shell grep -rh "^\#include .*\/" $(CONTRIB_DIR) |\ - sed "s/^\#include *[<\"]\(.*\)[>\"].*/\1/" | sort | uniq) -# -# Filter out some black-listed headers -# - - -######################## -## Platform specifics ## -######################## - -SUPPORTED = x86_32 platform_panda - - -# -# x86_32 -# -ifeq ($(filter-out $(SPECS),x86_32),) -INC_DIR += $(PRG_DIR)/x86_32 -CC_OPT += -DCONFIG_PCI -SRC_C += $(addprefix usb/host/,pci-quirks.c uhci-hcd.c) -SRC_CC += pci_driver.cc - -# -# Panda board -# -else ifeq ($(filter-out $(SPECS),platform_panda),) -CC_OPT += -DCONFIG_USB_EHCI_HCD_OMAP -DCONFIG_USB_EHCI_TT_NEWSCHED -DVERBOSE_DEBUG -INC_DIR += $(PRG_DIR)/arm -SRC_C += platform_device.c usbnet.c smsc95xx.c -SRC_CC += platform.cc mem.cc -vpath %.c $(PRG_DIR)/arm/platform -vpath %.cc $(PRG_DIR)/arm/platform -vpath %.cc $(PRG_DIR)/arm/platform/platform_panda -vpath %.c $(CONTRIB_DIR)/drivers/net/usb - -else ifeq ($(filter-out $(SPECS),platform_arndale),) -CC_OPT += -DCONFIG_USB_EHCI_S5P -DCONFIG_USB_EHCI_TT_NEWSCHED -INC_DIR += $(PRG_DIR)/arm -INC_DIR += $(CONTRIB_DIR)/arch/arm/plat-samsung/include -SRC_C += platform_device.c -SRC_CC += platform.cc -vpath %.c $(PRG_DIR)/arm/platform -vpath %.cc $(PRG_DIR)/arm/platform/platform_arndale - -# -# Unsupported -# -else -$(error Skip USB because it requires one of the following: $(SUPPORTED)) -endif - -# -# Filter out original Linux headers that exist in the contrib directory -# -NO_GEN_INCLUDES := $(shell cd $(CONTRIB_DIR)/include; find -name "*.h" | sed "s/.\///") -GEN_INCLUDES := $(filter-out $(NO_GEN_INCLUDES),$(GEN_INCLUDES)) - -# -# Put Linux headers in 'GEN_INC' dir, since some include use "../../" paths use -# three level include hierarchy -# -GEN_INC := $(shell pwd)/include/include/include - -$(shell mkdir -p $(GEN_INC)) - -GEN_INCLUDES := $(addprefix $(GEN_INC)/,$(GEN_INCLUDES)) -INC_DIR += $(GEN_INC) - -# -# Make sure to create the header symlinks prior building -# -$(SRC_C:.c=.o) $(SRC_CC:.cc=.o): $(GEN_INCLUDES) - - -# -# Add suffix, since there are two hid-core.c with the same module init function -# -hid/hid-core.o: MOD_SUFFIX="_core" - -$(GEN_INCLUDES): - $(VERBOSE)mkdir -p $(dir $@) - $(VERBOSE)ln -s $(REP_DIR)/src/drivers/usb/lx_emul.h $@ - -vpath %.c $(DRIVERS_DIR) -vpath %.c $(USB_DIR)/host -vpath %.cc $(PRG_DIR)/signal -vpath %.c $(PRG_DIR)/input -vpath %.cc $(PRG_DIR)/input -vpath %.cc $(PRG_DIR)/storage -vpath %.c $(PRG_DIR)/storage -vpath %.cc $(PRG_DIR)/nic - -clean cleanall: - $(VERBOSE) rm -r include +SRC_CC = main.cc +LIBS = usb diff --git a/dde_linux/src/drivers/usb/arm/platform/mem.cc b/dde_linux/src/lib/usb/arm/mem.cc similarity index 100% rename from dde_linux/src/drivers/usb/arm/platform/mem.cc rename to dde_linux/src/lib/usb/arm/mem.cc diff --git a/dde_linux/src/drivers/usb/arm/platform/platform_arndale/platform.cc b/dde_linux/src/lib/usb/arm/platform_arndale/platform.cc similarity index 100% rename from dde_linux/src/drivers/usb/arm/platform/platform_arndale/platform.cc rename to dde_linux/src/lib/usb/arm/platform_arndale/platform.cc diff --git a/dde_linux/src/drivers/usb/arm/platform/platform_device.c b/dde_linux/src/lib/usb/arm/platform_device.c similarity index 100% rename from dde_linux/src/drivers/usb/arm/platform/platform_device.c rename to dde_linux/src/lib/usb/arm/platform_device.c diff --git a/dde_linux/src/drivers/usb/arm/platform/platform_panda/platform.cc b/dde_linux/src/lib/usb/arm/platform_panda/platform.cc similarity index 100% rename from dde_linux/src/drivers/usb/arm/platform/platform_panda/platform.cc rename to dde_linux/src/lib/usb/arm/platform_panda/platform.cc diff --git a/dde_linux/src/drivers/usb/dummies.c b/dde_linux/src/lib/usb/dummies.c similarity index 100% rename from dde_linux/src/drivers/usb/dummies.c rename to dde_linux/src/lib/usb/dummies.c diff --git a/dde_linux/src/drivers/usb/arm/platform/lx_emul.h b/dde_linux/src/lib/usb/include/arm/platform/lx_emul.h similarity index 100% rename from dde_linux/src/drivers/usb/arm/platform/lx_emul.h rename to dde_linux/src/lib/usb/include/arm/platform/lx_emul.h diff --git a/dde_linux/src/drivers/usb/arm/platform/platform.h b/dde_linux/src/lib/usb/include/arm/platform/platform.h similarity index 100% rename from dde_linux/src/drivers/usb/arm/platform/platform.h rename to dde_linux/src/lib/usb/include/arm/platform/platform.h diff --git a/dde_linux/src/drivers/usb/lx_emul.h b/dde_linux/src/lib/usb/include/lx_emul.h similarity index 100% rename from dde_linux/src/drivers/usb/lx_emul.h rename to dde_linux/src/lib/usb/include/lx_emul.h diff --git a/dde_linux/src/drivers/usb/mem.h b/dde_linux/src/lib/usb/include/mem.h similarity index 100% rename from dde_linux/src/drivers/usb/mem.h rename to dde_linux/src/lib/usb/include/mem.h diff --git a/dde_linux/src/drivers/usb/nic/component.h b/dde_linux/src/lib/usb/include/nic/component.h similarity index 100% rename from dde_linux/src/drivers/usb/nic/component.h rename to dde_linux/src/lib/usb/include/nic/component.h diff --git a/dde_linux/src/drivers/usb/platform.h b/dde_linux/src/lib/usb/include/platform.h similarity index 100% rename from dde_linux/src/drivers/usb/platform.h rename to dde_linux/src/lib/usb/include/platform.h diff --git a/dde_linux/src/drivers/usb/routine.h b/dde_linux/src/lib/usb/include/routine.h similarity index 100% rename from dde_linux/src/drivers/usb/routine.h rename to dde_linux/src/lib/usb/include/routine.h diff --git a/dde_linux/src/drivers/usb/signal.h b/dde_linux/src/lib/usb/include/signal.h similarity index 100% rename from dde_linux/src/drivers/usb/signal.h rename to dde_linux/src/lib/usb/include/signal.h diff --git a/dde_linux/src/drivers/usb/signal/dispatch.h b/dde_linux/src/lib/usb/include/signal/dispatch.h similarity index 100% rename from dde_linux/src/drivers/usb/signal/dispatch.h rename to dde_linux/src/lib/usb/include/signal/dispatch.h diff --git a/dde_linux/src/drivers/usb/storage/component.h b/dde_linux/src/lib/usb/include/storage/component.h similarity index 100% rename from dde_linux/src/drivers/usb/storage/component.h rename to dde_linux/src/lib/usb/include/storage/component.h diff --git a/dde_linux/src/drivers/usb/storage/scsi.h b/dde_linux/src/lib/usb/include/storage/scsi.h similarity index 100% rename from dde_linux/src/drivers/usb/storage/scsi.h rename to dde_linux/src/lib/usb/include/storage/scsi.h diff --git a/dde_linux/src/drivers/usb/x86_32/platform/lx_emul.h b/dde_linux/src/lib/usb/include/x86/platform/lx_emul.h similarity index 100% rename from dde_linux/src/drivers/usb/x86_32/platform/lx_emul.h rename to dde_linux/src/lib/usb/include/x86/platform/lx_emul.h diff --git a/dde_linux/src/drivers/usb/x86_32/platform/platform.h b/dde_linux/src/lib/usb/include/x86/platform/platform.h similarity index 100% rename from dde_linux/src/drivers/usb/x86_32/platform/platform.h rename to dde_linux/src/lib/usb/include/x86/platform/platform.h diff --git a/dde_linux/src/drivers/usb/input/evdev.c b/dde_linux/src/lib/usb/input/evdev.c similarity index 100% rename from dde_linux/src/drivers/usb/input/evdev.c rename to dde_linux/src/lib/usb/input/evdev.c diff --git a/dde_linux/src/drivers/usb/input/input_component.cc b/dde_linux/src/lib/usb/input/input_component.cc similarity index 100% rename from dde_linux/src/drivers/usb/input/input_component.cc rename to dde_linux/src/lib/usb/input/input_component.cc diff --git a/dde_linux/src/drivers/usb/lx_emul.cc b/dde_linux/src/lib/usb/lx_emul.cc similarity index 100% rename from dde_linux/src/drivers/usb/lx_emul.cc rename to dde_linux/src/lib/usb/lx_emul.cc diff --git a/dde_linux/src/lib/usb/main.cc b/dde_linux/src/lib/usb/main.cc new file mode 100644 index 000000000..f57248cc3 --- /dev/null +++ b/dde_linux/src/lib/usb/main.cc @@ -0,0 +1,130 @@ +/* + * \brief USB driver main program + * \author Norman Feske + * \author Sebastian Sumpf + * \date 2012-01-29 + */ + +/* + * Copyright (C) 2012-2013 Genode Labs GmbH + * + * 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 +#include +#include +#include +#include +#include + +#include +/* Local */ +#include "storage/component.h" +#include "routine.h" +#include "signal.h" + +extern "C" { +#include +} + +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(); +extern "C" void module_usb_stor_init(); + +extern "C" void start_input_service(void *ep); + +Routine *Routine::_current = 0; +Routine *Routine::_dead = 0; +bool Routine::_all = false; + +void breakpoint() { PDBG("BREAK"); } + + +static void init(Services *services) +{ + /* start jiffies */ + dde_kit_timer_init(0, 0); + + /* USB */ + subsys_usb_init(); + + /* input + HID */ + if (services->hid) { + subsys_input_init(); + module_evdev_init(); + + /* HID */ + module_hid_init(); + } + + /* host controller */ + platform_hcd_init(services); + + /* storage */ + if (services->stor) + module_usb_stor_init(); +} + + +void start_usb_driver() +{ + /* + * Initialize server entry point + */ + enum { STACK_SIZE = 4096 }; + static Cap_connection cap; + static Rpc_entrypoint ep_hid(&cap, STACK_SIZE, "usb_hid_ep"); + static Signal_receiver recv; + + Services services; + + try { + config()->xml_node().sub_node("hid"); + start_input_service(&ep_hid); + services.hid = true; + } catch (Config::Invalid) { + PDBG("No node found - not starting any USB services"); + return; + } catch (Xml_node::Nonexistent_sub_node) { + PDBG("No config node found - not starting the USB HID (Input) service"); + } + + try { + config()->xml_node().sub_node("storage"); + services.stor = true; + } catch (Xml_node::Nonexistent_sub_node) { + PDBG("No config node found - not starting the USB Storage (Block) service"); + } + + try { + config()->xml_node().sub_node("nic"); + services.nic = true; + } catch (Xml_node::Nonexistent_sub_node) { + PDBG("No config node found - not starting the USB Nic (Network) service"); + } + + Timer::init(&recv); + Irq::init(&recv); + Event::init(&recv); + Service_handler::s()->receiver(&recv); + Storage::init(&recv); + Nic::init(&recv); + + Routine::add(0, 0, "Main", true); + Routine::current_use_first(); + init(&services); + + Routine::remove(); + + /* will never be reached */ + sleep_forever(); +} diff --git a/dde_linux/src/drivers/usb/nic/nic.cc b/dde_linux/src/lib/usb/nic/nic.cc similarity index 100% rename from dde_linux/src/drivers/usb/nic/nic.cc rename to dde_linux/src/lib/usb/nic/nic.cc diff --git a/dde_linux/src/drivers/usb/pci_driver.cc b/dde_linux/src/lib/usb/pci_driver.cc similarity index 100% rename from dde_linux/src/drivers/usb/pci_driver.cc rename to dde_linux/src/lib/usb/pci_driver.cc diff --git a/dde_linux/src/drivers/usb/signal/event.cc b/dde_linux/src/lib/usb/signal/event.cc similarity index 100% rename from dde_linux/src/drivers/usb/signal/event.cc rename to dde_linux/src/lib/usb/signal/event.cc diff --git a/dde_linux/src/drivers/usb/signal/irq.cc b/dde_linux/src/lib/usb/signal/irq.cc similarity index 100% rename from dde_linux/src/drivers/usb/signal/irq.cc rename to dde_linux/src/lib/usb/signal/irq.cc diff --git a/dde_linux/src/drivers/usb/signal/timer.cc b/dde_linux/src/lib/usb/signal/timer.cc similarity index 100% rename from dde_linux/src/drivers/usb/signal/timer.cc rename to dde_linux/src/lib/usb/signal/timer.cc diff --git a/dde_linux/src/drivers/usb/storage/scsi.c b/dde_linux/src/lib/usb/storage/scsi.c similarity index 99% rename from dde_linux/src/drivers/usb/storage/scsi.c rename to dde_linux/src/lib/usb/storage/scsi.c index a47a82fb5..15aedd2b4 100644 --- a/dde_linux/src/drivers/usb/storage/scsi.c +++ b/dde_linux/src/lib/usb/storage/scsi.c @@ -36,7 +36,7 @@ #include -#include "scsi.h" +#include #define DEBUG_SCSI 0 diff --git a/dde_linux/src/drivers/usb/storage/storage.cc b/dde_linux/src/lib/usb/storage/storage.cc similarity index 100% rename from dde_linux/src/drivers/usb/storage/storage.cc rename to dde_linux/src/lib/usb/storage/storage.cc diff --git a/dde_linux/src/drivers/usb/test.cc b/dde_linux/src/lib/usb/test.cc similarity index 100% rename from dde_linux/src/drivers/usb/test.cc rename to dde_linux/src/lib/usb/test.cc