mirror of
https://git.proxmox.com/git/qemu
synced 2025-07-20 10:28:15 +00:00
Merge remote-tracking branch 'kraxel/usb.21' into staging
This commit is contained in:
commit
cfe7bb19d2
@ -205,6 +205,7 @@ hw-obj-$(CONFIG_HPET) += hpet.o
|
|||||||
hw-obj-$(CONFIG_APPLESMC) += applesmc.o
|
hw-obj-$(CONFIG_APPLESMC) += applesmc.o
|
||||||
hw-obj-$(CONFIG_SMARTCARD) += usb-ccid.o ccid-card-passthru.o
|
hw-obj-$(CONFIG_SMARTCARD) += usb-ccid.o ccid-card-passthru.o
|
||||||
hw-obj-$(CONFIG_SMARTCARD_NSS) += ccid-card-emulated.o
|
hw-obj-$(CONFIG_SMARTCARD_NSS) += ccid-card-emulated.o
|
||||||
|
hw-obj-$(CONFIG_USB_REDIR) += usb-redir.o
|
||||||
|
|
||||||
# PPC devices
|
# PPC devices
|
||||||
hw-obj-$(CONFIG_OPENPIC) += openpic.o
|
hw-obj-$(CONFIG_OPENPIC) += openpic.o
|
||||||
|
28
configure
vendored
28
configure
vendored
@ -177,6 +177,7 @@ spice=""
|
|||||||
rbd=""
|
rbd=""
|
||||||
smartcard=""
|
smartcard=""
|
||||||
smartcard_nss=""
|
smartcard_nss=""
|
||||||
|
usb_redir=""
|
||||||
opengl=""
|
opengl=""
|
||||||
|
|
||||||
# parse CC options first
|
# parse CC options first
|
||||||
@ -743,6 +744,10 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--enable-smartcard-nss) smartcard_nss="yes"
|
--enable-smartcard-nss) smartcard_nss="yes"
|
||||||
;;
|
;;
|
||||||
|
--disable-usb-redir) usb_redir="no"
|
||||||
|
;;
|
||||||
|
--enable-usb-redir) usb_redir="yes"
|
||||||
|
;;
|
||||||
*) echo "ERROR: unknown option $opt"; show_help="yes"
|
*) echo "ERROR: unknown option $opt"; show_help="yes"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@ -1018,6 +1023,8 @@ echo " --disable-smartcard disable smartcard support"
|
|||||||
echo " --enable-smartcard enable smartcard support"
|
echo " --enable-smartcard enable smartcard support"
|
||||||
echo " --disable-smartcard-nss disable smartcard nss support"
|
echo " --disable-smartcard-nss disable smartcard nss support"
|
||||||
echo " --enable-smartcard-nss enable smartcard nss support"
|
echo " --enable-smartcard-nss enable smartcard nss support"
|
||||||
|
echo " --disable-usb-redir disable usb network redirection support"
|
||||||
|
echo " --enable-usb-redir enable usb network redirection support"
|
||||||
echo ""
|
echo ""
|
||||||
echo "NOTE: The object files are built at the place where configure is launched"
|
echo "NOTE: The object files are built at the place where configure is launched"
|
||||||
exit 1
|
exit 1
|
||||||
@ -2371,6 +2378,22 @@ if test "$smartcard" = "no" ; then
|
|||||||
smartcard_nss="no"
|
smartcard_nss="no"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# check for usbredirparser for usb network redirection support
|
||||||
|
if test "$usb_redir" != "no" ; then
|
||||||
|
if $pkg_config libusbredirparser >/dev/null 2>&1 ; then
|
||||||
|
usb_redir="yes"
|
||||||
|
usb_redir_cflags=$($pkg_config --cflags libusbredirparser 2>/dev/null)
|
||||||
|
usb_redir_libs=$($pkg_config --libs libusbredirparser 2>/dev/null)
|
||||||
|
QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
|
||||||
|
LIBS="$LIBS $usb_redir_libs"
|
||||||
|
else
|
||||||
|
if test "$usb_redir" = "yes"; then
|
||||||
|
feature_not_found "usb-redir"
|
||||||
|
fi
|
||||||
|
usb_redir="no"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
@ -2617,6 +2640,7 @@ echo "spice support $spice"
|
|||||||
echo "rbd support $rbd"
|
echo "rbd support $rbd"
|
||||||
echo "xfsctl support $xfs"
|
echo "xfsctl support $xfs"
|
||||||
echo "nss used $smartcard_nss"
|
echo "nss used $smartcard_nss"
|
||||||
|
echo "usb net redir $usb_redir"
|
||||||
echo "OpenGL support $opengl"
|
echo "OpenGL support $opengl"
|
||||||
|
|
||||||
if test $sdl_too_old = "yes"; then
|
if test $sdl_too_old = "yes"; then
|
||||||
@ -2910,6 +2934,10 @@ if test "$smartcard_nss" = "yes" ; then
|
|||||||
echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
|
echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$usb_redir" = "yes" ; then
|
||||||
|
echo "CONFIG_USB_REDIR=y" >> $config_host_mak
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$opengl" = "yes" ; then
|
if test "$opengl" = "yes" ; then
|
||||||
echo "CONFIG_OPENGL=y" >> $config_host_mak
|
echo "CONFIG_OPENGL=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
@ -531,18 +531,15 @@ static void usb_keyboard_process_keycode(USBHIDState *hs)
|
|||||||
case 0xe0:
|
case 0xe0:
|
||||||
if (s->modifiers & (1 << 9)) {
|
if (s->modifiers & (1 << 9)) {
|
||||||
s->modifiers ^= 3 << 8;
|
s->modifiers ^= 3 << 8;
|
||||||
usb_hid_changed(hs);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case 0xe1 ... 0xe7:
|
case 0xe1 ... 0xe7:
|
||||||
if (keycode & (1 << 7)) {
|
if (keycode & (1 << 7)) {
|
||||||
s->modifiers &= ~(1 << (hid_code & 0x0f));
|
s->modifiers &= ~(1 << (hid_code & 0x0f));
|
||||||
usb_hid_changed(hs);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case 0xe8 ... 0xef:
|
case 0xe8 ... 0xef:
|
||||||
s->modifiers |= 1 << (hid_code & 0x0f);
|
s->modifiers |= 1 << (hid_code & 0x0f);
|
||||||
usb_hid_changed(hs);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -769,10 +766,12 @@ static int usb_hid_handle_control(USBDevice *dev, USBPacket *p,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GET_REPORT:
|
case GET_REPORT:
|
||||||
if (s->kind == USB_MOUSE || s->kind == USB_TABLET)
|
if (s->kind == USB_MOUSE || s->kind == USB_TABLET) {
|
||||||
ret = usb_pointer_poll(s, data, length);
|
ret = usb_pointer_poll(s, data, length);
|
||||||
else if (s->kind == USB_KEYBOARD)
|
} else if (s->kind == USB_KEYBOARD) {
|
||||||
ret = usb_keyboard_poll(s, data, length);
|
ret = usb_keyboard_poll(s, data, length);
|
||||||
|
}
|
||||||
|
s->changed = s->n > 0;
|
||||||
break;
|
break;
|
||||||
case SET_REPORT:
|
case SET_REPORT:
|
||||||
if (s->kind == USB_KEYBOARD)
|
if (s->kind == USB_KEYBOARD)
|
||||||
|
@ -730,6 +730,9 @@ out:
|
|||||||
td->ctrl |= TD_CTRL_STALL;
|
td->ctrl |= TD_CTRL_STALL;
|
||||||
td->ctrl &= ~TD_CTRL_ACTIVE;
|
td->ctrl &= ~TD_CTRL_ACTIVE;
|
||||||
s->status |= UHCI_STS_USBERR;
|
s->status |= UHCI_STS_USBERR;
|
||||||
|
if (td->ctrl & TD_CTRL_IOC) {
|
||||||
|
*int_mask |= 0x01;
|
||||||
|
}
|
||||||
uhci_update_irq(s);
|
uhci_update_irq(s);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -737,6 +740,9 @@ out:
|
|||||||
td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL;
|
td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL;
|
||||||
td->ctrl &= ~TD_CTRL_ACTIVE;
|
td->ctrl &= ~TD_CTRL_ACTIVE;
|
||||||
s->status |= UHCI_STS_USBERR;
|
s->status |= UHCI_STS_USBERR;
|
||||||
|
if (td->ctrl & TD_CTRL_IOC) {
|
||||||
|
*int_mask |= 0x01;
|
||||||
|
}
|
||||||
uhci_update_irq(s);
|
uhci_update_irq(s);
|
||||||
/* frame interrupted */
|
/* frame interrupted */
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -216,13 +216,13 @@ disable usb_ehci_mmio_writel(uint32_t addr, const char *str, uint32_t val) "wr m
|
|||||||
disable usb_ehci_mmio_change(uint32_t addr, const char *str, uint32_t new, uint32_t old) "ch mmio %04x [%s] = %x (old: %x)"
|
disable usb_ehci_mmio_change(uint32_t addr, const char *str, uint32_t new, uint32_t old) "ch mmio %04x [%s] = %x (old: %x)"
|
||||||
disable usb_ehci_usbsts(const char *sts, int state) "usbsts %s %d"
|
disable usb_ehci_usbsts(const char *sts, int state) "usbsts %s %d"
|
||||||
disable usb_ehci_state(const char *schedule, const char *state) "%s schedule %s"
|
disable usb_ehci_state(const char *schedule, const char *state) "%s schedule %s"
|
||||||
disable usb_ehci_qh_ptrs(void *q, uint32_t addr, uint32_t next, uint32_t c_qtd, uint32_t n_qtd, uint32_t a_qtd) "q %p - QH @ %08x: next %08x qtds %08x,%08x,%08x"
|
disable usb_ehci_qh_ptrs(void *q, uint32_t addr, uint32_t nxt, uint32_t c_qtd, uint32_t n_qtd, uint32_t a_qtd) "q %p - QH @ %08x: next %08x qtds %08x,%08x,%08x"
|
||||||
disable usb_ehci_qh_fields(uint32_t addr, int rl, int mplen, int eps, int ep, int devaddr) "QH @ %08x - rl %d, mplen %d, eps %d, ep %d, dev %d"
|
disable usb_ehci_qh_fields(uint32_t addr, int rl, int mplen, int eps, int ep, int devaddr) "QH @ %08x - rl %d, mplen %d, eps %d, ep %d, dev %d"
|
||||||
disable usb_ehci_qh_bits(uint32_t addr, int c, int h, int dtc, int i) "QH @ %08x - c %d, h %d, dtc %d, i %d"
|
disable usb_ehci_qh_bits(uint32_t addr, int c, int h, int dtc, int i) "QH @ %08x - c %d, h %d, dtc %d, i %d"
|
||||||
disable usb_ehci_qtd_ptrs(void *q, uint32_t addr, uint32_t next, uint32_t altnext) "q %p - QTD @ %08x: next %08x altnext %08x"
|
disable usb_ehci_qtd_ptrs(void *q, uint32_t addr, uint32_t nxt, uint32_t altnext) "q %p - QTD @ %08x: next %08x altnext %08x"
|
||||||
disable usb_ehci_qtd_fields(uint32_t addr, int tbytes, int cpage, int cerr, int pid) "QTD @ %08x - tbytes %d, cpage %d, cerr %d, pid %d"
|
disable usb_ehci_qtd_fields(uint32_t addr, int tbytes, int cpage, int cerr, int pid) "QTD @ %08x - tbytes %d, cpage %d, cerr %d, pid %d"
|
||||||
disable usb_ehci_qtd_bits(uint32_t addr, int ioc, int active, int halt, int babble, int xacterr) "QTD @ %08x - ioc %d, active %d, halt %d, babble %d, xacterr %d"
|
disable usb_ehci_qtd_bits(uint32_t addr, int ioc, int active, int halt, int babble, int xacterr) "QTD @ %08x - ioc %d, active %d, halt %d, babble %d, xacterr %d"
|
||||||
disable usb_ehci_itd(uint32_t addr, uint32_t next, uint32_t mplen, uint32_t mult, uint32_t ep, uint32_t devaddr) "ITD @ %08x: next %08x - mplen %d, mult %d, ep %d, dev %d"
|
disable usb_ehci_itd(uint32_t addr, uint32_t nxt, uint32_t mplen, uint32_t mult, uint32_t ep, uint32_t devaddr) "ITD @ %08x: next %08x - mplen %d, mult %d, ep %d, dev %d"
|
||||||
disable usb_ehci_port_attach(uint32_t port, const char *device) "attach port #%d - %s"
|
disable usb_ehci_port_attach(uint32_t port, const char *device) "attach port #%d - %s"
|
||||||
disable usb_ehci_port_detach(uint32_t port) "detach port #%d"
|
disable usb_ehci_port_detach(uint32_t port) "detach port #%d"
|
||||||
disable usb_ehci_port_reset(uint32_t port, int enable) "reset port #%d - %d"
|
disable usb_ehci_port_reset(uint32_t port, int enable) "reset port #%d - %d"
|
||||||
|
1218
usb-redir.c
Normal file
1218
usb-redir.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user