mafpmoc: Support Microarray Inc. series fingerprint sensor PID 8012

This commit is contained in:
王毅
2026-06-18 15:47:34 +02:00
committed by Marco Trevisan (Treviño)
parent 4610f2285e
commit 7cf358d42a
9 changed files with 3269 additions and 0 deletions
+5
View File
@@ -253,6 +253,11 @@ usb:v27C6p6984*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
ID_PERSIST=0 ID_PERSIST=0
# Supported by libfprint driver mafpmoc
usb:v3274p8012*
ID_AUTOSUSPEND=1
ID_PERSIST=0
# Supported by libfprint driver nb1010 # Supported by libfprint driver nb1010
usb:v298Dp1010* usb:v298Dp1010*
ID_AUTOSUSPEND=1 ID_AUTOSUSPEND=1
File diff suppressed because it is too large Load Diff
+266
View File
@@ -0,0 +1,266 @@
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <glib.h>
#include <math.h>
#include "fpi-device.h"
#include "fpi-ssm.h"
#include "pwd.h"
#include <sys/utsname.h>
G_DECLARE_FINAL_TYPE (FpiDeviceMafpmoc, fpi_device_mafpmoc, FPI, DEVICE_MAFPMOC, FpDevice)
#define PRINT_CMD 0
#define PRINT_SSM_DEBUG 0
#define LOGD(format, ...) g_debug ("[%s][%d]" format, __FUNCTION__, __LINE__, ## __VA_ARGS__)
#define LOGE(format, ...) g_error ("[%s][%d]" format, __FUNCTION__, __LINE__, ## __VA_ARGS__)
#define MAFP_INTERFACE_CLASS G_USB_DEVICE_CLASS_VENDOR_SPECIFIC
#define MAFP_INTERFACE_SUB_CLASS 0x01
#define MAFP_INTERFACE_PROTOCOL 0x01
/* Usb port setting */
#define MAFP_EP_BULK_OUT 0x03
#define MAFP_EP_BULK_IN 0x83
#define MAFP_EP_INT_IN 0x82
/* Command transfer timeout: ms */
#define CMD_TIMEOUT 5000
#define DATA_TIMEOUT 5000
#define CTRL_TIMEOUT 200
#define MAFP_USB_BUFFER_SIZE 512
#define PACKAGE_CRC_SIZE 2
#define PACKAGE_HEADER_SIZE 9
#define PACKAGE_DATA_SIZE_MAX (MAFP_USB_BUFFER_SIZE - PACKAGE_HEADER_SIZE - PACKAGE_CRC_SIZE)
#define TEMPLATE_ID_SIZE 2
#define TEMPLATE_UID_SIZE 128
#define DEVICE_SN_SIZE 32
#define MAX_FINGER_NUM 10
#define MAX_USER_NUM 3
#define MAX_NOTEPAD_PAGE 16
#define MOC_CMD_GET_IMAGE 0x01
#define MOC_CMD_GEN_FEATURE 0x02
#define MOC_CMD_SEARCH 0x04
#define MOC_CMD_GEN_TEMPLATE 0x05
#define MOC_CMD_SAVE_TEMPLATE 0x06
#define MOC_CMD_READ_TEMPLATE 0x07
#define MOC_CMD_DELETE_TEMPLATE 0x0C
#define MOC_CMD_EMPTY 0x0D
#define MOC_CMD_WRITE_NOTEPAD 0x18
#define MOC_CMD_READ_NOTEPAD 0x19
#define MOC_CMD_GET_TEMPLATE_NUM 0x1D
#define MOC_CMD_GET_TEMPLATE_TABLE 0x1F
#define MOC_CMD_CANCEL 0x30
#define MOC_CMD_SLEEP 0x33
#define MOC_CMD_HANDSHAKE 0x35
#define MOC_CMD_CALIBRATE 0x36
#define MOC_CMD_FACTORY_RESET 0x3B
#define MOC_CMD_FACTORY_TEST 0x56
#define MOC_CMD_MATCH_WITHFID 0x66
#define MOC_CMD_GET_MAX_ID 0x6d
#define MOC_CMD_DUPAREA_TEST 0x6f
#define MOC_CMD_SAVE_TEMPLATE_INFO 0x86
#define MOC_CMD_GET_TEMPLATE_INFO 0x87
#define MOC_CMD_GET_INIT_STATUS 0x88
#define MAFP_SUCCESS 0
#define MAFP_RE_TPL_NUM_OVERSIZE 0x0B
#define MAFP_RE_GET_IMAGE_SUCCESS 0x00
#define MAFP_RE_GET_IMAGE_NONE 0x02
/* calibrate error (un-calibrate or calibrate failed) */
#define MAFP_RE_CALIBRATE_ERROR 0x02
#define MAFP_HANDSHAKE_CODE1 'M'
#define MAFP_HANDSHAKE_CODE2 'A'
/* Default enroll stages number */
#define DEFAULT_ENROLL_SAMPLES 12
#define MAFP_ENV_ENROLL_SAMPLES "MAFP_ENROLL_SAMPLES"
#define MAFP_ENROLL_IDENTIFY_DISABLED 0
#define MAFP_ENROLL_IDENTIFY_ENABLED 1
#define MAFP_ENROLL_IDENTIFY_ONCE 2
#define MAFP_ENROLL_DUPLICATE_DELETE_DISABLED 0
#define MAFP_ENROLL_DUPLICATE_DELETE_ENABLED 1
#define MAFP_ENROLL_DUPLICATE_AREA_DENY 0
#define MAFP_ENROLL_DUPLICATE_AREA_ALLOW 1
#define MAFP_SLEEP_INT_WAIT 0
#define MAFP_SLEEP_INT_CHECK 1
#define MAFP_SLEEP_INT_REFRESH 2
#define MAFP_PRESS_WAIT_UP 0
#define MAFP_PRESS_WAIT_DOWN 1
#define MAFP_IMAGE_ERR_TRRIGER 30
#define FPRINT_DATA_PATH "/var/lib/fprint/"
typedef enum {
FP_CMD_SEND = 0,
FP_CMD_RECEIVE,
FP_DATA_RECEIVE,
FP_TRANSFER_STATES,
} FpCmdState;
typedef enum {
FP_INIT_CLEAN_EPIN = 0,
FP_INIT_CLEAN_EPOUT,
FP_INIT_CLEAN_EPIN2,
FP_INIT_HANDSHAKE,
FP_INIT_MODULE_STATUS,
FP_INIT_STATES,
} FpInitState;
typedef enum {
FP_ENROLL_PWR_BTN_SHIELD_ON = 0,
FP_ENROLL_CHECK_EMPTY,
FP_ENROLL_TEMPLATE_TABLE,
FP_ENROLL_READ_TEMPLATE,
FP_ENROLL_VERIFY_GET_IMAGE,
FP_ENROLL_CHECK_INT_PARA,
FP_ENROLL_DETECT_MODE,
FP_ENROLL_ENABLE_INT,
FP_ENROLL_WAIT_INT,
FP_ENROLL_DISBALE_INT,
FP_ENROLL_REFRESH_INT_PARA,
FP_ENROLL_VERIFY_GENERATE_FEATURE,
FP_ENROLL_VERIFY_DUPLICATE_AREA,
FP_ENROLL_VERIFY_SEARCH,
FP_ENROLL_VERIFY_SEARCH_STEP, //match assigned id
FP_ENROLL_GET_TEMPLATE_INFO,
FP_ENROLL_SAVE_TEMPLATE_INFO,
FP_ENROLL_SAVE_TEMPLATE,
FP_ENROLL_DELETE_TEMPLATE_INFO_IF_FAILED,
FP_ENROLL_EXIT,
FP_ENROLL_STATES,
} FpEnrollState;
typedef enum {
FP_VERIFY_PWR_BTN_SHIELD_ON = 0,
FP_VERIFY_TEMPLATE_TABLE,
FP_VERIFY_GET_STARTUP_RESULT,
FP_VERIFY_GET_IMAGE,
FP_VERIFY_CHECK_INT_PARA,
FP_VERIFY_DETECT_MODE,
FP_VERIFY_ENABLE_INT,
FP_VERIFY_WAIT_INT,
FP_VERIFY_DISBALE_INT,
FP_VERIFY_REFRESH_INT_PARA,
FP_VERIFY_GENERATE_FEATURE,
FP_VERIFY_SEARCH_STEP, //match assigned id
FP_VERIFY_GET_TEMPLATE_INFO,
FP_VERIFY_EXIT,
FP_VERIFY_STATES,
} FpVerifyState;
typedef enum {
FP_LIST_TEMPLATE_TABLE = 0,
FP_LIST_GET_TEMPLATE_INFO,
FP_LIST_STATES,
} FpListState;
typedef enum {
FP_DELETE_TEMPLATE_TABLE = 0,
FP_DELETE_GET_TEMPLATE_INFO,
FP_DELETE_CLEAR_TEMPLATE_INFO,
FP_DELETE_TEMPLATE,
FP_DELETE_STATES,
} FpDeleteState;
typedef enum {
FP_EMPTY_TEMPLATE = 0,
FP_EMPTY_STATES,
} FpDeleteAllState;
typedef enum {
PACK_CMD = 0x01, //cmd packet
PACK_DATA = 0x02, //data packet, with more data packets later, must follow cmd or answer packet
PACK_ANSWER = 0x07, //answer packet for cmd packet
PACK_END = 0x08, //last data packet
PACK_DATA_ANDSWER = 0x09, //answer packet for data packet
} pack_mark;
#pragma pack(push, 1)
typedef struct _mafp_handshake
{
uint8_t code[2];
// uint8_t state;
// uint8_t desc[16];
// uint8_t ver[4];
} mafp_handshake_t, *pmafp_handshake_t;
typedef struct _mafp_search
{
uint8_t id[2];
uint8_t score[2];
} mafp_search_t, *pmafp_search_t;
typedef struct _mafp_tpl_table
{
uint8_t used_num;
uint8_t list[256];
} mafp_tpl_table_t, *pmafp_tpl_table_t;
typedef struct _mafp_tpl_info
{
char uid[128];
} mafp_tpl_info_t, *pmafp_tpl_info_t;
typedef struct _mafp_boot_handshake
{
char code[2];
uint8_t state;
char descrip[16];
uint32_t version;
} mafp_boot_handshake_t, *pmafp_boot_handshake_t;
typedef struct _mafp_template
{
char sn[32];
uint16_t id;
char uid[128];
} mafp_template_t, *pmafp_template_t;
typedef struct _mafp_templates
{
uint16_t index;
uint16_t total_num;
uint16_t priv_num;
mafp_template_t total_list[256];
mafp_template_t priv_list[MAX_FINGER_NUM];
GPtrArray *list;
} mafp_templates_t, *pmafp_templates_t;
#pragma pack(pop)
typedef struct _fp_cmd_response
{
uint8_t result;
union
{
mafp_handshake_t handshake;
mafp_search_t search;
mafp_tpl_table_t tpl_table;
mafp_tpl_info_t tpl_info;
mafp_boot_handshake_t boot_handshake;
};
} mafp_cmd_response_t, *pmafp_cmd_response_t;
typedef struct _pack_header
{
uint8_t head0;
uint8_t head1;
uint8_t addr0;
uint8_t addr1;
uint8_t addr2;
uint8_t addr3;
uint8_t flag;
uint8_t frame_len0;
uint8_t frame_len1;
} pack_header, *ppack_header;
+2
View File
@@ -155,6 +155,8 @@ driver_sources = {
[ 'drivers/realtek/realtek.c' ], [ 'drivers/realtek/realtek.c' ],
'focaltech_moc' : 'focaltech_moc' :
[ 'drivers/focaltech_moc/focaltech_moc.c' ], [ 'drivers/focaltech_moc/focaltech_moc.c' ],
'mafpmoc' :
[ 'drivers/mafpmoc/mafpmoc.c' ],
'secugen' : 'secugen' :
[ 'drivers/secugen.c' ], [ 'drivers/secugen.c' ],
} }
+1
View File
@@ -145,6 +145,7 @@ default_drivers = [
'fpcmoc', 'fpcmoc',
'realtek', 'realtek',
'focaltech_moc', 'focaltech_moc',
'mafpmoc',
'secugen', 'secugen',
] ]
Binary file not shown.
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/python3
import traceback
import sys
import gi
gi.require_version('FPrint', '2.0')
from gi.repository import FPrint, GLib
# Exit with error on any exception, included those happening in async callbacks
sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
ctx = GLib.main_context_default()
c = FPrint.Context()
c.enumerate()
devices = c.get_devices()
d = devices[0]
del devices
assert d.get_driver() == "mafpmoc"
assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
assert d.has_feature(FPrint.DeviceFeature.VERIFY)
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 d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
d.open_sync()
d.clear_storage_sync()
template = FPrint.Print.new(d)
def enroll_progress(*args):
assert d.get_finger_status() == FPrint.FingerStatusFlags.NEEDED
print('enroll progress: ' + str(args))
def identify_done(dev, res):
global identified
identified = True
identify_match, identify_print = dev.identify_finish(res)
print('indentification_done: ', identify_match, identify_print)
assert identify_match.equal(identify_print)
# List, enroll, list, verify, identify, delete
print("enrolling")
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
p = d.enroll_sync(template, None, enroll_progress, None)
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
print("enroll done")
print("listing")
stored = d.list_prints_sync()
print("listing done")
assert len(stored) == 1
assert stored[0].equal(p)
print("verifying")
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
verify_res, verify_print = d.verify_sync(p)
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
print("verify done")
del p
assert verify_res == True
identified = False
deserialized_prints = []
for p in stored:
deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
assert deserialized_prints[-1].equal(p)
del stored
print('async identifying')
d.identify(deserialized_prints, callback=identify_done)
del deserialized_prints
while not identified:
ctx.iteration(True)
print("deleting")
d.delete_print_sync(p)
print("delete done")
d.close_sync()
del d
del c
+375
View File
@@ -0,0 +1,375 @@
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-2/1-2.1
N: bus/usb/001/013=12011001000000087432128000010102030109022700010100A0320904000003FF010100070583024000010705030240000107058203100001
E: DEVNAME=/dev/bus/usb/001/013
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=3274/8012/100
E: TYPE=0/0/0
E: BUSNUM=001
E: DEVNUM=013
E: MAJOR=189
E: MINOR=12
E: SUBSYSTEM=usb
E: ID_VENDOR=MicroarrayTechnology
E: ID_VENDOR_ENC=MicroarrayTechnology
E: ID_VENDOR_ID=3274
E: ID_MODEL=MAFP_General_Device
E: ID_MODEL_ENC=MAFP\x20General\x20Device\x20
E: ID_MODEL_ID=8012
E: ID_REVISION=0100
E: ID_SERIAL=MicroarrayTechnology_MAFP_General_Device_1120031604020321
E: ID_SERIAL_SHORT=1120031604020321
E: ID_BUS=usb
E: ID_USB_INTERFACES=:ff0101:
E: ID_PATH=pci-0000:02:00.0-usb-0:2.1
E: ID_PATH_TAG=pci-0000_02_00_0-usb-0_2_1
E: ID_FOR_SEAT=usb-pci-0000_02_00_0-usb-0_2_1
E: TAGS=:seat:
E: CURRENT_TAGS=:seat:
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=8\n
A: bMaxPower=100mA\n
A: bNumConfigurations=1\n
A: bNumInterfaces= 1\n
A: bcdDevice=0100\n
A: bmAttributes=a0\n
A: busnum=1\n
A: configuration=
H: descriptors=12011001000000087432128000010102030109022700010100A0320904000003FF010100070583024000010705030240000107058203100001
A: dev=189:12\n
A: devnum=13\n
A: devpath=2.1\n
L: driver=../../../../../../../bus/usb/drivers/usb
A: idProduct=8012\n
A: idVendor=3274\n
A: ltm_capable=no\n
A: manufacturer=MicroarrayTechnology\n
A: maxchild=0\n
L: port=../1-2:1.0/1-2-port1
A: power/active_duration=28368880\n
A: power/async=enabled\n
A: power/autosuspend=2\n
A: power/autosuspend_delay_ms=2000\n
A: power/connected_duration=28368880\n
A: power/control=on\n
A: power/level=on\n
A: power/persist=1\n
A: power/runtime_active_kids=0\n
A: power/runtime_active_time=28368091\n
A: power/runtime_enabled=forbidden\n
A: power/runtime_status=active\n
A: power/runtime_suspended_time=0\n
A: power/runtime_usage=2\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=MAFP General Device \n
A: quirks=0x0\n
A: removable=unknown\n
A: rx_lanes=1\n
A: serial=1120031604020321\n
A: speed=12\n
A: tx_lanes=1\n
A: urbnum=3289\n
A: version= 1.10\n
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1/1-2
N: bus/usb/001/003=12011001090000080F0E020000010102000109021900010101E000090400000109000001070581030100FF
E: DEVNAME=/dev/bus/usb/001/003
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=e0f/2/100
E: TYPE=9/0/0
E: BUSNUM=001
E: DEVNUM=003
E: MAJOR=189
E: MINOR=2
E: SUBSYSTEM=usb
E: ID_VENDOR=VMware__Inc.
E: ID_VENDOR_ENC=VMware\x2c\x20Inc.
E: ID_VENDOR_ID=0e0f
E: ID_MODEL=VMware_Virtual_USB_Hub
E: ID_MODEL_ENC=VMware\x20Virtual\x20USB\x20Hub
E: ID_MODEL_ID=0002
E: ID_REVISION=0100
E: ID_SERIAL=VMware__Inc._VMware_Virtual_USB_Hub
E: ID_BUS=usb
E: ID_USB_INTERFACES=:090000:
E: ID_VENDOR_FROM_DATABASE=VMware, Inc.
E: ID_MODEL_FROM_DATABASE=Virtual USB Hub
E: ID_PATH=pci-0000:02:00.0-usb-0:2
E: ID_PATH_TAG=pci-0000_02_00_0-usb-0_2
E: ID_FOR_SEAT=usb-pci-0000_02_00_0-usb-0_2
E: TAGS=:seat:
E: CURRENT_TAGS=:seat:
A: authorized=1\n
A: avoid_reset_quirk=0\n
A: bConfigurationValue=1\n
A: bDeviceClass=09\n
A: bDeviceProtocol=00\n
A: bDeviceSubClass=00\n
A: bMaxPacketSize0=8\n
A: bMaxPower=0mA\n
A: bNumConfigurations=1\n
A: bNumInterfaces= 1\n
A: bcdDevice=0100\n
A: bmAttributes=e0\n
A: busnum=1\n
A: configuration=VMware, Inc.\n
H: descriptors=12011001090000080F0E020000010102000109021900010101E000090400000109000001070581030100FF
A: dev=189:2\n
A: devnum=3\n
A: devpath=2\n
L: driver=../../../../../../bus/usb/drivers/usb
A: idProduct=0002\n
A: idVendor=0e0f\n
A: ltm_capable=no\n
A: manufacturer=VMware, Inc.\n
A: maxchild=7\n
L: port=../1-0:1.0/usb1-port2
A: power/active_duration=68737416\n
A: power/async=enabled\n
A: power/autosuspend=0\n
A: power/autosuspend_delay_ms=0\n
A: power/connected_duration=352042384\n
A: power/control=auto\n
A: power/level=auto\n
A: power/runtime_active_kids=1\n
A: power/runtime_active_time=68737343\n
A: power/runtime_enabled=enabled\n
A: power/runtime_status=active\n
A: power/runtime_suspended_time=283304757\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=VMware Virtual USB Hub\n
A: quirks=0x0\n
A: removable=unknown\n
A: rx_lanes=1\n
A: speed=12\n
A: tx_lanes=1\n
A: urbnum=2459\n
A: version= 1.10\n
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb1
N: bus/usb/001/001=12011001090000406B1D010005060302010109021900010100E000090400000109000000070581030200FF
E: DEVNAME=/dev/bus/usb/001/001
E: DEVTYPE=usb_device
E: DRIVER=usb
E: PRODUCT=1d6b/1/605
E: TYPE=9/0/0
E: BUSNUM=001
E: DEVNUM=001
E: MAJOR=189
E: MINOR=0
E: SUBSYSTEM=usb
E: ID_VENDOR=Linux_6.5.0-27-generic_uhci_hcd
E: ID_VENDOR_ENC=Linux\x206.5.0-27-generic\x20uhci_hcd
E: ID_VENDOR_ID=1d6b
E: ID_MODEL=UHCI_Host_Controller
E: ID_MODEL_ENC=UHCI\x20Host\x20Controller
E: ID_MODEL_ID=0001
E: ID_REVISION=0605
E: ID_SERIAL=Linux_6.5.0-27-generic_uhci_hcd_UHCI_Host_Controller_0000:02:00.0
E: ID_SERIAL_SHORT=0000:02:00.0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:090000:
E: ID_VENDOR_FROM_DATABASE=Linux Foundation
E: ID_AUTOSUSPEND=1
E: ID_MODEL_FROM_DATABASE=1.1 root hub
E: ID_PATH=pci-0000:02:00.0
E: ID_PATH_TAG=pci-0000_02_00_0
E: ID_FOR_SEAT=usb-pci-0000_02_00_0
E: TAGS=:seat:
E: CURRENT_TAGS=:seat:
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=00\n
A: bDeviceSubClass=00\n
A: bMaxPacketSize0=64\n
A: bMaxPower=0mA\n
A: bNumConfigurations=1\n
A: bNumInterfaces= 1\n
A: bcdDevice=0605\n
A: bmAttributes=e0\n
A: busnum=1\n
A: configuration=
H: descriptors=12011001090000406B1D010005060302010109021900010100E000090400000109000000070581030200FF
A: dev=189:0\n
A: devnum=1\n
A: devpath=0\n
L: driver=../../../../../bus/usb/drivers/usb
A: idProduct=0001\n
A: idVendor=1d6b\n
A: interface_authorized_default=1\n
A: ltm_capable=no\n
A: manufacturer=Linux 6.5.0-27-generic uhci_hcd\n
A: maxchild=2\n
A: power/active_duration=352042808\n
A: power/async=enabled\n
A: power/autosuspend=0\n
A: power/autosuspend_delay_ms=0\n
A: power/connected_duration=352042820\n
A: power/control=auto\n
A: power/level=auto\n
A: power/runtime_active_kids=2\n
A: power/runtime_active_time=352042818\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=UHCI Host Controller\n
A: quirks=0x0\n
A: removable=unknown\n
A: rx_lanes=1\n
A: serial=0000:02:00.0\n
A: speed=12\n
A: tx_lanes=1\n
A: urbnum=157\n
A: version= 1.10\n
P: /devices/pci0000:00/0000:00:11.0/0000:02:00.0
E: DRIVER=uhci_hcd
E: PCI_CLASS=C0300
E: PCI_ID=15AD:0774
E: PCI_SUBSYS_ID=15AD:1976
E: PCI_SLOT_NAME=0000:02:00.0
E: MODALIAS=pci:v000015ADd00000774sv000015ADsd00001976bc0Csc03i00
E: SUBSYSTEM=pci
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_PCI_INTERFACE_FROM_DATABASE=UHCI
E: ID_VENDOR_FROM_DATABASE=VMware
E: ID_MODEL_FROM_DATABASE=USB1.1 UHCI Controller
A: acpi_index=16777728\n
A: ari_enabled=0\n
A: broken_parity_status=0\n
A: class=0x0c0300\n
H: config=AD157407050090020000030C0040000000000000000000000000000000000000812000000000000000000000AD1576190000000040000000000000000A010000130006030000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
A: consistent_dma_mask_bits=32\n
A: d3cold_allowed=0\n
A: device=0x0774\n
A: dma_mask_bits=32\n
L: driver=../../../../bus/pci/drivers/uhci_hcd
A: driver_override=(null)\n
A: enable=1\n
L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/device:06
A: irq=18\n
A: label=usb\n
A: local_cpulist=0-1\n
A: local_cpus=00000000,00000000,00000000,00000003\n
A: modalias=pci:v000015ADd00000774sv000015ADsd00001976bc0Csc03i00\n
A: msi_bus=1\n
A: numa_node=-1\n
A: pools=poolinfo - 0.1\nuhci_qh 18 32 128 1\nuhci_td 11 192 64 3\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 3 32 128 1\nbuffer-32 0 0 32 0\n
A: power/async=enabled\n
A: power/control=on\n
A: power/runtime_active_kids=1\n
A: power/runtime_active_time=352043941\n
A: power/runtime_enabled=forbidden\n
A: power/runtime_status=active\n
A: power/runtime_suspended_time=0\n
A: power/runtime_usage=2\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: reset_method=af_flr bus\n
A: resource=0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000002080 0x000000000000209f 0x0000000000040101\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=0x1976\n
A: subsystem_vendor=0x15ad\n
A: vendor=0x15ad\n
P: /devices/pci0000:00/0000:00:11.0
E: PCI_CLASS=60401
E: PCI_ID=15AD:0790
E: PCI_SUBSYS_ID=15AD:0790
E: PCI_SLOT_NAME=0000:00:11.0
E: MODALIAS=pci:v000015ADd00000790sv000015ADsd00000790bc06sc04i01
E: SUBSYSTEM=pci
E: ID_PCI_CLASS_FROM_DATABASE=Bridge
E: ID_PCI_SUBCLASS_FROM_DATABASE=PCI bridge
E: ID_PCI_INTERFACE_FROM_DATABASE=Subtractive decode
E: ID_VENDOR_FROM_DATABASE=VMware
E: ID_MODEL_FROM_DATABASE=PCI bridge
A: ari_enabled=0\n
A: broken_parity_status=0\n
A: class=0x060401\n
H: config=AD1590070700900202010406084001000000000000000000000202442030800250FDF0FDB1E7F1E70000000000000000000000004000000000000000FF0006000D000000AD15900700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
A: consistent_dma_mask_bits=32\n
A: d3cold_allowed=0\n
A: device=0x0790\n
A: dma_mask_bits=32\n
A: driver_override=(null)\n
A: enable=1\n
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05
A: irq=0\n
A: local_cpulist=0-1\n
A: local_cpus=00000000,00000000,00000000,00000003\n
A: modalias=pci:v000015ADd00000790sv000015ADsd00000790bc06sc04i01\n
A: msi_bus=1\n
A: numa_node=-1\n
A: power/async=enabled\n
A: power/control=on\n
A: power/runtime_active_kids=5\n
A: power/runtime_active_time=352044194\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: power_state=D0\n
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\n0x0000000000002000 0x0000000000003fff 0x0000000000000100\n0x00000000fd500000 0x00000000fdffffff 0x0000000000000200\n0x00000000e7b00000 0x00000000e7ffffff 0x0000000000102201\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n
A: revision=0x02\n
A: secondary_bus_number=2\n
A: subordinate_bus_number=2\n
A: subsystem_device=0x0790\n
A: subsystem_vendor=0x15ad\n
A: vendor=0x15ad\n
A: waiting_for_supplier=0\n
+1
View File
@@ -60,6 +60,7 @@ drivers_tests = [
'realtek', 'realtek',
'realtek-5816', 'realtek-5816',
'focaltech_moc', 'focaltech_moc',
'mafpmoc',
'secugen', 'secugen',
] ]