From bad930503ce5d7f75d303d421b77b554085bbe92 Mon Sep 17 00:00:00 2001 From: Daniel Schaefer Date: Tue, 7 Apr 2026 18:34:21 +0800 Subject: [PATCH] focal: Add clear_storage Signed-off-by: Daniel Schaefer --- .../drivers/focaltech_moc/focaltech_moc.c | 68 ++ tests/focaltech_moc/custom.pcapng | Bin 38864 -> 140844 bytes tests/focaltech_moc/custom.py | 6 +- tests/focaltech_moc/device | 610 +++++++----------- 4 files changed, 322 insertions(+), 362 deletions(-) diff --git a/libfprint/drivers/focaltech_moc/focaltech_moc.c b/libfprint/drivers/focaltech_moc/focaltech_moc.c index 8bd93e4b..1528c999 100644 --- a/libfprint/drivers/focaltech_moc/focaltech_moc.c +++ b/libfprint/drivers/focaltech_moc/focaltech_moc.c @@ -1781,6 +1781,73 @@ focaltech_moc_delete_print (FpDevice *device) fpi_ssm_start (self->task_ssm, task_ssm_done); } +enum moc_clear_storage_states { + MOC_CLEAR_STORAGE_SEND, + MOC_CLEAR_STORAGE_NUM_STATES, +}; + +static void +focaltech_moc_clear_storage_cb (FpiDeviceFocaltechMoc *self, + uint8_t *buffer_in, + gsize length_in, + GError *error) +{ + FpCmd *fp_cmd = NULL; + + if (error) + { + fpi_ssm_mark_failed (self->task_ssm, error); + return; + } + + fp_cmd = (FpCmd *) buffer_in; + + if (fp_cmd->code != 0x04) + { + fpi_ssm_mark_failed (self->task_ssm, + fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, + "Clear storage failed: unexpected response code 0x%02x", + fp_cmd->code)); + return; + } + + fpi_device_clear_storage_complete (FP_DEVICE (self), NULL); + fpi_ssm_next_state (self->task_ssm); +} + +static void +focaltech_clear_storage_run_state (FpiSsm *ssm, FpDevice *device) +{ + guint8 *cmd_buf = NULL; + uint16_t cmd_len = 0; + uint16_t resp_len = 0; + + switch (fpi_ssm_get_cur_state (ssm)) + { + case MOC_CLEAR_STORAGE_SEND: + cmd_len = 0; + resp_len = sizeof (uint8_t); + cmd_buf = focaltech_moc_compose_cmd (0xac, NULL, cmd_len); + focaltech_moc_get_cmd (device, cmd_buf, + sizeof (FpCmd) + cmd_len + sizeof (uint8_t), + sizeof (FpCmd) + resp_len + sizeof (uint8_t), + 0, + focaltech_moc_clear_storage_cb); + break; + } +} + +static void +focaltech_moc_clear_storage (FpDevice *device) +{ + FpiDeviceFocaltechMoc *self = FPI_DEVICE_FOCALTECH_MOC (device); + + self->task_ssm = fpi_ssm_new (device, + focaltech_clear_storage_run_state, + MOC_CLEAR_STORAGE_NUM_STATES); + fpi_ssm_start (self->task_ssm, task_ssm_done); +} + enum moc_list_states { MOC_LIST_GET_ENROLLED_INFO, MOC_LIST_GET_ENROLLED_LIST, @@ -1876,6 +1943,7 @@ fpi_device_focaltech_moc_class_init (FpiDeviceFocaltechMocClass *klass) dev_class->enroll = focaltech_moc_enroll; dev_class->identify = focaltech_moc_identify; dev_class->delete = focaltech_moc_delete_print; + dev_class->clear_storage = focaltech_moc_clear_storage; dev_class->list = focaltech_moc_list; fpi_device_class_auto_initialize_features (dev_class); diff --git a/tests/focaltech_moc/custom.pcapng b/tests/focaltech_moc/custom.pcapng index 9bcd05c9177d2d98783707ae5447d980f8069bdf..12c63b5d766d374496e42baa6376c511a13954a8 100644 GIT binary patch literal 140844 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 J3+d1B^}nh?<5&Oy diff --git a/tests/focaltech_moc/custom.py b/tests/focaltech_moc/custom.py index 6a876c60..ea722851 100755 --- a/tests/focaltech_moc/custom.py +++ b/tests/focaltech_moc/custom.py @@ -27,10 +27,14 @@ assert not d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK) assert d.has_feature(FPrint.DeviceFeature.STORAGE) assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST) assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE) -assert not d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR) +assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR) d.open_sync() +print("Clear") +d.clear_storage_sync() +print("Clear done") + template = FPrint.Print.new(d) def enroll_progress(*args): diff --git a/tests/focaltech_moc/device b/tests/focaltech_moc/device index 093807d1..c0b13afa 100644 --- a/tests/focaltech_moc/device +++ b/tests/focaltech_moc/device @@ -1,385 +1,273 @@ -P: /devices/pci0000:00/0000:00:1c.4/0000:0b:00.0/usb3/3-1/3-1.4 -N: bus/usb/003/006=1201100100000040082879D900020102030109022000010100A0320904000002DCA0B0000705020240000007058102400000 -E: DEVNAME=/dev/bus/usb/003/006 +P: /devices/pci0000:00/0000:00:14.0/usb3/3-7 +N: bus/usb/003/003=120110010000004008289A0700020102030109022000010100A0320904000002DCA0B0000705020240000007058102400000 +E: BUSNUM=003 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/003/003 +E: DEVNUM=003 E: DEVTYPE=usb_device E: DRIVER=usb -E: PRODUCT=2808/d979/200 -E: TYPE=0/0/0 -E: BUSNUM=003 -E: DEVNUM=006 -E: MAJOR=189 -E: MINOR=261 -E: SUBSYSTEM=usb +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_7 +E: ID_MODEL=FocalTech_FT93xx_ESS +E: ID_MODEL_ENC=FocalTech\x20FT93xx\x20ESS +E: ID_MODEL_ID=079a +E: ID_PATH=pci-0000:00:14.0-usb-0:7 +E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_7 +E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:7 +E: ID_REVISION=0200 +E: ID_SERIAL=CCore_FocalTech_FT93xx_ESS_1234567890ABCDEF +E: ID_SERIAL_SHORT=1234567890ABCDEF +E: ID_USB_INTERFACES=:dca0b0: +E: ID_USB_MODEL=FocalTech_FT93xx_ESS +E: ID_USB_MODEL_ENC=FocalTech\x20FT93xx\x20ESS +E: ID_USB_MODEL_ID=079a +E: ID_USB_REVISION=0200 +E: ID_USB_SERIAL=CCore_FocalTech_FT93xx_ESS_1234567890ABCDEF +E: ID_USB_SERIAL_SHORT=1234567890ABCDEF +E: ID_USB_VENDOR=CCore +E: ID_USB_VENDOR_ENC=CCore +E: ID_USB_VENDOR_ID=2808 E: ID_VENDOR=CCore E: ID_VENDOR_ENC=CCore E: ID_VENDOR_ID=2808 -E: ID_MODEL=FocalTech_FT9349_ESS -E: ID_MODEL_ENC=FocalTech\x20FT9349\x20ESS -E: ID_MODEL_ID=d979 -E: ID_REVISION=0200 -E: ID_SERIAL=CCore_FocalTech_FT9349_ESS_1234567890ABCDEF -E: ID_SERIAL_SHORT=1234567890ABCDEF -E: ID_BUS=usb -E: ID_USB_INTERFACES=:dca0b0: -E: ID_PATH=pci-0000:0b:00.0-usb-0:1.4 -E: ID_PATH_TAG=pci-0000_0b_00_0-usb-0_1_4 -A: authorized=1 -A: avoid_reset_quirk=0 -A: bConfigurationValue=1 -A: bDeviceClass=00 -A: bDeviceProtocol=00 -A: bDeviceSubClass=00 -A: bMaxPacketSize0=64 -A: bMaxPower=100mA -A: bNumConfigurations=1 -A: bNumInterfaces= 1 -A: bcdDevice=0200 -A: bmAttributes=a0 -A: busnum=3 -A: configuration= -H: descriptors=1201100100000040082879D900020102030109022000010100A0320904000002DCA0B0000705020240000007058102400000 -A: dev=189:261 -A: devnum=6 -A: devpath=1.4 -L: driver=../../../../../../../bus/usb/drivers/usb -A: idProduct=d979 -A: idVendor=2808 -A: ltm_capable=no -A: manufacturer=CCore -A: maxchild=0 -L: port=../3-1:1.0/3-1-port4 -A: power/active_duration=130884 -A: power/async=enabled -A: power/autosuspend=2 -A: power/autosuspend_delay_ms=2000 -A: power/connected_duration=2778952 -A: power/control=auto -A: power/level=auto -A: power/persist=0 -A: power/runtime_active_kids=0 -A: power/runtime_active_time=131747 -A: power/runtime_enabled=enabled -A: power/runtime_status=active -A: power/runtime_suspended_time=2647026 -A: power/runtime_usage=0 -A: power/wakeup=disabled -A: power/wakeup_abort_count= -A: power/wakeup_active= -A: power/wakeup_active_count= -A: power/wakeup_count= -A: power/wakeup_expire_count= -A: power/wakeup_last_time_ms= -A: power/wakeup_max_time_ms= -A: power/wakeup_total_time_ms= -A: product=FocalTech FT9349 ESS -A: quirks=0x0 -A: removable=unknown -A: rx_lanes=1 -A: serial=1234567890ABCDEF -A: speed=12 -A: tx_lanes=1 -A: urbnum=1922 -A: version= 1.10 - -P: /devices/pci0000:00/0000:00:1c.4/0000:0b:00.0/usb3/3-1 -N: bus/usb/003/002=1201000209000140E305080636850001000109021900010100E0320904000001090000000705810301000C -E: DEVNAME=/dev/bus/usb/003/002 -E: DEVTYPE=usb_device -E: DRIVER=usb -E: PRODUCT=5e3/608/8536 -E: TYPE=9/0/1 -E: BUSNUM=003 -E: DEVNUM=002 E: MAJOR=189 -E: MINOR=257 +E: MINOR=258 +E: PATH=/nix/store/9cp1jf29x73z0wwkza7a4s2qv0y2lx4c-udev-path/bin:/nix/store/9cp1jf29x73z0wwkza7a4s2qv0y2lx4c-udev-path/sbin +E: PRODUCT=2808/79a/200 E: SUBSYSTEM=usb -E: ID_VENDOR=05e3 -E: ID_VENDOR_ENC=05e3 -E: ID_VENDOR_ID=05e3 -E: ID_MODEL=USB2.0_Hub -E: ID_MODEL_ENC=USB2.0\x20Hub -E: ID_MODEL_ID=0608 -E: ID_REVISION=8536 -E: ID_SERIAL=05e3_USB2.0_Hub -E: ID_BUS=usb -E: ID_USB_INTERFACES=:090000: -E: ID_VENDOR_FROM_DATABASE=Genesys Logic, Inc. -E: ID_MODEL_FROM_DATABASE=Hub -E: ID_PATH=pci-0000:0b:00.0-usb-0:1 -E: ID_PATH_TAG=pci-0000_0b_00_0-usb-0_1 -E: ID_FOR_SEAT=usb-pci-0000_0b_00_0-usb-0_1 E: TAGS=:seat: -A: authorized=1 -A: avoid_reset_quirk=0 -A: bConfigurationValue=1 -A: bDeviceClass=09 -A: bDeviceProtocol=01 -A: bDeviceSubClass=00 -A: bMaxPacketSize0=64 -A: bMaxPower=100mA -A: bNumConfigurations=1 -A: bNumInterfaces= 1 -A: bcdDevice=8536 -A: bmAttributes=e0 -A: busnum=3 +E: TYPE=0/0/0 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=00\n +A: bDeviceProtocol=00\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=100mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=0200\n +A: bmAttributes=a0\n +A: busnum=3\n A: configuration= -H: descriptors=1201000209000140E305080636850001000109021900010100E0320904000001090000000705810301000C -A: dev=189:257 -A: devnum=2 -A: devpath=1 -L: driver=../../../../../../bus/usb/drivers/usb -A: idProduct=0608 -A: idVendor=05e3 -A: ltm_capable=no -A: maxchild=4 -L: port=../3-0:1.0/usb3-port1 -A: power/active_duration=6193132 -A: power/async=enabled -A: power/autosuspend=0 -A: power/autosuspend_delay_ms=0 -A: power/connected_duration=6193132 -A: power/control=auto -A: power/level=auto -A: power/runtime_active_kids=3 -A: power/runtime_active_time=6192633 -A: power/runtime_enabled=enabled -A: power/runtime_status=active -A: power/runtime_suspended_time=0 -A: power/runtime_usage=0 -A: power/wakeup=disabled -A: power/wakeup_abort_count= -A: power/wakeup_active= -A: power/wakeup_active_count= -A: power/wakeup_count= -A: power/wakeup_expire_count= -A: power/wakeup_last_time_ms= -A: power/wakeup_max_time_ms= -A: power/wakeup_total_time_ms= -A: product=USB2.0 Hub -A: quirks=0x0 -A: removable=unknown -A: rx_lanes=1 -A: speed=480 -A: tx_lanes=1 -A: urbnum=619 -A: version= 2.00 +H: descriptors=120110010000004008289A0700020102030109022000010100A0320904000002DCA0B0000705020240000007058102400000 +A: dev=189:258\n +A: devnum=3\n +A: devpath=7\n +A: devspec=(null)\n +L: driver=../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b/device:0c/device:14 +A: idProduct=079a\n +A: idVendor=2808\n +A: ltm_capable=no\n +A: manufacturer=CCore\n +A: maxchild=0\n +A: physical_location/dock=no\n +A: physical_location/horizontal_position=left\n +A: physical_location/lid=no\n +A: physical_location/panel=top\n +A: physical_location/vertical_position=upper\n +L: port=../3-0:1.0/usb3-port7 +A: power/active_duration=1684132\n +A: power/async=enabled\n +A: power/autosuspend=2\n +A: power/autosuspend_delay_ms=2000\n +A: power/connected_duration=1684132\n +A: power/control=on\n +A: power/level=on\n +A: power/persist=0\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=1683897\n +A: power/runtime_enabled=forbidden\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=1\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=FocalTech FT93xx ESS\n +A: quirks=0x0\n +A: removable=fixed\n +A: rx_lanes=1\n +A: serial=1234567890ABCDEF\n +A: speed=12\n +A: tx_lanes=1\n +A: urbnum=9\n +A: version= 1.10\n -P: /devices/pci0000:00/0000:00:1c.4/0000:0b:00.0/usb3 -N: bus/usb/003/001=12010002090001406B1D020015050302010109021900010100E0000904000001090000000705810304000C +P: /devices/pci0000:00/0000:00:14.0/usb3 +N: bus/usb/003/001=12010002090001406B1D020000070302010109021900010100E0000904000001090000000705810304000C +E: BUSNUM=003 +E: CURRENT_TAGS=:seat: E: DEVNAME=/dev/bus/usb/003/001 +E: DEVNUM=001 E: DEVTYPE=usb_device E: DRIVER=usb -E: PRODUCT=1d6b/2/515 -E: TYPE=9/0/1 -E: BUSNUM=003 -E: DEVNUM=001 -E: MAJOR=189 -E: MINOR=256 -E: SUBSYSTEM=usb -E: ID_VENDOR=Linux_5.15.0-52-generic_xhci-hcd -E: ID_VENDOR_ENC=Linux\x205.15.0-52-generic\x20xhci-hcd -E: ID_VENDOR_ID=1d6b +E: ID_AUTOSUSPEND=1 +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0 E: ID_MODEL=xHCI_Host_Controller E: ID_MODEL_ENC=xHCI\x20Host\x20Controller -E: ID_MODEL_ID=0002 -E: ID_REVISION=0515 -E: ID_SERIAL=Linux_5.15.0-52-generic_xhci-hcd_xHCI_Host_Controller_0000:0b:00.0 -E: ID_SERIAL_SHORT=0000:0b:00.0 -E: ID_BUS=usb -E: ID_USB_INTERFACES=:090000: -E: ID_VENDOR_FROM_DATABASE=Linux Foundation E: ID_MODEL_FROM_DATABASE=2.0 root hub -E: ID_PATH=pci-0000:0b:00.0 -E: ID_PATH_TAG=pci-0000_0b_00_0 -E: ID_FOR_SEAT=usb-pci-0000_0b_00_0 +E: ID_MODEL_ID=0002 +E: ID_PATH=pci-0000:00:14.0 +E: ID_PATH_TAG=pci-0000_00_14_0 +E: ID_REVISION=0700 +E: ID_SERIAL=Linux_7.0.0_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_SERIAL_SHORT=0000:00:14.0 +E: ID_USB_INTERFACES=:090000: +E: ID_USB_MODEL=xHCI_Host_Controller +E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller +E: ID_USB_MODEL_ID=0002 +E: ID_USB_REVISION=0700 +E: ID_USB_SERIAL=Linux_7.0.0_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_USB_SERIAL_SHORT=0000:00:14.0 +E: ID_USB_VENDOR=Linux_7.0.0_xhci-hcd +E: ID_USB_VENDOR_ENC=Linux\x207.0.0\x20xhci-hcd +E: ID_USB_VENDOR_ID=1d6b +E: ID_VENDOR=Linux_7.0.0_xhci-hcd +E: ID_VENDOR_ENC=Linux\x207.0.0\x20xhci-hcd +E: ID_VENDOR_FROM_DATABASE=Linux Foundation +E: ID_VENDOR_ID=1d6b +E: MAJOR=189 +E: MINOR=256 +E: PATH=/nix/store/9cp1jf29x73z0wwkza7a4s2qv0y2lx4c-udev-path/bin:/nix/store/9cp1jf29x73z0wwkza7a4s2qv0y2lx4c-udev-path/sbin +E: PRODUCT=1d6b/2/700 +E: SUBSYSTEM=usb E: TAGS=:seat: -A: authorized=1 -A: authorized_default=1 -A: avoid_reset_quirk=0 -A: bConfigurationValue=1 -A: bDeviceClass=09 -A: bDeviceProtocol=01 -A: bDeviceSubClass=00 -A: bMaxPacketSize0=64 -A: bMaxPower=0mA -A: bNumConfigurations=1 -A: bNumInterfaces= 1 -A: bcdDevice=0515 -A: bmAttributes=e0 -A: busnum=3 +E: TYPE=9/0/1 +A: authorized=1\n +A: authorized_default=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=09\n +A: bDeviceProtocol=01\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=0mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=0700\n +A: bmAttributes=e0\n +A: busnum=3\n A: configuration= -H: descriptors=12010002090001406B1D020015050302010109021900010100E0000904000001090000000705810304000C -A: dev=189:256 -A: devnum=1 -A: devpath=0 -L: driver=../../../../../bus/usb/drivers/usb -A: idProduct=0002 -A: idVendor=1d6b -A: interface_authorized_default=1 -A: ltm_capable=no -A: manufacturer=Linux 5.15.0-52-generic xhci-hcd -A: maxchild=2 -A: power/active_duration=6193348 -A: power/async=enabled -A: power/autosuspend=0 -A: power/autosuspend_delay_ms=0 -A: power/connected_duration=6193348 -A: power/control=auto -A: power/level=auto -A: power/runtime_active_kids=1 -A: power/runtime_active_time=6193145 -A: power/runtime_enabled=enabled -A: power/runtime_status=active -A: power/runtime_suspended_time=0 -A: power/runtime_usage=0 -A: power/wakeup=disabled -A: power/wakeup_abort_count= -A: power/wakeup_active= -A: power/wakeup_active_count= -A: power/wakeup_count= -A: power/wakeup_expire_count= -A: power/wakeup_last_time_ms= -A: power/wakeup_max_time_ms= -A: power/wakeup_total_time_ms= -A: product=xHCI Host Controller -A: quirks=0x0 -A: removable=unknown -A: rx_lanes=1 -A: serial=0000:0b:00.0 -A: speed=480 -A: tx_lanes=1 -A: urbnum=36 -A: version= 2.00 +H: descriptors=12010002090001406B1D020000070302010109021900010100E0000904000001090000000705810304000C +A: dev=189:256\n +A: devnum=1\n +A: devpath=0\n +A: devspec=(null)\n +L: driver=../../../../bus/usb/drivers/usb +L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b/device:0c +A: idProduct=0002\n +A: idVendor=1d6b\n +A: interface_authorized_default=1\n +A: ltm_capable=no\n +A: manufacturer=Linux 7.0.0 xhci-hcd\n +A: maxchild=10\n +A: power/active_duration=1684507\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=1684507\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=1\n +A: power/runtime_active_time=1684505\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=xHCI Host Controller\n +A: quirks=0x0\n +A: removable=unknown\n +A: rx_lanes=1\n +A: serial=0000:00:14.0\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=63\n +A: version= 2.00\n -P: /devices/pci0000:00/0000:00:1c.4/0000:0b:00.0 +P: /devices/pci0000:00/0000:00:14.0 E: DRIVER=xhci_hcd -E: PCI_CLASS=C0330 -E: PCI_ID=104C:8241 -E: PCI_SUBSYS_ID=1028:050F -E: PCI_SLOT_NAME=0000:0b:00.0 -E: MODALIAS=pci:v0000104Cd00008241sv00001028sd0000050Fbc0Csc03i30 -E: SUBSYSTEM=pci +E: ID_PATH=pci-0000:00:14.0 +E: ID_PATH_TAG=pci-0000_00_14_0 E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller -E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI -E: ID_VENDOR_FROM_DATABASE=Texas Instruments -E: ID_MODEL_FROM_DATABASE=TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller -A: aer_dev_correctable=RxErr 0\nBadTLP 0\nBadDLLP 0\nRollover 0\nTimeout 0\nNonFatalErr 0\nCorrIntErr 0\nHeaderOF 0\nTOTAL_ERR_COR 0 -A: aer_dev_fatal=Undefined 0\nDLP 0\nSDES 0\nTLP 0\nFCP 0\nCmpltTO 0\nCmpltAbrt 0\nUnxCmplt 0\nRxOF 0\nMalfTLP 0\nECRC 0\nUnsupReq 0\nACSViol 0\nUncorrIntErr 0\nBlockedTLP 0\nAtomicOpBlocked 0\nTLPBlockedErr 0\nPoisonTLPBlocked 0\nTOTAL_ERR_FATAL 0 -A: aer_dev_nonfatal=Undefined 0\nDLP 0\nSDES 0\nTLP 0\nFCP 0\nCmpltTO 0\nCmpltAbrt 0\nUnxCmplt 0\nRxOF 0\nMalfTLP 0\nECRC 0\nUnsupReq 0\nACSViol 0\nUncorrIntErr 0\nBlockedTLP 0\nAtomicOpBlocked 0\nTLPBlockedErr 0\nPoisonTLPBlocked 0\nTOTAL_ERR_NONFATAL 0 -A: ari_enabled=0 -A: broken_parity_status=0 -A: class=0x0c0330 -H: config=4C104182060410000230030C100000000400D0F7000000000400D1F70000000000000000000000000000000028100F050000000040000000000000000B010000014883FE080000000570860000000000000000000000000000000000000000003020000000000000000000000000000010C00200C38F900500201900123C07004200121000000000000000000000000000000000100000000000000000000000020000000000000000000000000000000000000000000F0000000000000000001100078002000000021000000000000028100F05AB0D00001B0000003F000000000040CB00000000000000000000000000000000000000000000000000000000010002150000000000000000302046000020000000200000A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030001000000200000280008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003B00B100FFFFFFFF04000007000F0F1B2001010000000000AA430000800200000000000000000000117E7C031000000830C0000001800000FFFF0F00000000000F00000000000000855023000B50230000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F010000000000000000000000000000000000001B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -A: consistent_dma_mask_bits=64 -A: current_link_speed=5.0 GT/s PCIe -A: current_link_width=1 -A: d3cold_allowed=1 -A: device=0x8241 -A: dma_mask_bits=64 -L: driver=../../../../bus/pci/drivers/xhci_hcd -A: driver_override=(null) -A: enable=1 -A: irq=16 -A: link/clkpm=0 -A: link/l0s_aspm=0 -A: link/l1_aspm=1 -A: local_cpulist=0-3 -A: local_cpus=f -A: max_link_speed=5.0 GT/s PCIe -A: max_link_width=1 -A: modalias=pci:v0000104Cd00008241sv00001028sd0000050Fbc0Csc03i30 -A: msi_bus=1 -A: msi_irqs/25=msix -A: msi_irqs/26=msix -A: msi_irqs/27=msix -A: msi_irqs/28=msix -A: msi_irqs/29=msix -A: numa_node=-1 -A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 11 12 2112 12\nxHCI ring segments 34 34 4096 34\nbuffer-2048 16 32 2048 16\nbuffer-512 0 0 512 0\nbuffer-128 26 32 128 1\nbuffer-32 0 0 32 0 -A: power/async=enabled -A: power/control=on -A: power/runtime_active_kids=1 -A: power/runtime_active_time=6193932 -A: power/runtime_enabled=forbidden -A: power/runtime_status=active -A: power/runtime_suspended_time=0 -A: power/runtime_usage=1 -A: power/wakeup=enabled -A: power/wakeup_abort_count=0 -A: power/wakeup_active=0 -A: power/wakeup_active_count=0 -A: power/wakeup_count=0 -A: power/wakeup_expire_count=0 -A: power/wakeup_last_time_ms=0 -A: power/wakeup_max_time_ms=0 -A: power/wakeup_total_time_ms=0 -A: power_state=D0 -A: reset_method=bus -A: resource=0x00000000f7d00000 0x00000000f7d0ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x00000000f7d10000 0x00000000f7d11fff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000 -A: revision=0x02 -A: subsystem_device=0x050f -A: subsystem_vendor=0x1028 -A: vendor=0x104c - -P: /devices/pci0000:00/0000:00:1c.4 -E: DRIVER=pcieport -E: PCI_CLASS=60400 -E: PCI_ID=8086:1C18 -E: PCI_SUBSYS_ID=1028:050F -E: PCI_SLOT_NAME=0000:00:1c.4 -E: MODALIAS=pci:v00008086d00001C18sv00001028sd0000050Fbc06sc04i00 -E: SUBSYSTEM=pci -E: ID_PCI_CLASS_FROM_DATABASE=Bridge -E: ID_PCI_SUBCLASS_FROM_DATABASE=PCI bridge -E: ID_PCI_INTERFACE_FROM_DATABASE=Normal decode +E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller E: ID_VENDOR_FROM_DATABASE=Intel Corporation -E: ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family PCI Express Root Port 5 -A: ari_enabled=0 -A: broken_parity_status=0 -A: class=0x060400 -H: config=8680181C07001000B5000406100081000000000000000000000B0C00F0000020D0F7D0F7F1FF010000000000000000000000000040000000000000000B011200108042010080000000001000123C1205420012F000B2240000004001000000000000000016000000000000000000000002000000000000000000000000000000059000000000000000000000000000000DA0000028100F050000000000000000010002C8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020B00000080118100000000003F00000000000001000000000000000000000000000000870F050800000000000000000000000000000000110006000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B363A7400001414311742005B6009002020000A521498095104690616000028BCB5BC4A00000000744C8500DC08DC0061091100D30F07005000E2005B00170001009400370494000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -A: consistent_dma_mask_bits=32 -A: current_link_speed=5.0 GT/s PCIe -A: current_link_width=1 -A: d3cold_allowed=1 -A: device=0x1c18 -A: dma_mask_bits=32 -L: driver=../../../bus/pci/drivers/pcieport -A: driver_override=(null) -A: enable=2 -A: irq=16 -A: local_cpulist=0-3 -A: local_cpus=f -A: max_link_speed=5.0 GT/s PCIe -A: max_link_width=1 -A: modalias=pci:v00008086d00001C18sv00001028sd0000050Fbc06sc04i00 -A: msi_bus=1 -A: numa_node=-1 -A: power/async=enabled -A: power/control=on -A: power/runtime_active_kids=1 -A: power/runtime_active_time=6193944 -A: power/runtime_enabled=forbidden -A: power/runtime_status=active -A: power/runtime_suspended_time=0 -A: power/runtime_usage=2 -A: power/wakeup=disabled -A: power/wakeup_abort_count= -A: power/wakeup_active= -A: power/wakeup_active_count= -A: power/wakeup_count= -A: power/wakeup_expire_count= -A: power/wakeup_last_time_ms= -A: power/wakeup_max_time_ms= -A: power/wakeup_total_time_ms= -A: power_state=D0 -A: reset_method=pm -A: resource=0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x00000000f7d00000 0x00000000f7dfffff 0x0000000000000200\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000 -A: revision=0xb5 -A: secondary_bus_number=11 -A: subordinate_bus_number=12 -A: subsystem_device=0x050f -A: subsystem_vendor=0x1028 -A: vendor=0x8086 +E: MODALIAS=pci:v00008086d00004D7Dsv0000F111sd00000010bc0Csc03i30 +E: PATH=/nix/store/9cp1jf29x73z0wwkza7a4s2qv0y2lx4c-udev-path/bin:/nix/store/9cp1jf29x73z0wwkza7a4s2qv0y2lx4c-udev-path/sbin +E: PCI_CLASS=C0330 +E: PCI_ID=8086:4D7D +E: PCI_SLOT_NAME=0000:00:14.0 +E: PCI_SUBSYS_ID=F111:0010 +E: SUBSYSTEM=pci +A: ari_enabled=0\n +A: broken_parity_status=0\n +A: class=0x0c0330\n +H: config=86807D4D060490020030030C100080000400309400000000000000000000000000000000000000000000000011F11000000000007000000000000000FF010000FD0134C08FC2FF8300000000000000003F6DDF0F000000000000000000000000326000000000000000000000000000000180C3C10800000000000000000000000590B7001804E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F5C02000003000009000C008680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F000012000000 +A: consistent_dma_mask_bits=64\n +A: d3cold_allowed=1\n +A: device=0x4d7d\n +A: devspec= +A: dma_mask_bits=64\n +L: driver=../../../bus/pci/drivers/xhci_hcd +A: driver_override=(null)\n +A: enable=1\n +L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0b +L: iommu=../../virtual/iommu/dmar2 +L: iommu_group=../../../kernel/iommu_groups/9 +A: irq=136\n +A: local_cpulist=0-5\n +A: local_cpus=3f\n +A: modalias=pci:v00008086d00004D7Dsv0000F111sd00000010bc0Csc03i30\n +A: msi_bus=1\n +A: msi_irqs/136=msi\n +A: msi_irqs/137=msi\n +A: msi_irqs/138=msi\n +A: msi_irqs/139=msi\n +A: msi_irqs/140=msi\n +A: msi_irqs/141=msi\n +A: msi_irqs/142=msi\n +A: numa_node=-1\n +A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 256 port bw ctx arrays 0 0 256 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 4 5 2112 5\nxHCI ring segments 13 13 4096 13\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\n +A: power/async=enabled\n +A: power/control=auto\n +A: power/runtime_active_kids=1\n +A: power/runtime_active_time=1685028\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=enabled\n +A: power/wakeup_abort_count=0\n +A: power/wakeup_active=0\n +A: power/wakeup_active_count=0\n +A: power/wakeup_count=0\n +A: power/wakeup_expire_count=0\n +A: power/wakeup_last_time_ms=0\n +A: power/wakeup_max_time_ms=0\n +A: power/wakeup_total_time_ms=0\n +A: power_state=D0\n +A: resource=0x0000000094300000 0x000000009430ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n +A: revision=0x00\n +A: subsystem_device=0x0010\n +A: subsystem_vendor=0xf111\n +A: vendor=0x8086\n