dde_linux/usb: Add RNDIS driver

This commit is contained in:
Alexander Senier 2017-10-18 14:01:12 +02:00 committed by Christian Helmuth
parent 50ec5c03c1
commit f15e8fec8f
8 changed files with 170 additions and 2 deletions

View File

@ -4,7 +4,7 @@ SRC_C += usb/core/hcd-pci.c
#
# USB netwpork support
#
SRC_C += $(addprefix net/usb/, usbnet.c ax88179_178a.c cdc_ether.c)
SRC_C += $(addprefix net/usb/, usbnet.c ax88179_178a.c cdc_ether.c rndis_host.c)
# XHCI
SRC_C += usb/host/xhci-pci.c

View File

@ -0,0 +1,30 @@
diff -Nur a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c
--- a/drivers/net/usb/rndis_host.c
+++ b/drivers/net/usb/rndis_host.c
@@ -318,7 +318,7 @@
unsigned char *bp;
/* we can't rely on i/o from stack working, or stack allocation */
- u.buf = kmalloc(CONTROL_BUFFER_SIZE, GFP_KERNEL);
+ u.buf = kzalloc(CONTROL_BUFFER_SIZE, GFP_KERNEL | GFP_LX_DMA);
if (!u.buf)
return -ENOMEM;
retval = usbnet_generic_cdc_bind(dev, intf);
@@ -475,7 +475,7 @@
struct rndis_halt *halt;
/* try to clear any rndis state/activity (no i/o from stack!) */
- halt = kzalloc(CONTROL_BUFFER_SIZE, GFP_KERNEL);
+ halt = kzalloc(CONTROL_BUFFER_SIZE, GFP_KERNEL | GFP_LX_DMA);
if (halt) {
halt->msg_type = cpu_to_le32(RNDIS_MSG_HALT);
halt->msg_len = cpu_to_le32(sizeof *halt);
@@ -573,7 +573,7 @@
* packets; Linux minimizes wasted bandwidth through tx queues.
*/
fill:
- hdr = (void *) __skb_push(skb, sizeof *hdr);
+ hdr = (void *) skb_push(skb, sizeof *hdr);
memset(hdr, 0, sizeof *hdr);
hdr->msg_type = cpu_to_le32(RNDIS_MSG_PACKET);
hdr->msg_len = cpu_to_le32(skb->len);

View File

@ -1 +1 @@
570bd3cf50c3ae2307931ae9eb6bb706423167ef
7f835ced1dfbfc678eaabf532d3650f822a6897e

View File

@ -190,6 +190,7 @@ PATCH_OPT(patches/usb_csum.patch) := $(USB_OPT)
PATCH_OPT(patches/usb_evdev.patch) := $(USB_OPT)
PATCH_OPT(patches/usb_mem.patch) := $(USB_OPT)
PATCH_OPT(patches/usb_usbnet.patch) := $(USB_OPT)
PATCH_OPT(patches/usb_rndis.patch) := $(USB_OPT)
# INTEL FB
PATCH_OPT(patches/intel_fb_export_api.patch) := -p1 -d$(SRC_DIR_INTEL_FB)

View File

@ -0,0 +1,130 @@
#
# \brief Test for using the TCP/IP terminal over USB (RNDIS, CDC_ETHER or USB NIC)
# \author Alexander Senier
# \date 2017-10-19
#
#
# Build
#
set build_components {
core init
drivers/timer drivers/usb
server/tcp_terminal
test/terminal_echo
}
proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
return gpio_drv }
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
lappend_if [have_spec gpio] build_components drivers/gpio
build $build_components
create_boot_directory
#
# Generate config
#
set config {
<config verbose="yes">
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides> <service name="Timer"/> </provides>
</start>
<start name="usb_drv">
<resource name="RAM" quantum="24M"/>
<provides>
<service name="Nic"/>
</provides>
<config uhci="no" ohci="no" ehci="yes" xhci="yes">
<nic mac="02:00:00:00:01:01" />
</config>
</start>
<start name="tcp_terminal" caps="200">
<resource name="RAM" quantum="2560K"/>
<provides> <service name="Terminal"/> </provides>
<config>
<policy label_prefix="test-terminal_echo" port="8888"/>
<vfs> <dir name="dev"> <log/> </dir> </vfs>
<libc stdout="/dev/log"/>
</config>
<route>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="test-terminal_echo">
<resource name="RAM" quantum="2M"/>
</start>
}
append_platform_drv_config
append_if [have_spec gpio] config "
<start name=\"[gpio_drv]\">
<resource name=\"RAM\" quantum=\"4M\"/>
<provides><service name=\"Gpio\"/></provides>
<config/>
</start>"
append config {
</config>
}
install_config $config
#
# Boot modules
#
# generic modules
set boot_modules {
core ld.lib.so init timer usb_drv
libc.lib.so libc_pipe.lib.so lwip.lib.so pthread.lib.so
tcp_terminal
test-terminal_echo
}
append_platform_drv_boot_modules
lappend_if [have_spec gpio] boot_modules [gpio_drv]
build_boot_image $boot_modules
append qemu_args " -device usb-ehci,id=ehci"
# Samsung RNDIS (tested with S5, Galaxy Tab S
append qemu_args " -device usb-host,bus=ehci.0,vendorid=0x04e8,productid=0x6860"
append qemu_args " -device usb-host,bus=ehci.0,vendorid=0x04e8,productid=0x6863"
append qemu_args " -device usb-host,bus=ehci.0,vendorid=0x04e8,productid=0x6864"
# ASIX Electronics Corp. AX88179 Gigabit Ethernet
append qemu_args " -device usb-host,bus=ehci.0,vendorid=0x0b95,productid=0x1790"
# Motorola Moto E
append qemu_args " -device usb-host,id=motoe,bus=ehci.0,vendorid=0x22b8,productid=0x2e25"
append qemu_args " -nographic"
run_genode_until forever
# vi: set ft=tcl :

