diff --git a/dde_linux/Makefile b/dde_linux/Makefile
index 3ecbde4a73..86352fc0c1 100644
--- a/dde_linux/Makefile
+++ b/dde_linux/Makefile
@@ -9,32 +9,43 @@ VERBOSE ?= @
ECHO = @echo
PATCHES := $(shell find patches -name \*.patch)
-LINUX = linux-3.2.2
+LINUX = linux-3.8.6
LINUX_TBZ2 = $(LINUX).tar.bz2
LINUX_URL = http://www.kernel.org/pub/linux/kernel/v3.x/$(LINUX_TBZ2)
# Linux utilities
CONTENT += include/linux/list.h
-CONTENT += $(addprefix include/linux/,pci_ids.h pci_regs.h usb.h hid.h hiddev.h input.h mod_devicetable.h)
-CONTENT += $(addprefix include/linux/byteorder/,generic.h little_endian.h)
+CONTENT += $(addprefix include/linux/,pci_ids.h usb.h hid.h hiddev.h input.h mod_devicetable.h)
+CONTENT += include/linux/byteorder/generic.h
CONTENT += include/linux/swab.h
+
CONTENT += $(addprefix include/asm-generic/bitops/,__ffs.h non-atomic.h)
+CONTENT_UAPI = byteorder/little_endian.h hid.h input.h pci_regs.h usb/ch11.h \
+ usb/ch9.h
+CONTENT_USB = ch9.h phy.h
+CONTENT += $(addprefix include/uapi/linux/,$(CONTENT_UAPI))
+CONTENT += $(addprefix include/linux/usb/,$(CONTENT_USB))
+CONTENT += include/uapi/asm-generic/ioctl.h
+
# USB core
-CONTENT += drivers/usb/core
+CONTENT_CORE = buffer.c config.c devices.c driver.c endpoint.c file.c generic.c \
+ hcd.c hcd-pci.c hub.c message.c notify.c quirks.c urb.c \
+ usb.c usb.h
+CONTENT += $(addprefix drivers/usb/core/,$(CONTENT_CORE))
CONTENT += drivers/usb/usb-common.c
-CONTENT_INCLUDE_USB := ch11.h ch9.h ehci_def.h hcd.h input.h otg.h quirks.h storage.h
+CONTENT_INCLUDE_USB := ehci_def.h hcd.h input.h otg.h quirks.h storage.h
CONTENT += $(addprefix include/linux/usb/,$(CONTENT_INCLUDE_USB))
# needed by usb/core/devio.c
-CONTENT += include/linux/usbdevice_fs.h include/asm-generic/ioctl.h
+CONTENT += include/asm-generic/ioctl.h
# USB host-controller driver
CONTENT_USB_HOST := ehci.h ehci-hcd.c ehci-hub.c ehci-dbg.c ehci-mem.c \
ehci-omap.c ehci-q.c ehci-pci.c ehci-s5p.c ehci-sched.c \
- ehci-sysfs.c
+ ehci-sysfs.c ehci-timer.c
CONTENT_USB_HOST += ohci.h ohci-hcd.c ohci-hub.c ohci-dbg.c ohci-mem.c \
- ohci-q.c ohci-pci.c ehci-lpm.c
+ ohci-q.c ohci-pci.c
CONTENT_USB_HOST += uhci-hcd.h uhci-hcd.c uhci-debug.c uhci-q.c uhci-hub.c \
uhci-pci.c
CONTENT_USB_HOST += pci-quirks.h pci-quirks.c xhci-ext-caps.h
@@ -49,7 +60,7 @@ CONTENT += $(addprefix drivers/scsi/,scsi.h scsi.c constants.c scsi_priv.h scsi_
CONTENT += $(addprefix include/scsi/,scsi.h scsi_host.h)
# USB hid driver
-CONTENT += drivers/hid/hid-input.c drivers/hid/hid-core.c drivers/hid/hid-ids.h
+CONTENT += drivers/hid/hid-input.c drivers/hid/hid-generic.c drivers/hid/hid-core.c drivers/hid/hid-ids.h
CONTENT += drivers/hid/hid-cherry.c drivers/hid/usbhid
# needed by USB hid
@@ -62,14 +73,15 @@ CONTENT_NET = usbnet.c
# Panda board
CONTENT_NET += smsc95xx.c smsc95xx.h
# Arndale board
-CONTENT_NET += asix.c
+CONTENT_NET += asix_devices.c asix_common.c ax88172a.c asix.h
CONTENT += $(addprefix drivers/net/usb/,$(CONTENT_NET))
-CONTENT += include/linux/usb/usbnet.h
+CONTENT += include/linux/usb/usbnet.h include/linux/netdev_features.h
# Arndale
CONTENT_ARNDALE = ehci.h usb-phy.h
-CONTENT += $(addprefix arch/arm/plat-samsung/include/plat/,$(CONTENT_ARNDALE))
+CONTENT += arch/arm/plat-samsung/include/plat/usb-phy.h
+CONTENT += include/linux/platform_data/usb-ehci-s5p.h
#
#
@@ -102,6 +114,7 @@ $(CONTRIB_DIR)/.prepared: $(DOWNLOAD_DIR)/$(LINUX_TBZ2)
$(VERBOSE)touch $@
$(ECHO) "applying patches to '$(CONTRIB_DIR)/'"
$(VERBOSE)for i in $(PATCHES); do patch -d $(CONTRIB_DIR) -p1 < $$i; done
+ $(VERBOSE)ln -sf ../../uapi/linux/usb/ch11.h $(CONTRIB_DIR)/include/linux/usb/ch11.h
$(DOWNLOAD_DIR):
diff --git a/dde_linux/lib/mk/platform_arndale/usb.mk b/dde_linux/lib/mk/platform_arndale/usb.mk
index 38ae8e280c..1b292be17d 100644
--- a/dde_linux/lib/mk/platform_arndale/usb.mk
+++ b/dde_linux/lib/mk/platform_arndale/usb.mk
@@ -1,9 +1,9 @@
-SRC_C += usbnet.c asix.c
+SRC_C += usbnet.c asix_devices.c asix_common.c ax88172a.c
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
+CC_OPT += -DCONFIG_USB_EHCI_S5P -DCONFIG_USB_EHCI_TT_NEWSCHED -DCONFIG_OF
INC_DIR += $(CONTRIB_DIR)/arch/arm/plat-samsung/include
SRC_CC += platform.cc
diff --git a/dde_linux/lib/mk/usb.inc b/dde_linux/lib/mk/usb.inc
index 10154e7efd..273aaea2c2 100644
--- a/dde_linux/lib/mk/usb.inc
+++ b/dde_linux/lib/mk/usb.inc
@@ -10,18 +10,20 @@ CONTRIB_DIR := $(REP_DIR)/contrib
DRIVERS_DIR := $(CONTRIB_DIR)/drivers
USB_DIR := $(DRIVERS_DIR)/usb
+CC_OLEVEL = -O0
+
#
# 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
+INC_DIR += $(CONTRIB_DIR)/include $(CONTRIB_DIR)
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 \
+ -Wno-unused-function -Wno-overflow
CC_C_OPT += -Wno-implicit-function-declaration -Wno-unused-but-set-variable \
-Wno-pointer-sign
@@ -41,7 +43,7 @@ SRC_C += $(addprefix usb/host/, ehci-hcd.c)
# USB hid
SRC_C += $(addprefix hid/usbhid/, hid-core.c hid-quirks.c)
-SRC_C += $(addprefix hid/, hid-core.c hid-input.c hid-cherry.c)
+SRC_C += $(addprefix hid/, hid-core.c hid-generic.c hid-input.c hid-cherry.c)
SRC_C += $(addprefix input/, evdev.c input.c)
# USB storage
@@ -85,6 +87,7 @@ $(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"
+hid/hid-generic.o: MOD_SUFFIX="_generic"
$(GEN_INCLUDES):
$(VERBOSE)mkdir -p $(dir $@)
diff --git a/dde_linux/lib/mk/x86_32/usb.mk b/dde_linux/lib/mk/x86_32/usb.mk
index a537f77eb1..1856672e3a 100644
--- a/dde_linux/lib/mk/x86_32/usb.mk
+++ b/dde_linux/lib/mk/x86_32/usb.mk
@@ -1,7 +1,7 @@
-SRC_C += $(addprefix usb/host/,pci-quirks.c uhci-hcd.c)
+SRC_C += $(addprefix usb/host/,pci-quirks.c uhci-hcd.c ehci-pci.c)
include $(REP_DIR)/lib/mk/usb.inc
-CC_OPT += -DCONFIG_PCI
+CC_OPT += -DCONFIG_PCI -DCONFIG_USB_EHCI_PCI=1 -DCONFIG_USB_XHCI_HCD=0
INC_DIR += $(LIB_INC_DIR)/x86_32 $(LIB_INC_DIR)/x86
SRC_CC += pci_driver.cc
diff --git a/dde_linux/lib/mk/x86_64/usb.mk b/dde_linux/lib/mk/x86_64/usb.mk
index c1bcd6df8a..71d8a81ac5 100644
--- a/dde_linux/lib/mk/x86_64/usb.mk
+++ b/dde_linux/lib/mk/x86_64/usb.mk
@@ -1,7 +1,7 @@
-SRC_C += $(addprefix usb/host/,pci-quirks.c uhci-hcd.c)
+SRC_C += $(addprefix usb/host/,pci-quirks.c uhci-hcd.c ehci-pci.c)
include $(REP_DIR)/lib/mk/usb.inc
-CC_OPT += -DCONFIG_PCI
+CC_OPT += -DCONFIG_PCI -DCONFIG_USB_EHCI_PCI=1 -DCONFIG_USB_XHCI_HCD=0
INC_DIR += $(LIB_INC_DIR)/x86_64 $(LIB_INC_DIR)/x86
SRC_CC += pci_driver.cc
diff --git a/dde_linux/patches/asix.patch b/dde_linux/patches/asix.patch
deleted file mode 100644
index 81a6a15954..0000000000
--- a/dde_linux/patches/asix.patch
+++ /dev/null
@@ -1,55 +0,0 @@
---- download/linux-3.2.2/drivers/net/usb/asix.c 2012-01-26 01:39:32.000000000 +0100
-+++ contrib/drivers/net/usb/asix.c 2013-03-18 15:36:10.106168580 +0100
-@@ -191,7 +191,7 @@
- netdev_dbg(dev->net, "asix_read_cmd() cmd=0x%02x value=0x%04x index=0x%04x size=%d\n",
- cmd, value, index, size);
-
-- buf = kmalloc(size, GFP_KERNEL);
-+ buf = kmalloc(size, GFP_NOIO);
- if (!buf)
- goto out;
-
-@@ -225,7 +225,7 @@
- cmd, value, index, size);
-
- if (data) {
-- buf = kmemdup(data, size, GFP_KERNEL);
-+ buf = kmemdup(data, size, GFP_NOIO);
- if (!buf)
- goto out;
- }
-@@ -270,13 +270,13 @@
- netdev_dbg(dev->net, "asix_write_cmd_async() cmd=0x%02x value=0x%04x index=0x%04x size=%d\n",
- cmd, value, index, size);
-
-- urb = usb_alloc_urb(0, GFP_ATOMIC);
-+ urb = usb_alloc_urb(0, GFP_NOIO);
- if (!urb) {
- netdev_err(dev->net, "Error allocating URB in write_cmd_async!\n");
- return;
- }
-
-- req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
-+ req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
- if (!req) {
- netdev_err(dev->net, "Failed to allocate memory for control request\n");
- usb_free_urb(urb);
-@@ -294,7 +294,7 @@
- (void *)req, data, size,
- asix_async_cmd_callback, req);
-
-- status = usb_submit_urb(urb, GFP_ATOMIC);
-+ status = usb_submit_urb(urb, GFP_NOIO);
- if (status < 0) {
- netdev_err(dev->net, "Error submitting the control message: status=%d\n",
- status);
-@@ -1051,6 +1051,9 @@
- dbg("Write IPG,IPG1,IPG2 failed: %d", ret);
- goto out;
- }
-+
-+ if (!is_valid_ether_addr(dev->net->dev_addr))
-+ random_ether_addr(dev->net->dev_addr);
-
- /* Rewrite MAC address */
- memcpy(data->mac_addr, dev->net->dev_addr, ETH_ALEN);
diff --git a/dde_linux/patches/csum.patch b/dde_linux/patches/csum.patch
index b8258c20d3..1f9f477954 100644
--- a/dde_linux/patches/csum.patch
+++ b/dde_linux/patches/csum.patch
@@ -1,7 +1,7 @@
-diff -r 4d66ab105ff0 drivers/net/usb/smsc95xx.c
---- a/drivers/net/usb/smsc95xx.c Fri Jul 06 17:50:36 2012 +0200
-+++ b/drivers/net/usb/smsc95xx.c Fri Jul 06 17:55:13 2012 +0200
-@@ -1032,7 +1032,12 @@
+diff -r c094ecb374e9 drivers/net/usb/smsc95xx.c
+--- a/drivers/net/usb/smsc95xx.c Thu Apr 11 15:47:15 2013 +0200
++++ b/drivers/net/usb/smsc95xx.c Thu Apr 11 15:52:01 2013 +0200
+@@ -1747,7 +1747,13 @@
static void smsc95xx_rx_csum_offload(struct sk_buff *skb)
{
@@ -12,6 +12,7 @@ diff -r 4d66ab105ff0 drivers/net/usb/smsc95xx.c
+ */
+ char *tail = skb_tail_pointer(skb);
+ skb->csum = (*(tail - 2) << 8) | *(tail - 1);
++
skb->ip_summed = CHECKSUM_COMPLETE;
skb_trim(skb, skb->len - 2);
}
diff --git a/dde_linux/patches/evdev.patch b/dde_linux/patches/evdev.patch
index 4618cb5478..140d60f5e4 100644
--- a/dde_linux/patches/evdev.patch
+++ b/dde_linux/patches/evdev.patch
@@ -1,7 +1,7 @@
-diff -r 1d04c9c5fa8a drivers/input/evdev.c
---- a/drivers/input/evdev.c Tue Apr 17 16:14:54 2012 +0200
-+++ b/drivers/input/evdev.c Wed Apr 18 11:25:37 2012 +0200
-@@ -957,6 +957,9 @@
+diff -r 3e2b660685e7 drivers/input/evdev.c
+--- a/drivers/input/evdev.c Wed Apr 17 11:36:09 2013 +0200
++++ b/drivers/input/evdev.c Wed Apr 17 11:36:46 2013 +0200
+@@ -1008,6 +1008,9 @@
if (error)
goto err_cleanup_evdev;
@@ -11,12 +11,13 @@ diff -r 1d04c9c5fa8a drivers/input/evdev.c
return 0;
err_cleanup_evdev:
-@@ -986,7 +989,7 @@
+@@ -1040,8 +1043,7 @@
MODULE_DEVICE_TABLE(input, evdev_ids);
static struct input_handler evdev_handler = {
- .event = evdev_event,
+- .events = evdev_events,
+ .event = genode_evdev_event,
.connect = evdev_connect,
.disconnect = evdev_disconnect,
- .fops = &evdev_fops,
+ .legacy_minors = true,
diff --git a/dde_linux/patches/mem_optimization.patch b/dde_linux/patches/mem.patch
similarity index 68%
rename from dde_linux/patches/mem_optimization.patch
rename to dde_linux/patches/mem.patch
index 901146a10d..d46a9e3a48 100644
--- a/dde_linux/patches/mem_optimization.patch
+++ b/dde_linux/patches/mem.patch
@@ -1,7 +1,7 @@
-diff -ur a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
---- a/drivers/hid/usbhid/hid-core.c 2012-01-26 01:39:32.000000000 +0100
-+++ b/drivers/hid/usbhid/hid-core.c 2013-01-11 15:21:40.907579676 +0100
-@@ -789,7 +789,7 @@
+diff -r 7c6a35bba203 drivers/hid/usbhid/hid-core.c
+--- a/drivers/hid/usbhid/hid-core.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/hid/usbhid/hid-core.c Fri Apr 19 14:53:15 2013 +0200
+@@ -895,7 +895,7 @@
&usbhid->inbuf_dma);
usbhid->outbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
&usbhid->outbuf_dma);
@@ -10,7 +10,7 @@ diff -ur a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
usbhid->ctrlbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
&usbhid->ctrlbuf_dma);
if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr ||
-@@ -946,7 +946,7 @@
+@@ -1053,7 +1053,7 @@
return -EINVAL;
}
@@ -19,50 +19,14 @@ diff -ur a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
dbg_hid("couldn't allocate rdesc memory\n");
return -ENOMEM;
}
-Only in b/drivers/hid/usbhid: hid-core.c~
-diff -ur a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
---- a/drivers/net/usb/smsc95xx.c 2013-01-11 15:27:53.987584450 +0100
-+++ b/drivers/net/usb/smsc95xx.c 2013-01-11 15:11:06.467571241 +0100
-@@ -65,7 +65,7 @@
-
- static int smsc95xx_read_reg(struct usbnet *dev, u32 index, u32 *data)
- {
-- u32 *buf = kmalloc(4, GFP_KERNEL);
-+ u32 *buf = kmalloc(4, GFP_NOIO);
- int ret;
-
- BUG_ON(!dev);
-@@ -90,7 +90,7 @@
-
- static int smsc95xx_write_reg(struct usbnet *dev, u32 index, u32 data)
- {
-- u32 *buf = kmalloc(4, GFP_KERNEL);
-+ u32 *buf = kmalloc(4, GFP_NOIO);
- int ret;
-
- BUG_ON(!dev);
-@@ -328,7 +328,7 @@
- return -ENOMEM;
- }
-
-- usb_context = kmalloc(sizeof(struct usb_context), GFP_ATOMIC);
-+ usb_context = kmalloc(sizeof(struct usb_context), GFP_NOIO);
- if (usb_context == NULL) {
- netdev_warn(dev->net, "Error allocating control msg\n");
- usb_free_urb(urb);
-@@ -990,7 +990,7 @@
- }
-
- dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv),
-- GFP_KERNEL);
-+ GFP_NOIO);
-
- pdata = (struct smsc95xx_priv *)(dev->data[0]);
- if (!pdata) {
-diff -ur a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
---- a/drivers/net/usb/usbnet.c 2013-01-11 15:27:53.991584496 +0100
-+++ b/drivers/net/usb/usbnet.c 2013-01-11 15:11:06.467571241 +0100
-@@ -201,7 +201,7 @@
+diff -r 7c6a35bba203 drivers/net/usb/.smsc95xx.c.swp
+Binary file drivers/net/usb/.smsc95xx.c.swp has changed
+diff -r 7c6a35bba203 drivers/net/usb/.usbnet.c.swp
+Binary file drivers/net/usb/.usbnet.c.swp has changed
+diff -r 7c6a35bba203 drivers/net/usb/usbnet.c
+--- a/drivers/net/usb/usbnet.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/net/usb/usbnet.c Fri Apr 19 14:53:15 2013 +0200
+@@ -234,7 +234,7 @@
period = max ((int) dev->status->desc.bInterval,
(dev->udev->speed == USB_SPEED_HIGH) ? 7 : 3);
@@ -71,7 +35,7 @@ diff -ur a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
if (buf) {
dev->interrupt = usb_alloc_urb (0, GFP_KERNEL);
if (!dev->interrupt) {
-@@ -1512,7 +1512,7 @@
+@@ -1587,7 +1587,7 @@
if (!--dev->suspend_count) {
/* resume interrupt URBs */
if (dev->interrupt && test_bit(EVENT_DEV_OPEN, &dev->flags))
@@ -80,9 +44,54 @@ diff -ur a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
spin_lock_irq(&dev->txq.lock);
while ((res = usb_get_from_anchor(&dev->deferred))) {
-diff -ur a/drivers/usb/core/config.c b/drivers/usb/core/config.c
---- a/drivers/usb/core/config.c 2013-01-11 15:27:53.991584496 +0100
-+++ b/drivers/usb/core/config.c 2013-01-11 15:11:06.467571241 +0100
+@@ -1614,7 +1614,7 @@
+ netif_device_present(dev->net) &&
+ !timer_pending(&dev->delay) &&
+ !test_bit(EVENT_RX_HALT, &dev->flags))
+- rx_alloc_submit(dev, GFP_NOIO);
++ rx_alloc_submit(dev, GFP_KERNEL);
+
+ if (!(dev->txq.qlen >= TX_QLEN(dev)))
+ netif_tx_wake_all_queues(dev->net);
+@@ -1665,7 +1665,7 @@
+ cmd, reqtype, value, index, size);
+
+ if (data) {
+- buf = kmalloc(size, GFP_KERNEL);
++ buf = kmalloc(size, GFP_NOIO);
+ if (!buf)
+ goto out;
+ }
+@@ -1692,7 +1692,7 @@
+ cmd, reqtype, value, index, size);
+
+ if (data) {
+- buf = kmemdup(data, size, GFP_KERNEL);
++ buf = kmemdup(data, size, GFP_NOIO);
+ if (!buf)
+ goto out;
+ }
+@@ -1804,7 +1804,7 @@
+ }
+
+ if (data) {
+- buf = kmemdup(data, size, GFP_ATOMIC);
++ buf = kmemdup(data, size, GFP_NOIO);
+ if (!buf) {
+ netdev_err(dev->net, "Error allocating buffer"
+ " in %s!\n", __func__);
+@@ -1812,7 +1812,7 @@
+ }
+ }
+
+- req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC);
++ req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
+ if (!req) {
+ netdev_err(dev->net, "Failed to allocate memory for %s\n",
+ __func__);
+diff -r 7c6a35bba203 drivers/usb/core/config.c
+--- a/drivers/usb/core/config.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/core/config.c Fri Apr 19 14:53:15 2013 +0200
@@ -689,7 +689,7 @@
if (!dev->rawdescriptors)
goto err2;
@@ -92,7 +101,7 @@ diff -ur a/drivers/usb/core/config.c b/drivers/usb/core/config.c
if (!desc)
goto err2;
-@@ -716,7 +716,7 @@
+@@ -718,7 +718,7 @@
USB_DT_CONFIG_SIZE);
/* Now that we know the length, get the whole thing */
@@ -101,11 +110,10 @@ diff -ur a/drivers/usb/core/config.c b/drivers/usb/core/config.c
if (!bigbuffer) {
result = -ENOMEM;
goto err;
-Only in b/drivers/usb/core: config.c~
-diff -ur a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
---- a/drivers/usb/core/devices.c 2013-01-11 15:27:53.991584496 +0100
-+++ b/drivers/usb/core/devices.c 2013-01-11 15:11:06.467571241 +0100
-@@ -505,7 +505,7 @@
+diff -r 7c6a35bba203 drivers/usb/core/devices.c
+--- a/drivers/usb/core/devices.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/core/devices.c Fri Apr 19 14:53:15 2013 +0200
+@@ -506,7 +506,7 @@
return 0;
/* allocate 2^1 pages = 8K (on i386);
* should be more than enough for one device */
@@ -114,10 +122,10 @@ diff -ur a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
if (!pages_start)
return -ENOMEM;
-diff -ur a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
---- a/drivers/usb/core/hub.c 2013-01-11 15:27:53.991584496 +0100
-+++ b/drivers/usb/core/hub.c 2013-01-11 15:11:06.471571243 +0100
-@@ -740,7 +740,7 @@
+diff -r 7c6a35bba203 drivers/usb/core/hub.c
+--- a/drivers/usb/core/hub.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/core/hub.c Fri Apr 19 14:53:15 2013 +0200
+@@ -1077,7 +1077,7 @@
hcd = bus_to_hcd(hdev->bus);
if (hcd->driver->update_hub_device) {
ret = hcd->driver->update_hub_device(hcd, hdev,
@@ -126,7 +134,7 @@ diff -ur a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
if (ret < 0) {
dev_err(hub->intfdev, "Host not "
"accepting hub info "
-@@ -879,7 +879,7 @@
+@@ -1217,7 +1217,7 @@
init3:
hub->quiescing = 0;
@@ -135,8 +143,8 @@ diff -ur a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
if (status < 0)
dev_err(hub->intfdev, "activate --> %d\n", status);
if (hub->has_indicators && blinkenlights)
-@@ -968,20 +968,21 @@
- int maxp, ret;
+@@ -1352,20 +1352,20 @@
+ int maxp, ret, i;
char *message = "out of memory";
- hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL);
@@ -156,11 +164,22 @@ diff -ur a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
- hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_KERNEL);
+ hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_NOIO);
-+ printk("Alloc hub desc: %p\n", hub->descriptor);
if (!hub->descriptor) {
ret = -ENOMEM;
goto fail;
-@@ -3790,7 +3791,7 @@
+@@ -3437,9 +3437,9 @@
+ /*
+ * usb_enable_lpm() can be called as part of a failed device reset,
+ * which may be initiated by an error path of a mass storage driver.
+- * Therefore, use GFP_NOIO.
++ * Therefore, use GFP_KERNEL.
+ */
+- sel_values = kmalloc(sizeof *(sel_values), GFP_NOIO);
++ sel_values = kmalloc(sizeof *(sel_values), GFP_KERNEL);
+ if (!sel_values)
+ return -ENOMEM;
+
+@@ -4921,7 +4921,7 @@
len = max(len, old_length);
}
@@ -169,10 +188,9 @@ diff -ur a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
if (buf == NULL) {
dev_err(&udev->dev, "no mem to re-read configs after reset\n");
/* assume the worst */
-Only in b/drivers/usb/core: hub.c~
-diff -ur a/drivers/usb/core/message.c b/drivers/usb/core/message.c
---- a/drivers/usb/core/message.c 2013-01-11 15:27:53.991584496 +0100
-+++ b/drivers/usb/core/message.c 2013-01-11 15:11:06.471571243 +0100
+diff -r 7c6a35bba203 drivers/usb/core/message.c
+--- a/drivers/usb/core/message.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/core/message.c Fri Apr 19 14:53:15 2013 +0200
@@ -50,7 +50,7 @@
init_completion(&ctx.done);
urb->context = &ctx;
@@ -191,7 +209,7 @@ diff -ur a/drivers/usb/core/message.c b/drivers/usb/core/message.c
if (!urb)
return -ENOMEM;
-@@ -866,11 +866,11 @@
+@@ -865,11 +865,11 @@
if (index <= 0)
return NULL;
@@ -205,7 +223,7 @@ diff -ur a/drivers/usb/core/message.c b/drivers/usb/core/message.c
if (!smallbuf)
return buf;
memcpy(smallbuf, buf, len);
-@@ -941,7 +941,7 @@
+@@ -940,7 +940,7 @@
int usb_get_status(struct usb_device *dev, int type, int target, void *data)
{
int ret;
@@ -214,7 +232,7 @@ diff -ur a/drivers/usb/core/message.c b/drivers/usb/core/message.c
if (!status)
return -ENOMEM;
-@@ -1713,7 +1713,7 @@
+@@ -1730,7 +1730,7 @@
if (cp) {
nintf = cp->desc.bNumInterfaces;
new_interfaces = kmalloc(nintf * sizeof(*new_interfaces),
@@ -223,7 +241,7 @@ diff -ur a/drivers/usb/core/message.c b/drivers/usb/core/message.c
if (!new_interfaces) {
dev_err(&dev->dev, "Out of memory\n");
return -ENOMEM;
-@@ -1722,7 +1722,7 @@
+@@ -1739,7 +1739,7 @@
for (; n < nintf; ++n) {
new_interfaces[n] = kzalloc(
sizeof(struct usb_interface),
@@ -232,45 +250,9 @@ diff -ur a/drivers/usb/core/message.c b/drivers/usb/core/message.c
if (!new_interfaces[n]) {
dev_err(&dev->dev, "Out of memory\n");
ret = -ENOMEM;
-diff -ur a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
---- a/drivers/usb/core/urb.c 2013-01-11 15:27:53.995584562 +0100
-+++ b/drivers/usb/core/urb.c 2013-01-11 15:11:06.471571243 +0100
-@@ -266,7 +266,7 @@
- *
- * The general rules for how to decide which mem_flags to use
- * are the same as for kmalloc. There are four
-- * different possible values; GFP_KERNEL, GFP_NOFS, GFP_NOIO and
-+ * different possible values; GFP_KERNEL, GFP_NOFS, GFP_KERNEL and
- * GFP_ATOMIC.
- *
- * GFP_NOFS is not ever used, as it has not been implemented yet.
-@@ -279,7 +279,7 @@
- * (c) current->state != TASK_RUNNING, this is the case only after
- * you've changed it.
- *
-- * GFP_NOIO is used in the block io path and error handling of storage
-+ * GFP_KERNEL is used in the block io path and error handling of storage
- * devices.
- *
- * All other situations use GFP_KERNEL.
-@@ -290,12 +290,12 @@
- * (2) queuecommand methods of scsi drivers must use GFP_ATOMIC (also
- * called with a spinlock held);
- * (3) If you use a kernel thread with a network driver you must use
-- * GFP_NOIO, unless (b) or (c) apply;
-+ * GFP_KERNEL, unless (b) or (c) apply;
- * (4) after you have done a down() you can use GFP_KERNEL, unless (b) or (c)
- * apply or your are in a storage driver's block io path;
- * (5) USB probe and disconnect can use GFP_KERNEL unless (b) or (c) apply; and
- * (6) changing firmware on a running storage or net device uses
-- * GFP_NOIO, unless b) or c) apply
-+ * GFP_KERNEL, unless b) or c) apply
- *
- */
- int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
-diff -ur a/drivers/usb/storage/alauda.c b/drivers/usb/storage/alauda.c
---- a/drivers/usb/storage/alauda.c 2013-01-11 15:27:53.995584562 +0100
-+++ b/drivers/usb/storage/alauda.c 2013-01-11 15:11:06.471571243 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/alauda.c
+--- a/drivers/usb/storage/alauda.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/alauda.c Fri Apr 19 14:53:15 2013 +0200
@@ -448,8 +448,8 @@
num_zones = MEDIA_INFO(us).capacity >> (MEDIA_INFO(us).zoneshift
@@ -329,9 +311,9 @@ diff -ur a/drivers/usb/storage/alauda.c b/drivers/usb/storage/alauda.c
if (!us->extra) {
US_DEBUGP("init_alauda: Gah! Can't allocate storage for"
"alauda info struct!\n");
-diff -ur a/drivers/usb/storage/datafab.c b/drivers/usb/storage/datafab.c
---- a/drivers/usb/storage/datafab.c 2013-01-11 15:27:53.995584562 +0100
-+++ b/drivers/usb/storage/datafab.c 2013-01-11 15:11:06.471571243 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/datafab.c
+--- a/drivers/usb/storage/datafab.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/datafab.c Fri Apr 19 14:53:15 2013 +0200
@@ -174,7 +174,7 @@
// bounce buffer and the actual transfer buffer.
@@ -377,9 +359,9 @@ diff -ur a/drivers/usb/storage/datafab.c b/drivers/usb/storage/datafab.c
if (!us->extra) {
US_DEBUGP("datafab_transport: Gah! "
"Can't allocate storage for Datafab info struct!\n");
-diff -ur a/drivers/usb/storage/jumpshot.c b/drivers/usb/storage/jumpshot.c
---- a/drivers/usb/storage/jumpshot.c 2013-01-11 15:27:53.995584562 +0100
-+++ b/drivers/usb/storage/jumpshot.c 2013-01-11 15:11:06.471571243 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/jumpshot.c
+--- a/drivers/usb/storage/jumpshot.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/jumpshot.c Fri Apr 19 14:53:15 2013 +0200
@@ -188,7 +188,7 @@
// bounce buffer and the actual transfer buffer.
@@ -416,9 +398,9 @@ diff -ur a/drivers/usb/storage/jumpshot.c b/drivers/usb/storage/jumpshot.c
if (!us->extra) {
US_DEBUGP("jumpshot_transport: Gah! Can't allocate storage for jumpshot info struct!\n");
return USB_STOR_TRANSPORT_ERROR;
-diff -ur a/drivers/usb/storage/karma.c b/drivers/usb/storage/karma.c
---- a/drivers/usb/storage/karma.c 2013-01-11 15:27:53.995584562 +0100
-+++ b/drivers/usb/storage/karma.c 2013-01-11 15:11:06.471571243 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/karma.c
+--- a/drivers/usb/storage/karma.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/karma.c Fri Apr 19 14:53:15 2013 +0200
@@ -182,11 +182,11 @@
static int rio_karma_init(struct us_data *us)
{
@@ -433,9 +415,9 @@ diff -ur a/drivers/usb/storage/karma.c b/drivers/usb/storage/karma.c
if (!data->recv) {
kfree(data);
goto out;
-diff -ur a/drivers/usb/storage/onetouch.c b/drivers/usb/storage/onetouch.c
---- a/drivers/usb/storage/onetouch.c 2013-01-11 15:27:53.995584562 +0100
-+++ b/drivers/usb/storage/onetouch.c 2013-01-11 15:11:06.471571243 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/onetouch.c
+--- a/drivers/usb/storage/onetouch.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/onetouch.c Fri Apr 19 14:53:15 2013 +0200
@@ -163,7 +163,7 @@
usb_kill_urb(onetouch->irq);
break;
@@ -445,9 +427,9 @@ diff -ur a/drivers/usb/storage/onetouch.c b/drivers/usb/storage/onetouch.c
dev_err(&onetouch->irq->dev->dev,
"usb_submit_urb failed\n");
break;
-diff -ur a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
---- a/drivers/usb/storage/realtek_cr.c 2013-01-11 15:27:53.995584562 +0100
-+++ b/drivers/usb/storage/realtek_cr.c 2013-01-11 15:11:06.471571243 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/realtek_cr.c
+--- a/drivers/usb/storage/realtek_cr.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/realtek_cr.c Fri Apr 19 14:53:15 2013 +0200
@@ -367,7 +367,7 @@
u8 cmnd[12] = { 0 };
u8 *buf;
@@ -461,12 +443,12 @@ diff -ur a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
u8 cmnd[12] = { 0 };
u8 *buf;
-- buf = kmalloc(len, GFP_NOIO);
-+ buf = kmalloc(len, GFP_KERNEL);
+- buf = kmemdup(data, len, GFP_NOIO);
++ buf = kmemdup(data, len, GFP_KERNEL);
if (buf == NULL)
return USB_STOR_TRANSPORT_ERROR;
- memcpy(buf, data, len);
-@@ -428,7 +428,7 @@
+
+@@ -427,7 +427,7 @@
u8 cmnd[12] = { 0 };
u8 *buf;
@@ -475,9 +457,18 @@ diff -ur a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
if (buf == NULL)
return USB_STOR_TRANSPORT_ERROR;
-diff -ur a/drivers/usb/storage/sddr09.c b/drivers/usb/storage/sddr09.c
---- a/drivers/usb/storage/sddr09.c 2013-01-11 15:27:53.999584730 +0100
-+++ b/drivers/usb/storage/sddr09.c 2013-01-11 15:11:06.475571244 +0100
+@@ -511,7 +511,7 @@
+
+ US_DEBUGP("%s, addr = 0xfe47, len = %d\n", __FUNCTION__, len);
+
+- buf = kmemdup(data, len, GFP_NOIO);
++ buf = kmemdup(data, len, GFP_KERNEL);
+ if (!buf)
+ return USB_STOR_TRANSPORT_ERROR;
+
+diff -r 7c6a35bba203 drivers/usb/storage/sddr09.c
+--- a/drivers/usb/storage/sddr09.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/sddr09.c Fri Apr 19 14:53:15 2013 +0200
@@ -692,7 +692,7 @@
return result;
}
@@ -543,9 +534,9 @@ diff -ur a/drivers/usb/storage/sddr09.c b/drivers/usb/storage/sddr09.c
if (!us->extra)
return -ENOMEM;
us->extra_destructor = sddr09_card_info_destructor;
-diff -ur a/drivers/usb/storage/sddr55.c b/drivers/usb/storage/sddr55.c
---- a/drivers/usb/storage/sddr55.c 2013-01-11 15:27:53.999584730 +0100
-+++ b/drivers/usb/storage/sddr55.c 2013-01-11 15:11:06.475571244 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/sddr55.c
+--- a/drivers/usb/storage/sddr55.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/sddr55.c Fri Apr 19 14:53:15 2013 +0200
@@ -216,7 +216,7 @@
len = min((unsigned int) sectors, (unsigned int) info->blocksize >>
@@ -593,9 +584,9 @@ diff -ur a/drivers/usb/storage/sddr55.c b/drivers/usb/storage/sddr55.c
if (!us->extra)
return USB_STOR_TRANSPORT_ERROR;
us->extra_destructor = sddr55_card_info_destructor;
-diff -ur a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c
---- a/drivers/usb/storage/shuttle_usbat.c 2013-01-11 15:27:53.999584730 +0100
-+++ b/drivers/usb/storage/shuttle_usbat.c 2013-01-11 15:11:06.475571244 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/shuttle_usbat.c
+--- a/drivers/usb/storage/shuttle_usbat.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/shuttle_usbat.c Fri Apr 19 14:53:15 2013 +0200
@@ -1068,7 +1068,7 @@
if (!us || !info)
return USB_STOR_TRANSPORT_ERROR;
@@ -641,9 +632,9 @@ diff -ur a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usb
if (!us->extra) {
US_DEBUGP("init_usbat: Gah! Can't allocate storage for usbat info struct!\n");
return 1;
-diff -ur a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
---- a/drivers/usb/storage/transport.c 2013-01-11 15:27:53.999584730 +0100
-+++ b/drivers/usb/storage/transport.c 2013-01-11 15:11:06.475571244 +0100
+diff -r 7c6a35bba203 drivers/usb/storage/transport.c
+--- a/drivers/usb/storage/transport.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/transport.c Fri Apr 19 14:53:15 2013 +0200
@@ -151,7 +151,7 @@
us->current_urb->transfer_dma = us->iobuf_dma;
@@ -662,22 +653,10 @@ diff -ur a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
if (result) {
US_DEBUGP("usb_sg_init returned %d\n", result);
return USB_STOR_XFER_ERROR;
-diff -ur a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
---- a/drivers/usb/storage/uas.c 2013-01-11 15:27:53.999584730 +0100
-+++ b/drivers/usb/storage/uas.c 2013-01-11 15:11:06.475571244 +0100
-@@ -142,7 +142,7 @@
- struct scsi_pointer *scp = (void *)cmdinfo;
- struct scsi_cmnd *cmnd = container_of(scp,
- struct scsi_cmnd, SCp);
-- uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_NOIO);
-+ uas_submit_urbs(cmnd, cmnd->device->hostdata, GFP_KERNEL);
- }
- }
-
-diff -ur a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
---- a/drivers/usb/storage/usb.c 2013-01-11 15:27:53.999584730 +0100
-+++ b/drivers/usb/storage/usb.c 2013-01-11 15:11:06.475571244 +0100
-@@ -409,7 +409,7 @@
+diff -r 7c6a35bba203 drivers/usb/storage/usb.c
+--- a/drivers/usb/storage/usb.c Thu Apr 18 14:21:39 2013 +0200
++++ b/drivers/usb/storage/usb.c Fri Apr 19 14:53:15 2013 +0200
+@@ -453,7 +453,7 @@
usb_set_intfdata(intf, us);
/* Allocate the control/setup and DMA-mapped buffers */
diff --git a/dde_linux/run/usb_storage.run b/dde_linux/run/usb_storage.run
index 6e386c4545..7a4eba039e 100644
--- a/dde_linux/run/usb_storage.run
+++ b/dde_linux/run/usb_storage.run
@@ -10,12 +10,15 @@
build {
core init
- drivers/pci
drivers/timer
drivers/usb
test/block
}
+lappend_if [have_spec acpi] build_components drivers/acpi
+lappend_if [have_spec pci] build_components drivers/pci
+lappend_if [have_spec pci] build_components drivers/pci/device_pd
+
create_boot_directory
#
@@ -39,22 +42,40 @@ set config {
-
+ }
+
+append_if [have_spec acpi] config {
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append_if [expr ![have_spec acpi] && [have_spec pci]] config {
+
+
+
+ }
+
+append config {
-
+
-
-
-
-
-
+
@@ -70,6 +91,9 @@ set boot_modules {
core init timer usb_drv pci_drv test-block
}
+lappend_if [have_spec acpi] boot_modules acpi_drv
+lappend_if [have_spec pci] boot_modules pci_drv
+lappend_if [have_spec nova] boot_modules pci_device_pd
build_boot_image $boot_modules
diff --git a/dde_linux/src/lib/usb/arm/platform_arndale/platform.cc b/dde_linux/src/lib/usb/arm/platform_arndale/platform.cc
index 226bddb5f2..f126b62139 100644
--- a/dde_linux/src/lib/usb/arm/platform_arndale/platform.cc
+++ b/dde_linux/src/lib/usb/arm/platform_arndale/platform.cc
@@ -20,7 +20,7 @@
#include
/* Linux */
-#include
+#include
using namespace Genode;
@@ -137,14 +137,14 @@ static void arndale_ehci_init()
extern "C" void module_ehci_hcd_init();
extern "C" int module_usbnet_init();
-extern "C" int module_asix_init();
+extern "C" int module_asix_driver_init();
void platform_hcd_init(Services *services)
{
/* register network */
if (services->nic) {
module_usbnet_init();
- module_asix_init();
+ module_asix_driver_init();
}
/* register EHCI controller */
diff --git a/dde_linux/src/lib/usb/arm/platform_panda/platform.cc b/dde_linux/src/lib/usb/arm/platform_panda/platform.cc
index b881593026..c57fd2ac90 100644
--- a/dde_linux/src/lib/usb/arm/platform_panda/platform.cc
+++ b/dde_linux/src/lib/usb/arm/platform_panda/platform.cc
@@ -54,11 +54,7 @@ static resource _ehci[] =
/**
* Port informations for platform device
*/
-static struct ehci_hcd_omap_platform_data _ehci_data
-{
- { OMAP_EHCI_PORT_MODE_PHY, OMAP_EHCI_PORT_MODE_NONE },
- { 0, 0 }
-};
+static struct ehci_hcd_omap_platform_data _ehci_data;
/**
@@ -366,14 +362,14 @@ static void omap_ehci_init()
extern "C" void module_ehci_hcd_init();
extern "C" int module_usbnet_init();
-extern "C" int module_smsc95xx_init();
+extern "C" int module_smsc95xx_driver_init();
void platform_hcd_init(Services *services)
{
/* register network */
if (services->nic) {
module_usbnet_init();
- module_smsc95xx_init();
+ module_smsc95xx_driver_init();
}
/* register EHCI controller */
@@ -388,6 +384,11 @@ void platform_hcd_init(Services *services)
pdev->id = 0;
pdev->num_resources = 2;
pdev->resource = _ehci;
+
+
+ _ehci_data.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY;
+ _ehci_data.port_mode[1] = OMAP_EHCI_PORT_MODE_NONE;
+ _ehci_data.phy_reset = 0;
pdev->dev.platform_data = &_ehci_data;
/*
diff --git a/dde_linux/src/lib/usb/dummies.c b/dde_linux/src/lib/usb/dummies.c
index 8b69444436..78b8992130 100644
--- a/dde_linux/src/lib/usb/dummies.c
+++ b/dde_linux/src/lib/usb/dummies.c
@@ -152,11 +152,34 @@ void down_write(struct rw_semaphore *sem) { TRACE; }
void up_write(struct rw_semaphore *sem) { TRACE; }
+/*********************
+ ** linux/lockdep.h **
+ *********************/
+
+bool lockdep_is_held(void *l) { TRACE; return 1; }
+
+
+/********************
+ ** linux/random.h **
+ ********************/
+
+void add_device_randomness(const void *buf, unsigned int size) { TRACE; }
+
+
/*******************
** linux/ktime.h **
*******************/
-ktime_t ktime_add_ns(const ktime_t kt, u64 nsec) { TRACE; ktime_t ret = { 0 }; return ret; }
+#define KTIME_RET ({TRACE; ktime_t t = { 0 }; return t;})
+
+ktime_t ktime_add(const ktime_t lhs, const ktime_t rhs) { KTIME_RET; }
+ktime_t ktime_add_ns(const ktime_t kt, u64 nsec) { KTIME_RET; }
+ktime_t ktime_get(void) { KTIME_RET; }
+ktime_t ktime_get_monotonic_offset(void) { KTIME_RET; }
+ktime_t ktime_set(const long secs, const unsigned long nsecs) { KTIME_RET; }
+ktime_t ktime_sub(const ktime_t lhs, const ktime_t rhs) { KTIME_RET; }
+
+struct timeval ktime_to_timeval(const ktime_t kt) { TRACE; struct timeval ret; return ret; }
s64 ktime_us_delta(const ktime_t later, const ktime_t earlier) { TRACE; return 0; };
@@ -174,6 +197,10 @@ unsigned long round_jiffies(unsigned long j) { TRACE; return 1; }
*********************/
ktime_t ktime_get_real(void) { TRACE; ktime_t ret; return ret; }
+int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
+ unsigned long delta_ns, const enum hrtimer_mode mode) { TRACE; return 0; }
+void hrtimer_init(struct hrtimer *timer, clockid_t clock_id, enum hrtimer_mode mode) { TRACE; }
+int hrtimer_cancel(struct hrtimer *timer) { TRACE; return 0; }
/*******************
@@ -189,6 +216,8 @@ void mdelay(unsigned long msecs) { TRACE; }
bool cancel_work_sync(struct work_struct *work) { TRACE; return 0; }
int cancel_delayed_work_sync(struct delayed_work *work) { TRACE; return 0; }
+
+bool flush_work(struct work_struct *work) { TRACE; return 0; }
bool flush_work_sync(struct work_struct *work) { TRACE; return 0; }
@@ -294,6 +323,9 @@ void pm_runtime_put_noidle(struct device *dev) { TRACE; }
void pm_runtime_use_autosuspend(struct device *dev) { TRACE; }
int pm_runtime_put_sync_autosuspend(struct device *dev) { TRACE; return 0; }
void pm_runtime_no_callbacks(struct device *dev) { TRACE; }
+void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) { TRACE; }
+int pm_runtime_get_sync(struct device *dev) { TRACE; return 0; }
+int pm_runtime_put_sync(struct device *dev) { TRACE; return 0; }
/***********************
@@ -369,6 +401,12 @@ int class_register(struct class *cls) { TRACE; return 0; }
void class_unregister(struct class *cls) { TRACE; }
void class_destroy(struct class *cls) { TRACE; }
+void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp) { TRACE; return 0; }
+void devres_add(struct device *dev, void *res) { TRACE; }
+int devres_destroy(struct device *dev, dr_release_t release,
+ dr_match_t match, void *match_data) { TRACE; return 0; }
+void devres_free(void *res) { TRACE; }
+
/*****************************
** linux/platform_device.h **
@@ -768,6 +806,7 @@ int scsi_add_host_with_dma(struct Scsi_Host *shost, struct device *dev,
void scsi_remove_host(struct Scsi_Host *shost) { TRACE; }
void scsi_host_put(struct Scsi_Host *shost) { TRACE; }
struct scsi_device *scsi_get_host_dev(struct Scsi_Host *shost) { TRACE; return 0; }
+int scsi_is_host_device(const struct device *dev) { TRACE; return 0; }
/********************************
@@ -788,6 +827,12 @@ int omap_usbhs_enable(struct device *dev) { TRACE; return 0; }
void omap_usbhs_disable(struct device *dev) { TRACE; }
+/*****************
+ ** linux/net.h **
+ *****************/
+
+int net_ratelimit(void) { TRACE; return 0; }
+
/********************
** linux/skbuff.h **
********************/
@@ -812,6 +857,8 @@ bool skb_defer_rx_timestamp(struct sk_buff *skb) { TRACE; return 0; }
__u32 ethtool_cmd_speed(const struct ethtool_cmd *ep) { TRACE; return 0; }
u32 ethtool_op_get_link(struct net_device *dev) { TRACE; return 0; }
+int ethtool_op_get_ts_info(struct net_device *dev, struct ethtool_ts_info *eti) {
+ TRACE; return 0; }
/***********************
@@ -824,6 +871,7 @@ void netif_start_queue(struct net_device *dev) { TRACE; }
void netif_device_detach(struct net_device *dev) { TRACE; }
void netif_stop_queue(struct net_device *dev) { TRACE; }
void netif_wake_queue(struct net_device *dev) { TRACE; }
+void netif_tx_wake_all_queues(struct net_device *dev) { TRACE; }
void netif_device_attach(struct net_device *dev) { TRACE; }
void unregister_netdev(struct net_device *dev) { TRACE; }
void free_netdev(struct net_device *dev) { TRACE; }
@@ -887,3 +935,105 @@ struct clk *clk_get(struct device *dev, const char *id)
int clk_enable(struct clk *clk) { TRACE; return 0; }
void clk_disable(struct clk *clk) { TRACE; }
void clk_put(struct clk *clk) { TRACE; }
+
+struct clk *devm_clk_get(struct device *dev, const char *id) { TRACE; return 0; }
+int clk_prepare_enable(struct clk *clk) { TRACE; return 0; }
+void clk_disable_unprepare(struct clk *clk) { TRACE; }
+
+
+/********************
+ ** linux/bitmap.h **
+ ********************/
+
+int bitmap_subset(const unsigned long *src1,
+ const unsigned long *src2, int nbits) { TRACE; return 1; }
+
+
+/*****************
+ ** linux/idr.h **
+ *****************/
+
+int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end,
+ gfp_t gfp_mask) { TRACE; return 0; }
+void ida_simple_remove(struct ida *ida, unsigned int id) { TRACE; }
+
+
+/****************************
+ ** drivers/usb/core/usb.h **
+ ****************************/
+
+#include
+#include
+
+const struct attribute_group *usb_interface_groups[1];
+const struct attribute_group *usb_device_groups[1];
+struct usb_driver usbfs_driver;
+
+DEFINE_MUTEX(usbfs_mutex);
+
+void usb_create_sysfs_intf_files(struct usb_interface *intf) { TRACE; }
+void usb_remove_sysfs_intf_files(struct usb_interface *intf) { TRACE; }
+
+int usb_create_sysfs_dev_files(struct usb_device *dev) { TRACE; return 0; }
+void usb_remove_sysfs_dev_files(struct usb_device *dev) { TRACE; }
+
+int usb_devio_init(void) { TRACE; return 0; }
+void usb_devio_cleanup(void) { TRACE; }
+
+
+/*******************
+ ** linux/crc16.h **
+ *******************/
+
+u16 crc16(u16 crc, const u8 *buffer, size_t len) { TRACE; return 0; }
+
+
+/*******************
+ ** linux/birev.h **
+ *******************/
+
+u16 bitrev16(u16 in) { TRACE; return 0; }
+
+
+/******************
+ ** linux/gpio.h **
+ ******************/
+
+bool gpio_is_valid(int number) { TRACE; return false; }
+void gpio_set_value_cansleep(unsigned gpio, int value) { TRACE; }
+int gpio_request_one(unsigned gpio, unsigned long flags, const char *label) { TRACE; return 0; }
+
+
+/*********************
+ ** linux/of_gpio.h **
+ *********************/
+
+ int of_get_named_gpio(struct device_node *np,
+ const char *propname, int index) { TRACE; return 0; }
+
+
+/******************
+ ** linux/phy.h **
+ ******************/
+
+struct mii_bus *mdiobus_alloc(void) { TRACE; return 0; }
+int mdiobus_register(struct mii_bus *bus) { TRACE; return 0; }
+void mdiobus_unregister(struct mii_bus *bus) { TRACE; }
+void mdiobus_free(struct mii_bus *bus) { TRACE; }
+
+int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd) { TRACE; return 0; }
+void phy_print_status(struct phy_device *phydev) { TRACE; }
+int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd) { TRACE; return 0; }
+int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd) { TRACE; return 0; }
+int phy_start_aneg(struct phy_device *phydev) { TRACE; return 0; }
+void phy_start(struct phy_device *phydev) { TRACE; }
+void phy_stop(struct phy_device *phydev) { TRACE; }
+int genphy_resume(struct phy_device *phydev) { TRACE; return 0; }
+
+struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
+ void (*handler)(struct net_device *), u32 flags,
+ phy_interface_t interface) { TRACE; return 0; }
+void phy_disconnect(struct phy_device *phydev) { TRACE; }
+
+
+
diff --git a/dde_linux/src/lib/usb/include/arm/platform/lx_emul.h b/dde_linux/src/lib/usb/include/arm/platform/lx_emul.h
index f3d17c63c0..5136b78819 100644
--- a/dde_linux/src/lib/usb/include/arm/platform/lx_emul.h
+++ b/dde_linux/src/lib/usb/include/arm/platform/lx_emul.h
@@ -60,14 +60,17 @@ enum usbhs_omap_port_mode
OMAP_EHCI_PORT_MODE_PHY,
};
+struct regulator { };
struct ehci_hcd_omap_platform_data
{
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
+ int reset_gpio_port[OMAP3_HS_USB_PORTS];
struct regulator *regulator[OMAP3_HS_USB_PORTS];
+ unsigned phy_reset;
+
};
-struct regulator;
/*****************************
@@ -156,5 +159,81 @@ struct clk *clk_get(struct device *, const char *);
int clk_enable(struct clk *);
void clk_disable(struct clk *);
void clk_put(struct clk *);
+struct clk *devm_clk_get(struct device *dev, const char *id);
+int clk_prepare_enable(struct clk *);
+void clk_disable_unprepare(struct clk *);
+
+
+/******************
+ ** linux/gpio.h **
+ ******************/
+
+enum { GPIOF_OUT_INIT_HIGH = 0x2 };
+
+bool gpio_is_valid(int);
+void gpio_set_value_cansleep(unsigned, int);
+int gpio_request_one(unsigned, unsigned long, const char *);
+
+/****************
+ ** linux/of.h **
+ ****************/
+
+#define of_match_ptr(ptr) NULL
+
+
+/*********************
+ ** linux/of_gpio.h **
+ *********************/
+
+int of_get_named_gpio(struct device_node *, const char *, int);
+
+
+/******************
+ ** linux/phy.h **
+ ******************/
+
+enum {
+ MII_BUS_ID_SIZE = 17,
+ PHY_MAX_ADDR = 32,
+ PHY_POLL = -1,
+};
+
+
+#define PHY_ID_FMT "%s:%02x"
+
+struct mii_bus
+{
+ const char *name;
+ char id[MII_BUS_ID_SIZE];
+ int (*read)(struct mii_bus *bus, int phy_id, int regnum);
+ int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val);
+ void *priv;
+ int *irq;
+};
+
+struct phy_device
+{
+ int speed;
+ int duplex;
+ int link;
+};
+
+struct mii_bus *mdiobus_alloc(void);
+int mdiobus_register(struct mii_bus *bus);
+void mdiobus_unregister(struct mii_bus *bus);
+void mdiobus_free(struct mii_bus *bus);
+
+int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
+void phy_print_status(struct phy_device *phydev);
+int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
+int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
+int phy_start_aneg(struct phy_device *phydev);
+void phy_stop(struct phy_device *phydev);
+int genphy_resume(struct phy_device *phydev);
+
+struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
+ void (*handler)(struct net_device *), u32 flags,
+ phy_interface_t interface);
+void phy_disconnect(struct phy_device *phydev);
#endif /* _ARM__PLATFORM__LX_EMUL_H_ */
diff --git a/dde_linux/src/lib/usb/include/lx_emul.h b/dde_linux/src/lib/usb/include/lx_emul.h
index 60b51d4ae1..d7a44620b4 100644
--- a/dde_linux/src/lib/usb/include/lx_emul.h
+++ b/dde_linux/src/lib/usb/include/lx_emul.h
@@ -31,7 +31,6 @@ extern "C" {
#include
#include
-#include
#define VERBOSE_LX_EMUL 0
@@ -61,10 +60,17 @@ extern "C" {
#endif
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
-#define LINUX_VERSION_CODE KERNEL_VERSION(3,2,2)
+#define LINUX_VERSION_CODE KERNEL_VERSION(3,8,6)
#define KBUILD_MODNAME "mod-noname"
+
+/*****************
+ ** linux/bcd.h **
+ *****************/
+
+#define bin2bcd(x) ((((x) / 10) << 4) + (x) % 10)
+
/***************
** asm/bug.h **
***************/
@@ -89,6 +95,11 @@ extern "C" {
#define BUG_ON(condition) do { if (condition) BUG(); } while(0)
+/*********************
+ ** linux/kconfig.h **
+ *********************/
+
+#define IS_ENABLED(x) x
/*****************
** asm/param.h **
@@ -169,6 +180,7 @@ typedef __u16 __sum16;
typedef __u32 __wsum;
typedef u64 sector_t;
+typedef int clockid_t;
struct list_head {
struct list_head *next, *prev;
@@ -227,6 +239,8 @@ typedef unsigned long dma_addr_t;
typedef unsigned short mode_t;
+#include
+
/******************
** asm/system.h **
******************/
@@ -280,12 +294,20 @@ enum irqreturn {
typedef enum irqreturn irqreturn_t;
+/******************
+ ** linux/swab.h **
+ ******************/
+
+__u16 __swab16p(const __u16 *);
+__u32 __swab32p(const __u32 *);
+__u64 __swab64p(const __u64 *);
+
/*************************************
** linux/byteorder/little_endian.h **
*************************************/
-#include
+#include
/*******************************
@@ -303,9 +325,11 @@ typedef enum irqreturn irqreturn_t;
#define cpu_to_be16 __cpu_to_be16
#define cpu_to_le32 __cpu_to_le32
#define cpu_to_be32 __cpu_to_be32
+#define cpu_to_le32s __cpu_to_le32s
#define le16_to_cpup __le16_to_cpup
#define be16_to_cpup __be16_to_cpup
#define le32_to_cpup __le32_to_cpup
+#define le32_to_cpus __le32_to_cpus
#define be32_to_cpup __be32_to_cpup
@@ -322,7 +346,11 @@ void put_unaligned_le64(u64 val, void *p);
u64 get_unaligned_le64(const void *p);
#define put_unaligned put_unaligned_le32
+#ifdef __LP64__
+#define get_unaligned get_unaligned_le64
+#else
#define get_unaligned get_unaligned_le32
+#endif
/****************
@@ -520,7 +548,8 @@ static inline size_t min(size_t a, size_t b) {
void might_sleep();
-#define INT_MAX ((int)(~0U>>1))
+#define INT_MAX ((int)(~0U>>1))
+#define UINT_MAX (~0U)
char *kasprintf(gfp_t gfp, const char *fmt, ...);
int kstrtouint(const char *s, unsigned int base, unsigned int *res);
@@ -534,6 +563,16 @@ int kstrtouint(const char *s, unsigned int base, unsigned int *res);
__val = __val < __min ? __min: __val; \
__val > __max ? __max: __val; })
+#define DIV_ROUND_CLOSEST(x, divisor)( \
+{ \
+ typeof(x) __x = x; \
+ typeof(divisor) __d = divisor; \
+ (((typeof(x))-1) > 0 || \
+ ((typeof(divisor))-1) > 0 || (__x) > 0) ? \
+ (((__x) + ((__d) / 2)) / (__d)) : \
+ (((__x) - ((__d) / 2)) / (__d)); \
+})
+
int strict_strtoul(const char *s, unsigned int base, unsigned long *res);
long simple_strtoul(const char *cp, char **endp, unsigned int base);
@@ -563,6 +602,7 @@ int roundup_pow_of_two(u32 n);
#define MINORBITS 20
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
+#define MINOR(dev) ((dev) & 0xff)
/********************
@@ -625,6 +665,8 @@ long find_next_zero_bit_le(const void *addr,
int ffs(int x);
int fls(int x);
+#define for_each_set_bit(bit, addr, size) for ((bit) = 0; !bit; bit++, dev_err(0, "for_each_set_bit should not be called\n"))
+
/********************
** linux/string.h **
@@ -710,6 +752,20 @@ struct module;
#define module_init(fn) void MOD_CONCAT(fn, MOD_SUFFIX)(void) { fn(); }
#define module_exit(exit_fn) void MOD_CONCAT(exit_fn, MOD_SUFFIX)(void) { exit_fn(); }
+#define module_driver(__driver, __register, __unregister, ...) \
+ static int __init __driver##_init(void) \
+ { \
+ return __register(&(__driver) , ##__VA_ARGS__); \
+ } \
+ module_init(__driver##_init); \
+ static void __exit __driver##_exit(void) \
+ { \
+ __unregister(&(__driver) , ##__VA_ARGS__); \
+ } \
+ module_exit(__driver##_exit);
+
+
+
static inline void module_put(struct module *module) { }
static inline void __module_get(struct module *module) { }
@@ -751,6 +807,11 @@ struct kmem_cache *kmem_cache_create(const char *, size_t, size_t,
*/
void kmem_cache_destroy(struct kmem_cache *);
+/**
+ * Alloc from cache
+ */
+void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
+
/**
* Allocate and zero slab
*/
@@ -840,9 +901,16 @@ static inline ktime_t ktime_add_us(const ktime_t kt, const u64 usec)
{
return ktime_add_ns(kt, usec * 1000);
}
-
s64 ktime_us_delta(const ktime_t later, const ktime_t earlier);
+struct timeval ktime_to_timeval(const ktime_t);
+
+ktime_t ktime_get_real(void);
+ktime_t ktime_get(void);
+ktime_t ktime_sub(const ktime_t, const ktime_t);
+ktime_t ktime_get_monotonic_offset(void);
+ktime_t ktime_add(const ktime_t, const ktime_t);
+ktime_t ktime_set(const long, const unsigned long);
/*******************
** linux/timer.h **
@@ -868,8 +936,19 @@ unsigned long round_jiffies(unsigned long j);
** linux/hrtimer.h **
*********************/
-ktime_t ktime_get_real(void);
+enum hrtimer_mode { HRTIMER_MODE_ABS = 0 };
+enum hrtimer_restart { HRTIMER_NORESTART = 0 };
+struct hrtimer
+{
+ enum hrtimer_restart (*function)(struct hrtimer *);
+};
+
+int hrtimer_start_range_ns(struct hrtimer *, ktime_t,
+ unsigned long, const enum hrtimer_mode);
+
+void hrtimer_init(struct hrtimer *, clockid_t, enum hrtimer_mode);
+int hrtimer_cancel(struct hrtimer *);
/*******************
** linux/delay.h **
@@ -901,6 +980,8 @@ bool cancel_work_sync(struct work_struct *work);
int cancel_delayed_work_sync(struct delayed_work *work);
int schedule_delayed_work(struct delayed_work *work, unsigned long delay);
int schedule_work(struct work_struct *work);
+
+bool flush_work(struct work_struct *work);
bool flush_work_sync(struct work_struct *work);
@@ -926,6 +1007,13 @@ bool flush_work_sync(struct work_struct *work);
} while (0)
+/* dummy for queue_delayed_work call in storage/usb.c */
+#define system_freezable_wq 0
+struct workqueue_struct { };
+
+bool queue_delayed_work(struct workqueue_struct *,
+ struct delayed_work *, unsigned long);
+
/******************
** linux/wait.h **
******************/
@@ -1020,6 +1108,15 @@ void do_gettimeofday(struct timeval *tv);
#define CURRENT_TIME (current_kernel_time())
+
+enum {
+ CLOCK_REALTIME = 0,
+ CLOCK_MONOTONIC = 1,
+ NSEC_PER_USEC = 1000L,
+ NSEC_PER_MSEC = 1000000L,
+};
+
+
/*******************
** linux/sched.h **
*******************/
@@ -1163,7 +1260,7 @@ int kref_put(struct kref *kref, void (*release) (struct kref *kref));
** linux/kobject.h **
*********************/
-struct kobject { int dummy; };
+struct kobject { struct kobject *parent; };
struct kobj_uevent_env
{
char buf[32];
@@ -1206,6 +1303,11 @@ struct bin_attribute {
.store = _store, \
}
+#define __ATTR_NULL { .attr = { .name = NULL } }
+#define __ATTR_RO(name) __ATTR_NULL
+
+static const char* modalias = "";
+
int sysfs_create_group(struct kobject *kobj,
const struct attribute_group *grp);
void sysfs_remove_group(struct kobject *kobj,
@@ -1238,6 +1340,9 @@ void pm_runtime_put_noidle(struct device *dev);
void pm_runtime_use_autosuspend(struct device *dev);
int pm_runtime_put_sync_autosuspend(struct device *dev);
void pm_runtime_no_callbacks(struct device *dev);
+void pm_runtime_set_autosuspend_delay(struct device *dev, int delay);
+int pm_runtime_get_sync(struct device *dev);
+int pm_runtime_put_sync(struct device *dev);
/***********************
@@ -1284,6 +1389,7 @@ struct device_driver;
struct bus_type {
const char *name;
+ struct device_attribute *dev_attrs;
int (*match)(struct device *dev, struct device_driver *drv);
int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
int (*probe)(struct device *dev);
@@ -1295,6 +1401,7 @@ struct device_driver {
struct bus_type *bus;
struct module *owner;
const char *mod_name;
+ const struct of_device_id *of_match_table;
int (*probe) (struct device *dev);
int (*remove) (struct device *dev);
@@ -1334,6 +1441,7 @@ struct device {
struct bus_type *bus;
struct class *class;
void *driver_data;
+ struct device_node *of_node;
};
struct device_attribute {
@@ -1430,6 +1538,17 @@ int class_register(struct class *cls);
void class_unregister(struct class *cls);
void class_destroy(struct class *cls);
+typedef void (*dr_release_t)(struct device *dev, void *res);
+typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
+
+void *devres_alloc(dr_release_t release, size_t size, gfp_t gfp);
+void devres_add(struct device *dev, void *res);
+int devres_destroy(struct device *dev, dr_release_t release,
+ dr_match_t match, void *match_data);
+void devres_free(void *res);
+
+void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);
+
#ifdef __cplusplus
#undef class
#endif
@@ -1471,9 +1590,7 @@ void dma_free_coherent(struct device *, size_t, void *, dma_addr_t);
** linux/dma-mapping.h **
*************************/
-static inline u64 DMA_BIT_MASK(unsigned n) {
- return (n == 64) ? ~0ULL : (1ULL << n) - 1; }
-
+#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
/*********************
** linux/uaccess.h **
@@ -1522,6 +1639,8 @@ static inline const char * dmi_get_system_info(int field) { return NULL; }
** linux/dcache.h **
********************/
+#define __read_mostly
+
enum dentry_d_lock_class
{
DENTRY_D_LOCK_NESTED
@@ -1640,8 +1759,11 @@ struct inode {
const struct inode_operations *i_op;
struct super_block *i_sb;
unsigned int i_flags;
- void *i_private;
loff_t i_size;
+ union {
+ struct cdev *i_cdev;
+ };
+ void *i_private;
};
struct seq_file;
@@ -1829,6 +1951,8 @@ void kunmap(struct page *page);
void *ioremap(resource_size_t offset, unsigned long size);
void iounmap(volatile void *addr);
+void *devm_ioremap(struct device *dev, resource_size_t offset,
+ unsigned long size);
/**
* Map I/O memory write combined
@@ -1915,7 +2039,7 @@ void synchronize_irq(unsigned int irq);
*****************/
#include
-#include
+#include
/*
* Definitions normally found in pci_regs.h
@@ -1923,7 +2047,7 @@ void synchronize_irq(unsigned int irq);
//enum { PCI_BASE_ADDRESS_MEM_MASK = ~0x0fUL };
//enum { PCI_CAP_ID_AGP = 0x02 };
extern struct bus_type pci_bus_type;
-enum { PCI_ANY_ID = ~0 };
+enum { PCI_ANY_ID = ~0U };
enum { DEVICE_COUNT_RESOURCE = 6 };
//enum { PCIBIOS_MIN_MEM = 0UL };
@@ -1938,6 +2062,10 @@ enum { DEVICE_COUNT_RESOURCE = 6 };
.vendor = (vend), .device = (dev), \
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
+#define PCI_VDEVICE(vendor, device) \
+ PCI_VENDOR_ID_##vendor, (device), \
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0
+
typedef enum { PCI_D0 = 0 } pci_power_t;
/*
@@ -1967,10 +2095,30 @@ struct pci_dev {
pci_power_t current_state;
};
+struct pci_fixup {
+ u16 vendor; /* You can use PCI_ANY_ID here of course */
+ u16 device; /* You can use PCI_ANY_ID here of course */
+ u32 class; /* You can use PCI_ANY_ID here too */
+ unsigned int class_shift; /* should be 0, 8, 16 */
+ void (*hook)(struct pci_dev *dev);
+};
#ifdef __cplusplus
#undef class
#endif /* __cplusplus */
+
+/* quirks */
+#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, class, \
+ class_shift, hook) \
+ static const struct pci_fixup __pci_fixup_##name __used \
+ __attribute__((__section__(#section), aligned((sizeof(void *))))) \
+ = { vendor, device, class, class_shift, hook };
+
+#define DECLARE_PCI_FIXUP_CLASS_FINAL(vendor, device, class, \
+ class_shift, hook) \
+ DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
+ vendor##device##hook, vendor, device, class, class_shift, hook)
+
enum {
PCI_ROM_RESOURCE = 6
};
@@ -2166,7 +2314,7 @@ void security_task_getsecid(struct task_struct *p, u32 *secid);
*************************/
/*
- * Needed by usb/core/devio.h, used to calculate ioctl opcodes
+ * Needed by drivers/input/evdev.c, used to calculate ioctl opcodes
*/
#include
@@ -2175,7 +2323,7 @@ void security_task_getsecid(struct task_struct *p, u32 *secid);
** linux/cdev.h **
******************/
-struct cdev { int dummy; };
+struct cdev { struct kobject kobj; };
void cdev_init(struct cdev *, const struct file_operations *);
int cdev_add(struct cdev *, dev_t, unsigned);
void cdev_del(struct cdev *);
@@ -2314,7 +2462,7 @@ struct hid_device;
static inline int hidraw_init(void) { return 0; }
static inline void hidraw_exit(void) { }
-static inline void hidraw_report_event(struct hid_device *hid, u8 *data, int len) { }
+static inline int hidraw_report_event(struct hid_device *hid, u8 *data, int len) { return 0; }
static inline int hidraw_connect(struct hid_device *hid) { return -1; }
static inline void hidraw_disconnect(struct hid_device *hid) { }
@@ -2330,6 +2478,8 @@ static inline void synchronize_rcu(void) { }
#define rcu_dereference(p) p
#define rcu_assign_pointer(p,v) p = v
+#define rcu_dereference_protected(p, c) p
+
/*********************
** linux/rculist.h **
@@ -2349,13 +2499,20 @@ static inline void list_del_rcu(struct list_head *entry) {
list_del(entry); }
+/*********************
+ ** linux/lockdep.h **
+ *********************/
+
+bool lockdep_is_held(void *);
+
+
/********************
** linux/random.h **
********************/
static inline void add_input_randomness(unsigned int type, unsigned int code,
unsigned int value) { }
-
+void add_device_randomness(const void *, unsigned int);
/*********************
** linux/vmalloc.h **
@@ -2532,6 +2689,8 @@ unsigned scsi_bufflen(struct scsi_cmnd *cmd);
void scsi_set_resid(struct scsi_cmnd *cmd, int resid);
int scsi_get_resid(struct scsi_cmnd *cmd);
+struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd);
+struct scsi_target *scsi_target(struct scsi_device *sdev);
/************************
@@ -2544,7 +2703,9 @@ struct scsi_target
struct device dev;
unsigned int channel;
unsigned int id;
- unsigned int pdt_1f_for_no_lun; /* PDT = 0x1f */
+ unsigned int pdt_1f_for_no_lun:1; /* PDT = 0x1f */
+ unsigned int no_report_luns:1; /* Don't use
+ * REPORT LUNS for scanning. */
unsigned int target_blocked;
char scsi_level;
};
@@ -2583,8 +2744,11 @@ struct scsi_device
unsigned ordered_tags:1; /* ordered queue tag messages are enabled */
unsigned use_10_for_rw:1; /* first try 10-byte read / write */
unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */
+ unsigned no_report_opcodes:1; /* no REPORT SUPPORTED OPERATION CODES */
+ unsigned no_write_same:1; /* no WRITE SAME command */
unsigned skip_ms_page_8:1; /* do not use MODE SENSE page 0x08 */
unsigned skip_ms_page_3f:1; /* do not use MODE SENSE page 0x3f */
+ unsigned skip_vpd_pages:1; /* do not read VPD pages */
unsigned use_192_bytes_for_3f:1; /* ask for 192 bytes from page 0x3f */
unsigned allow_restart:1; /* issue START_UNIT in error handler */
unsigned fix_capacity:1; /* READ_CAPACITY is too high by 1 */
@@ -2594,6 +2758,8 @@ struct scsi_device
unsigned last_sector_bug:1; /* do not use multisector accesses on
SD_LAST_BUGGY_SECTORS */
unsigned no_read_disc_info:1; /* avoid READ_DISC_INFO cmds */
+ unsigned try_rc_10_first:1; /* Try READ_CAPACACITY_10 first */
+ unsigned wce_default_on:1; /* Cache is ON by default */
unsigned int device_blocked; /* device returned QUEUE_FULL. */
@@ -2623,11 +2789,24 @@ struct scsi_driver
** Networking support **
************************/
+/*********************
+ ** linux/if_vlan.h **
+ *********************/
+
+enum { VLAN_HLEN = 4 };
+
+/*****************
+ ** linux/net.h **
+ *****************/
+
+int net_ratelimit(void);
/********************
** linux/skbuff.h **
********************/
+struct net_device;
+
enum {
NET_IP_ALIGN = 2,
CHECKSUM_COMPLETE = 2,
@@ -2687,6 +2866,10 @@ struct sk_buff_head
spinlock_t lock;
};
+#define skb_queue_walk(queue, skb) \
+ for (skb = (queue)->next; \
+ skb != (struct sk_buff *)(queue); \
+ skb = skb->next)
#define skb_queue_walk_safe(queue, skb, tmp) \
for (skb = (queue)->next, tmp = skb->next; \
@@ -2708,6 +2891,18 @@ int skb_tailroom(const struct sk_buff *);
void skb_set_tail_pointer(struct sk_buff *, const int);
struct sk_buff *skb_clone(struct sk_buff *, gfp_t);
void skb_reserve(struct sk_buff *, int);
+int skb_header_cloned(const struct sk_buff *);
+
+
+struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, unsigned int length);
+
+static inline
+struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev,
+ unsigned int length, gfp_t gfp)
+{
+ return netdev_alloc_skb_ip_align(dev, length);
+}
+
static inline int skb_cloned(const struct sk_buff *skb) {
return skb->cloned; }
@@ -2731,13 +2926,14 @@ void dev_kfree_skb(struct sk_buff *);
void dev_kfree_skb_any(struct sk_buff *);
-/****************
- ** linux/if.h **
- ****************/
+/*********************
+ ** linux/uapi/if.h **
+ *********************/
enum {
- IFF_PROMISC = 0x100, /* receive all packets */
- IFF_ALLMULTI = 0x200, /* receive all multicast packets */
+ IFF_NOARP = 0x80, /* no APR protocol */
+ IFF_PROMISC = 0x100, /* receive all packets */
+ IFF_ALLMULTI = 0x200, /* receive all multicast packets */
IFF_MULTICAST = 0x1000, /* supports multicast */
IFNAMSIZ = 16,
};
@@ -2763,13 +2959,18 @@ enum {
*********************/
enum {
+ DUPLEX_HALF = 0x0,
DUPLEX_FULL = 0x1,
ETHTOOL_GSET = 0x1,
ETHTOOL_FWVERS_LEN = 32,
ETHTOOL_BUSINFO_LEN = 32,
- WAKE_PHY = 0x1,
- WAKE_MAGIC = 0x20,
+ WAKE_PHY = 0,
+ WAKE_UCAST = (1 << 1),
+ WAKE_MCAST = (1 << 2),
+ WAKE_BCAST = (1 << 3),
+ WAKE_ARP = (1 << 4),
+ WAKE_MAGIC = (1 << 5),
SPEED_100 = 100,
SPEED_1000 = 1000,
@@ -2782,6 +2983,11 @@ struct ethtool_cmd
u8 duplex;
};
+struct ethtool_regs
+{
+ u32 version;
+};
+
struct ethtool_eeprom
{
u32 magic;
@@ -2805,14 +3011,16 @@ struct ethtool_wolinfo {
};
struct ethhdr { };
+struct ethtool_ts_info;
-struct net_device;
struct ethtool_ops
{
int (*get_settings)(struct net_device *, struct ethtool_cmd *);
int (*set_settings)(struct net_device *, struct ethtool_cmd *);
void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
+ int (*get_regs_len)(struct net_device *);
+ void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
int (*nway_reset)(struct net_device *);
u32 (*get_link)(struct net_device *);
int (*get_eeprom_len)(struct net_device *);
@@ -2822,16 +3030,21 @@ struct ethtool_ops
void (*set_msglevel)(struct net_device *, u32);
void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
+ int (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);
+
};
-__u32 ethtool_cmd_speed(const struct ethtool_cmd *ep);
+__u32 ethtool_cmd_speed(const struct ethtool_cmd *);
u32 ethtool_op_get_link(struct net_device *);
+int ethtool_op_get_ts_info(struct net_device *, struct ethtool_ts_info *);
/***********************
** linux/netdevice.h **
***********************/
+#include
+
#define netif_err(priv, type, dev, fmt, args...) dde_kit_printf("netif_err: " fmt, ## args);
#define netif_info(priv, type, dev, fmt, args...) dde_kit_printf("netif_info: " fmt, ## args);
@@ -2857,10 +3070,6 @@ typedef enum netdev_tx netdev_tx_t;
enum {
MAX_ADDR_LEN = 32,
-
- NETIF_F_HW_CSUM = 8,
- NETIF_F_RXCSUM = (1 << 29),
-
NET_RX_SUCCESS = 0,
NETIF_MSG_DRV = 0x1,
@@ -2879,7 +3088,7 @@ struct net_device_ops
int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
void (*ndo_tx_timeout) (struct net_device *dev);
int (*ndo_change_mtu)(struct net_device *dev, int new_mtu);
- int (*ndo_set_features)(struct net_device *dev, u32 features);
+ int (*ndo_set_features)(struct net_device *dev, netdev_features_t features);
};
struct net_device_stats
@@ -2914,12 +3123,16 @@ struct net_device
unsigned int flags;
unsigned short hard_header_len; /* hardware hdr length */
unsigned int mtu;
+ unsigned short needed_headroom;
+ unsigned short needed_tailroom;
unsigned char *dev_addr;
unsigned char _dev_addr[ETH_ALEN];
unsigned long trans_start; /* Time (in jiffies) of last Tx */
int watchdog_timeo; /* used by dev_watchdog() */
struct device dev;
void *priv;
+
+ struct phy_device *phydev;
};
@@ -2952,8 +3165,8 @@ u32 netif_msg_init(int, int);
static inline void *netdev_priv(const struct net_device *dev) { return dev->priv; }
-int netif_running(const struct net_device *);
-int netif_device_present(struct net_device *);
+int netif_running(const struct net_device *);
+int netif_device_present(struct net_device *);
void netif_device_detach(struct net_device *);
void netif_start_queue(struct net_device *);
void netif_stop_queue(struct net_device *);
@@ -2961,7 +3174,8 @@ void netif_wake_queue(struct net_device *);
void netif_device_attach(struct net_device *);
void unregister_netdev(struct net_device *);
void free_netdev(struct net_device *);
-int netif_rx(struct sk_buff *);
+int netif_rx(struct sk_buff *);
+void netif_tx_wake_all_queues(struct net_device *);
void netif_carrier_off(struct net_device *);
int netdev_mc_empty(struct net_device *);
@@ -2976,14 +3190,17 @@ enum {
FLOW_CTRL_RX = 0x2,
MII_BMCR = 0x0,
- MII_PHYSID1 = 0x2,
+ MII_BMSR = 0x1,
+ MII_PHYSID1 = 0x2,
MII_PHYSID2 = 0x3,
MII_ADVERTISE = 0x4,
MII_LPA = 0x5,
- MII_CTRL1000 = 0x9,
+ MII_CTRL1000 = 0x9,
- BMCR_RESET = 0x8000, /* reset to default state */
- BMCR_ANENABLE = 0x1000, /* enable auto negotiation */
+ BMCR_RESET = 0x8000, /* reset to default state */
+ BMCR_ANENABLE = 0x1000, /* enable auto negotiation */
+
+ BMSR_LSTATUS = 0x4,
ADVERTISE_PAUSE_CAP = 0x0400, /* try for pause */
ADVERTISE_CSMA = 0x0001, /* only selector supported */
@@ -3038,6 +3255,7 @@ struct tasklet_struct
static inline void tasklet_schedule(struct tasklet_struct *t) { t->func(t->data); }
void tasklet_kill(struct tasklet_struct *);
+
/*************************
** linux/etherdevice.h **
*************************/
@@ -3051,6 +3269,10 @@ void random_ether_addr(u8 *addr);
struct net_device *alloc_etherdev(int);
+void eth_hw_addr_random(struct net_device *dev);
+void eth_random_addr(u8 *addr);
+
+
/********************
** asm/checksum.h **
********************/
@@ -3058,6 +3280,7 @@ struct net_device *alloc_etherdev(int);
__wsum csum_partial(const void *, int, __wsum);
__sum16 csum_fold(__wsum);
+
/********************
** linux/socket.h **
********************/
@@ -3067,12 +3290,78 @@ struct sockaddr {
char sa_data[14];
};
+
+/*****************
+ ** linux/idr.h **
+ *****************/
+
+#define DEFINE_IDA(name) struct ida name;
+struct ida { };
+
+int ida_simple_get(struct ida *ida, unsigned int start, unsigned int end,
+ gfp_t gfp_mask);
+void ida_simple_remove(struct ida *ida, unsigned int id);
+
+/*******************
+ ** linux/async.h **
+ *******************/
+
+struct async_domain { };
+
+#define ASYNC_DOMAIN(name) struct async_domain name = { };
+
+
+/*******************************
+ ** uapi/linux/usbdevice_fs.h **
+ *******************************/
+
+enum { USBDEVFS_HUB_PORTINFO };
+
+struct usbdevfs_hub_portinfo
+{
+ char nports;
+ char port [127];
+};
+
+
+/********************
+ ** linux/bitmap.h **
+ ********************/
+
+int bitmap_subset(const unsigned long *,
+ const unsigned long *, int);
+
+
+/*******************
+ ** linux/crc16.h **
+ *******************/
+
+u16 crc16(u16 crc, const u8 *buffer, size_t len);
+
+
+/*******************
+ ** linux/birev.h **
+ *******************/
+
+u16 bitrev16(u16 in);
+
+
+/******************
+ ** linux/phy.h **
+ ******************/
+
+typedef enum {
+ PHY_INTERFACE_MODE_MII = 1,
+} phy_interface_t;
+
+
/**********************************
** Platform specific defintions **
- *********************************/
-#include
+ **********************************/
+#include
+
/**********
** misc **
**********/
diff --git a/dde_linux/src/lib/usb/include/x86_32/platform/platform.h b/dde_linux/src/lib/usb/include/x86_32/platform/platform.h
index c17ce42ced..8c5d30c345 100644
--- a/dde_linux/src/lib/usb/include/x86_32/platform/platform.h
+++ b/dde_linux/src/lib/usb/include/x86_32/platform/platform.h
@@ -27,6 +27,7 @@ void platform_execute(void *sp, void *func, void *arg)
}
extern "C" void module_ehci_hcd_init();
+extern "C" void module_ehci_pci_init();
extern "C" void module_uhci_hcd_init();
inline void platform_hcd_init(Services *s)
@@ -34,6 +35,7 @@ inline void platform_hcd_init(Services *s)
/* ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after */
module_ehci_hcd_init();
+ module_ehci_pci_init();
module_uhci_hcd_init();
}
diff --git a/dde_linux/src/lib/usb/include/x86_64/platform/platform.h b/dde_linux/src/lib/usb/include/x86_64/platform/platform.h
index 8f211f7fb9..44b7004ec5 100644
--- a/dde_linux/src/lib/usb/include/x86_64/platform/platform.h
+++ b/dde_linux/src/lib/usb/include/x86_64/platform/platform.h
@@ -28,6 +28,7 @@ void platform_execute(void *sp, void *func, void *arg)
}
extern "C" void module_ehci_hcd_init();
+extern "C" void module_ehci_pci_init();
extern "C" void module_uhci_hcd_init();
inline void platform_hcd_init(Services *s)
@@ -35,6 +36,7 @@ inline void platform_hcd_init(Services *s)
/* ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after */
module_ehci_hcd_init();
+ module_ehci_pci_init();
module_uhci_hcd_init();
}
diff --git a/dde_linux/src/lib/usb/lx_emul.cc b/dde_linux/src/lib/usb/lx_emul.cc
index e3ca9d859b..b64a045554 100644
--- a/dde_linux/src/lib/usb/lx_emul.cc
+++ b/dde_linux/src/lib/usb/lx_emul.cc
@@ -369,6 +369,8 @@ void *kmalloc(size_t size, gfp_t flags)
if (a & 0x3)
PERR("Unaligned kmalloc %lx", a);
+
+ //PDBG("Kmalloc: [%lx-%lx) from %p", a, a + size, __builtin_return_address(0));
return addr;
}
@@ -662,6 +664,12 @@ void *ioremap(resource_size_t offset, unsigned long size)
return _ioremap(offset, size, 0);
}
+void *devm_ioremap(struct device *dev, resource_size_t offset,
+ unsigned long size)
+{
+ return ioremap(offset, size);
+}
+
/********************
** linux/device.h **
@@ -672,7 +680,7 @@ void *ioremap(resource_size_t offset, unsigned long size)
*/
class Driver : public Genode::List::Element
{
- private:
+ public:
struct device_driver *_drv; /* Linux driver */
@@ -748,6 +756,7 @@ int device_add(struct device *dev)
if (driver->match(dev)) {
int ret = driver->probe(dev);
dde_kit_log(DEBUG_DRIVER, "Probe return %d", ret);
+
if (!ret)
return 0;
}
@@ -797,6 +806,13 @@ long find_next_zero_bit_le(const void *addr,
}
+void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
+{
+ return kzalloc(size, gfp);
+}
+
+
+
/*******************************
** linux/byteorder/generic.h **
*******************************/
diff --git a/dde_linux/src/lib/usb/main.cc b/dde_linux/src/lib/usb/main.cc
index b1dada0c8f..e532f068b6 100644
--- a/dde_linux/src/lib/usb/main.cc
+++ b/dde_linux/src/lib/usb/main.cc
@@ -38,6 +38,7 @@ 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_hid_init_generic();
extern "C" void module_usb_stor_init();
extern "C" void module_ch_init();
@@ -66,6 +67,7 @@ static void init(Services *services)
/* HID */
module_hid_init_core();
module_hid_init();
+ module_hid_init_generic();
module_ch_init();
}
diff --git a/dde_linux/src/lib/usb/nic/nic.cc b/dde_linux/src/lib/usb/nic/nic.cc
index 2d4eaf27b9..d79442469b 100644
--- a/dde_linux/src/lib/usb/nic/nic.cc
+++ b/dde_linux/src/lib/usb/nic/nic.cc
@@ -367,6 +367,11 @@ struct sk_buff *alloc_skb(unsigned int size, gfp_t priority)
return skb;
}
+struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, unsigned int length)
+{
+ return _alloc_skb(length + NET_IP_ALIGN, false);
+}
+
void dev_kfree_skb(struct sk_buff *skb)
{
@@ -500,6 +505,12 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
}
+int skb_header_cloned(const struct sk_buff *skb)
+{
+ return skb->cloned;
+}
+
+
void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
{
skb->tail = skb->data + offset;
@@ -591,11 +602,11 @@ struct sk_buff *skb_dequeue(struct sk_buff_head *list)
** linux/inerrupt.h **
**********************/
-static void snprint_mac(char *buf, char *mac)
+static void snprint_mac(u8 *buf, u8 *mac)
{
for (int i = 0; i < ETH_ALEN; i++)
{
- Genode::snprintf(&buf[i * 3], 3, "%02x", mac[i]);
+ Genode::snprintf((char *)&buf[i * 3], 3, "%02x", mac[i]);
if ((i * 3) < MAC_LEN)
buf[(i * 3) + 2] = ':';
}
@@ -604,11 +615,27 @@ static void snprint_mac(char *buf, char *mac)
}
+/*************************
+ ** linux/etherdevice.h **
+ *************************/
+
+void eth_hw_addr_random(struct net_device *dev)
+{
+ random_ether_addr(dev->_dev_addr);
+}
+
+
+void eth_random_addr(u8 *addr)
+{
+ random_ether_addr(addr);
+}
+
+
void random_ether_addr(u8 *addr)
{
using namespace Genode;
- char str[MAC_LEN + 1];
- char fallback[] = { 0x2e, 0x60, 0x90, 0x0c, 0x4e, 0x01 };
+ u8 str[MAC_LEN + 1];
+ u8 fallback[] = { 0x2e, 0x60, 0x90, 0x0c, 0x4e, 0x01 };
Nic::Mac_address mac;
/* try using configured mac */
@@ -628,7 +655,7 @@ void random_ether_addr(u8 *addr)
/* use configured mac*/
Genode::memcpy(addr, mac.addr, ETH_ALEN);
- snprint_mac(str, mac.addr);
+ snprint_mac(str, (u8 *)mac.addr);
PINF("Using configured mac: %s", str);
#ifdef GENODE_NET_STAT
diff --git a/dde_linux/src/lib/usb/pci_driver.cc b/dde_linux/src/lib/usb/pci_driver.cc
index 728b89f156..aaa2b43296 100644
--- a/dde_linux/src/lib/usb/pci_driver.cc
+++ b/dde_linux/src/lib/usb/pci_driver.cc
@@ -195,7 +195,13 @@ int pci_register_driver(struct pci_driver *drv)
bool found = false;
- while (id->vendor || id->subvendor || id->class_mask) {
+ while (id->device_class || id->class_mask) {
+
+ if (id->device_class == (unsigned)PCI_ANY_ID) {
+ dde_kit_log(DEBUG_PCI, "Skipping PCI_ANY_ID device class");
+ id++;
+ continue;
+ }
Pci::Device_capability cap = pci.first_device(id->device_class,
id->class_mask);
diff --git a/dde_linux/src/lib/usb/signal/event.cc b/dde_linux/src/lib/usb/signal/event.cc
index b831298d56..e8f5555c0c 100644
--- a/dde_linux/src/lib/usb/signal/event.cc
+++ b/dde_linux/src/lib/usb/signal/event.cc
@@ -14,7 +14,6 @@
#include
#include
-
static Signal_helper *_signal = 0;
/**
@@ -238,3 +237,11 @@ int schedule_work(struct work_struct *work)
Work::schedule((void *)work, false);
return 1;
}
+
+
+bool queue_delayed_work(struct workqueue_struct *wq,
+ struct delayed_work *dwork, unsigned long delay)
+{
+ Work::schedule((void *)dwork, true);
+ return true;
+}
diff --git a/dde_linux/src/lib/usb/storage/storage.cc b/dde_linux/src/lib/usb/storage/storage.cc
index ee0a476e92..0726536b7c 100644
--- a/dde_linux/src/lib/usb/storage/storage.cc
+++ b/dde_linux/src/lib/usb/storage/storage.cc
@@ -167,8 +167,9 @@ void scsi_add_device(struct scsi_device *sdev)
* XXX move to 'main'
*/
if (!announce) {
+ enum { STACK_SIZE = 1024 * sizeof(addr_t) };
static Cap_connection cap_stor;
- static Rpc_entrypoint ep_stor(&cap_stor, 4096, "usb_stor_ep");
+ static Rpc_entrypoint ep_stor(&cap_stor, STACK_SIZE, "usb_stor_ep");
static Block::Root root(&ep_stor, env()->heap(), _signal->receiver(), device);
env()->parent()->announce(ep_stor.manage(&root));
announce = true;