View File

@ -102,6 +102,8 @@ enum {
ETIME = 209,
EPROBE_DEFER = 210,
EL3RST = 211,
MAX_ERRNO = 4095,
};

View File

@ -16,6 +16,7 @@
extern "C" void module_ax88179_178a_driver_init();
extern "C" void module_cdc_driver_init();
extern "C" void module_rndis_driver_init();
extern "C" void module_usbnet_init();
extern "C" void module_ehci_hcd_init();
extern "C" void module_ehci_pci_init();
@ -31,6 +32,7 @@ void platform_hcd_init(Services *s)
module_usbnet_init();
module_ax88179_178a_driver_init();
module_cdc_driver_init();
module_rndis_driver_init();
}
if (s->xhci) {

View File

@ -22,6 +22,7 @@ linux-x.x.x/drivers/net/usb/asix.h
linux-x.x.x/drivers/net/usb/ax88172a.c
linux-x.x.x/drivers/net/usb/ax88179_178a.c
linux-x.x.x/drivers/net/usb/cdc_ether.c
linux-x.x.x/drivers/net/usb/rndis_host.c
linux-x.x.x/drivers/net/usb/smsc95xx.h
linux-x.x.x/drivers/net/usb/smsc95xx.c
linux-x.x.x/drivers/net/usb/usbnet.c
@ -144,6 +145,7 @@ linux-x.x.x/include/linux/netdev_features.h
linux-x.x.x/include/linux/pci_ids.h
linux-x.x.x/include/linux/platform_data/usb-omap.h
linux-x.x.x/include/linux/power_supply.h
linux-x.x.x/include/linux/rndis.h
linux-x.x.x/include/linux/swab.h
linux-x.x.x/include/linux/usb.h
linux-x.x.x/include/linux/usb_usual.h
@ -153,6 +155,7 @@ linux-x.x.x/include/linux/usb/ehci-dbgp.h
linux-x.x.x/include/linux/usb/ehci_def.h
linux-x.x.x/include/linux/usb/hcd.h
linux-x.x.x/include/linux/usb/input.h
linux-x.x.x/include/linux/usb/rndis_host.h
linux-x.x.x/include/linux/io-64-nonatomic-lo-hi.h
linux-x.x.x/include/linux/usb/otg.h
linux-x.x.x/include/linux/usb/phy.h