mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
realtek: add support for rts5816
Signed-off-by: huan_huang <huan_huang@realsil.com.cn>
This commit is contained in:
committed by
Marco Trevisan (Treviño)
parent
75adfd37d1
commit
a88582761f
@@ -227,6 +227,7 @@ usb:v298Dp1010*
|
||||
|
||||
# Supported by libfprint driver realtek
|
||||
usb:v0BDAp5813*
|
||||
usb:v0BDAp5816*
|
||||
ID_AUTOSUSPEND=1
|
||||
ID_PERSIST=0
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ G_DEFINE_TYPE (FpiDeviceRealtek, fpi_device_realtek, FP_TYPE_DEVICE)
|
||||
|
||||
static const FpIdEntry id_table[] = {
|
||||
{ .vid = 0x0bda, .pid = 0x5813, },
|
||||
{ .vid = 0x0bda, .pid = 0x5816, },
|
||||
{ .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */
|
||||
};
|
||||
|
||||
@@ -92,6 +93,50 @@ fp_task_ssm_generic_cb (FpiDeviceRealtek *self,
|
||||
fpi_ssm_next_state (self->task_ssm);
|
||||
}
|
||||
|
||||
static void
|
||||
fp_get_device_info_cb (FpiDeviceRealtek *self,
|
||||
uint8_t *buffer_in,
|
||||
GError *error)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||
return;
|
||||
}
|
||||
|
||||
self->template_len = TEMPLATE_LEN_COMMON;
|
||||
|
||||
fpi_ssm_next_state (self->task_ssm);
|
||||
}
|
||||
|
||||
static void
|
||||
fp_update_template_cb (FpiDeviceRealtek *self,
|
||||
uint8_t *buffer_in,
|
||||
GError *error)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||
return;
|
||||
}
|
||||
|
||||
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_VERIFY_NUM_STATES);
|
||||
}
|
||||
|
||||
static void
|
||||
fp_enroll_commit_cb (FpiDeviceRealtek *self,
|
||||
uint8_t *buffer_in,
|
||||
GError *error)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||
return;
|
||||
}
|
||||
|
||||
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_ENROLL_NUM_STATES);
|
||||
}
|
||||
|
||||
static void
|
||||
fp_finish_capture_cb (FpiDeviceRealtek *self,
|
||||
uint8_t *buffer_in,
|
||||
@@ -103,8 +148,17 @@ fp_finish_capture_cb (FpiDeviceRealtek *self,
|
||||
return;
|
||||
}
|
||||
|
||||
gint capture_status = buffer_in[0];
|
||||
/* We hope this polling CMD can be completed before the action is cancelled */
|
||||
GCancellable *cancellable = fpi_device_get_cancellable (FP_DEVICE (self));
|
||||
if (g_cancellable_is_cancelled (cancellable))
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm,
|
||||
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
|
||||
"Action is cancelled!"));
|
||||
return;
|
||||
}
|
||||
|
||||
gint capture_status = buffer_in[0];
|
||||
if (capture_status == 0)
|
||||
{
|
||||
fpi_device_report_finger_status_changes (FP_DEVICE (self),
|
||||
@@ -238,7 +292,6 @@ fp_identify_feature_cb (FpiDeviceRealtek *self,
|
||||
}
|
||||
|
||||
gint in_status = buffer_in[0];
|
||||
|
||||
if (in_status == FP_RTK_CMD_ERR)
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm,
|
||||
@@ -291,7 +344,7 @@ fp_identify_feature_cb (FpiDeviceRealtek *self,
|
||||
else
|
||||
{
|
||||
fpi_device_identify_report (device, print, match, error);
|
||||
fpi_ssm_mark_completed (self->task_ssm);
|
||||
fpi_ssm_jump_to_state (self->task_ssm, FP_RTK_VERIFY_NUM_STATES);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -340,9 +393,9 @@ fp_get_delete_pos_cb (FpiDeviceRealtek *self,
|
||||
|
||||
for (gint i = 0; i < self->template_num; i++)
|
||||
{
|
||||
if (buffer_in[i * TEMPLATE_LEN] != 0)
|
||||
if (buffer_in[i * self->template_len] != 0)
|
||||
{
|
||||
memcpy (temp_userid, buffer_in + i * TEMPLATE_LEN + UID_OFFSET, DEFAULT_UID_LEN);
|
||||
memcpy (temp_userid, buffer_in + i * self->template_len + UID_OFFSET, DEFAULT_UID_LEN);
|
||||
if (g_strcmp0 (fp_print_get_description (print), (const char *) temp_userid) == 0)
|
||||
{
|
||||
self->pos_index = i;
|
||||
@@ -380,10 +433,25 @@ fp_get_enroll_num_cb (FpiDeviceRealtek *self,
|
||||
}
|
||||
|
||||
static void
|
||||
fp_get_template_cb (FpiDeviceRealtek *self,
|
||||
uint8_t *buffer_in,
|
||||
GError *error)
|
||||
fp_verify_get_template_cb (FpiDeviceRealtek *self,
|
||||
uint8_t *buffer_in,
|
||||
GError *error)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm, error);
|
||||
return;
|
||||
}
|
||||
|
||||
fpi_ssm_next_state (self->task_ssm);
|
||||
}
|
||||
|
||||
static void
|
||||
fp_enroll_get_template_cb (FpiDeviceRealtek *self,
|
||||
uint8_t *buffer_in,
|
||||
GError *error)
|
||||
{
|
||||
g_autofree guchar *seq_list = NULL;
|
||||
gboolean found = FALSE;
|
||||
|
||||
if (error)
|
||||
@@ -394,7 +462,7 @@ fp_get_template_cb (FpiDeviceRealtek *self,
|
||||
|
||||
for (gint i = 0; i < self->template_num; i++)
|
||||
{
|
||||
if (buffer_in[i * TEMPLATE_LEN] == 0)
|
||||
if (buffer_in[i * self->template_len] == 0)
|
||||
{
|
||||
self->pos_index = i;
|
||||
found = TRUE;
|
||||
@@ -425,7 +493,6 @@ fp_check_duplicate_cb (FpiDeviceRealtek *self,
|
||||
}
|
||||
|
||||
gint in_status = buffer_in[0];
|
||||
|
||||
if (in_status == FP_RTK_CMD_ERR)
|
||||
{
|
||||
fpi_ssm_mark_failed (self->task_ssm,
|
||||
@@ -471,10 +538,10 @@ fp_list_cb (FpiDeviceRealtek *self,
|
||||
|
||||
for (gint i = 0; i < self->template_num; i++)
|
||||
{
|
||||
if (buffer_in[i * TEMPLATE_LEN] != 0)
|
||||
if (buffer_in[i * self->template_len] != 0)
|
||||
{
|
||||
FpPrint *print = NULL;
|
||||
print = fp_print_from_data (self, buffer_in + i * TEMPLATE_LEN + SUBFACTOR_OFFSET);
|
||||
print = fp_print_from_data (self, buffer_in + i * self->template_len + SUBFACTOR_OFFSET);
|
||||
g_ptr_array_add (list_result, g_object_ref_sink (print));
|
||||
found = TRUE;
|
||||
}
|
||||
@@ -518,11 +585,11 @@ parse_status (guint8 *buffer, gint status_type)
|
||||
{
|
||||
switch (status_type)
|
||||
{
|
||||
case FP_RTK_MSG_PLAINTEXT_NO_STATUS:
|
||||
case FP_RTK_MSG_NO_STATUS:
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case FP_RTK_MSG_PLAINTEXT:
|
||||
case FP_RTK_MSG_DEFAULT:
|
||||
return buffer[0];
|
||||
break;
|
||||
|
||||
@@ -621,13 +688,13 @@ fp_cmd_run_state (FpiSsm *ssm, FpDevice *dev)
|
||||
break;
|
||||
|
||||
case FP_RTK_CMD_TRANS_DATA:
|
||||
if (self->cmd_type == FP_RTK_CMD_ONLY)
|
||||
if (self->cmd_type == FP_RTK_CMD_BULK_ONLY)
|
||||
{
|
||||
fpi_ssm_jump_to_state (ssm, FP_RTK_CMD_GET_STATUS);
|
||||
break;
|
||||
}
|
||||
|
||||
if (self->cmd_type == FP_RTK_CMD_WRITE)
|
||||
if (self->cmd_type == FP_RTK_CMD_BULK_WRITE)
|
||||
{
|
||||
if (self->data_transfer)
|
||||
{
|
||||
@@ -688,10 +755,10 @@ fp_cmd_ssm_done (FpiSsm *ssm, FpDevice *dev, GError *error)
|
||||
}
|
||||
|
||||
static FpiUsbTransfer *
|
||||
prepare_transfer (FpDevice *dev,
|
||||
guint8 *data,
|
||||
gsize data_len,
|
||||
GDestroyNotify free_func)
|
||||
prepare_bulk_transfer (FpDevice *dev,
|
||||
guint8 *data,
|
||||
gsize data_len,
|
||||
GDestroyNotify free_func)
|
||||
{
|
||||
g_autoptr(FpiUsbTransfer) transfer = NULL;
|
||||
|
||||
@@ -708,29 +775,100 @@ prepare_transfer (FpDevice *dev,
|
||||
return g_steal_pointer (&transfer);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
realtek_sensor_cmd (FpiDeviceRealtek *self,
|
||||
guint8 *cmd,
|
||||
guint8 *trans_data,
|
||||
FpRtkMsgType message_type,
|
||||
gboolean bwait_data_delay,
|
||||
SynCmdMsgCallback callback)
|
||||
fp_ctrl_cmd_cb (FpiUsbTransfer *transfer,
|
||||
FpDevice *device,
|
||||
gpointer user_data,
|
||||
GError *error)
|
||||
{
|
||||
FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device);
|
||||
g_autofree CommandData *data = g_steal_pointer (&user_data);
|
||||
|
||||
g_return_if_fail (data != NULL);
|
||||
|
||||
if (error)
|
||||
{
|
||||
fpi_ssm_mark_failed (transfer->ssm, error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (transfer->direction == G_USB_DEVICE_DIRECTION_HOST_TO_DEVICE)
|
||||
{
|
||||
if (data->callback)
|
||||
data->callback (self, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (transfer->actual_length == 0)
|
||||
{
|
||||
fp_info ("Control transfer receive data failed!");
|
||||
fpi_ssm_mark_failed (transfer->ssm,
|
||||
fpi_device_error_new (FP_DEVICE_ERROR_DATA_INVALID));
|
||||
return;
|
||||
}
|
||||
|
||||
if (data->callback)
|
||||
data->callback (self, transfer->buffer, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
rtk_send_ctrl_cmd (FpiDeviceRealtek *self,
|
||||
struct rtk_cmd_ctrl *ctrl_cmd,
|
||||
guint8 *cmd_data,
|
||||
SynCmdMsgCallback callback)
|
||||
{
|
||||
FpiUsbTransfer *transfer = NULL;
|
||||
g_autofree CommandData *data = g_new0 (CommandData, 1);
|
||||
|
||||
data->callback = callback;
|
||||
|
||||
transfer = fpi_usb_transfer_new (FP_DEVICE (self));
|
||||
fpi_usb_transfer_fill_control (transfer,
|
||||
ctrl_cmd->direction,
|
||||
G_USB_DEVICE_REQUEST_TYPE_VENDOR,
|
||||
G_USB_DEVICE_RECIPIENT_DEVICE,
|
||||
ctrl_cmd->request,
|
||||
ctrl_cmd->value,
|
||||
ctrl_cmd->index,
|
||||
ctrl_cmd->len);
|
||||
|
||||
transfer->ssm = self->task_ssm;
|
||||
if (ctrl_cmd->direction == G_USB_DEVICE_DIRECTION_DEVICE_TO_HOST &&
|
||||
cmd_data != NULL && ctrl_cmd->len != 0)
|
||||
memcpy (transfer->buffer, cmd_data, ctrl_cmd->len);
|
||||
|
||||
fpi_usb_transfer_submit (transfer,
|
||||
CMD_TIMEOUT,
|
||||
NULL,
|
||||
fp_ctrl_cmd_cb,
|
||||
g_steal_pointer (&data));
|
||||
}
|
||||
|
||||
static void
|
||||
rtk_sensor_bulk_cmd (FpiDeviceRealtek *self,
|
||||
guint8 *cmd,
|
||||
guint8 *trans_data,
|
||||
FpRtkMsgType message_type,
|
||||
gboolean bwait_data_delay,
|
||||
SynCmdMsgCallback callback)
|
||||
{
|
||||
g_autoptr(FpiUsbTransfer) cmd_transfer = NULL;
|
||||
g_autoptr(FpiUsbTransfer) data_transfer = NULL;
|
||||
CommandData *data = g_new0 (CommandData, 1);
|
||||
|
||||
self->cmd_type = GET_CMD_TYPE (cmd[0]);
|
||||
self->cmd_type = GET_BULK_CMD_TYPE (cmd[0]);
|
||||
self->message_type = message_type;
|
||||
self->trans_data_len = GET_TRANS_DATA_LEN (cmd[11], cmd[10]);
|
||||
self->cmd_cancellable = bwait_data_delay;
|
||||
|
||||
cmd_transfer = prepare_transfer (FP_DEVICE (self), cmd, FP_RTK_CMD_TOTAL_LEN, NULL);
|
||||
cmd_transfer = prepare_bulk_transfer (FP_DEVICE (self), cmd, FP_RTK_CMD_BULK_TOTAL_LEN, NULL);
|
||||
self->cmd_transfer = g_steal_pointer (&cmd_transfer);
|
||||
|
||||
if ((self->cmd_type == FP_RTK_CMD_WRITE) && trans_data)
|
||||
if ((self->cmd_type == FP_RTK_CMD_BULK_WRITE) && trans_data)
|
||||
{
|
||||
data_transfer = prepare_transfer (FP_DEVICE (self), trans_data, self->trans_data_len, g_free);
|
||||
data_transfer = prepare_bulk_transfer (FP_DEVICE (self), trans_data, self->trans_data_len, g_free);
|
||||
self->data_transfer = g_steal_pointer (&data_transfer);
|
||||
}
|
||||
|
||||
@@ -829,34 +967,49 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
||||
|
||||
switch (fpi_ssm_get_cur_state (ssm))
|
||||
{
|
||||
case FP_RTK_VERIFY_GET_TEMPLATE:
|
||||
g_assert (self->template_num > 0);
|
||||
|
||||
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||
cmd_buf = (guint8 *) &co_get_template;
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_verify_get_template_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_VERIFY_CAPTURE:
|
||||
fpi_device_report_finger_status_changes (device,
|
||||
FP_FINGER_STATUS_NEEDED,
|
||||
FP_FINGER_STATUS_NONE);
|
||||
|
||||
cmd_buf = (guint8 *) &co_start_capture;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_task_ssm_generic_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_VERIFY_FINISH_CAPTURE:
|
||||
cmd_buf = (guint8 *) &co_finish_capture;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_finish_capture_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_finish_capture_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_VERIFY_ACCEPT_SAMPLE:
|
||||
co_accept_sample.param[0] = self->fp_purpose;
|
||||
cmd_buf = (guint8 *) &co_accept_sample;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_accept_sample_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_accept_sample_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_VERIFY_INDENTIFY_FEATURE:
|
||||
cmd_buf = (guint8 *) &tls_identify_feature;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 0, fp_identify_feature_cb);
|
||||
cmd_buf = (guint8 *) &nor_identify_feature;
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_identify_feature_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_VERIFY_UPDATE_TEMPLATE:
|
||||
cmd_buf = (guint8 *) &co_update_template;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_update_template_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_VERIFY_CANCEL_CAPTURE:
|
||||
co_cancel_capture.param[0] = self->fp_purpose;
|
||||
cmd_buf = (guint8 *) &co_cancel_capture;
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -869,7 +1022,6 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
||||
FpiDeviceRealtek *self = FPI_DEVICE_REALTEK (device);
|
||||
FpPrint *print = NULL;
|
||||
guint8 *cmd_buf = NULL;
|
||||
guint8 *trans_id = NULL;
|
||||
GVariant *uid = NULL;
|
||||
GVariant *data = NULL;
|
||||
gsize user_id_len;
|
||||
@@ -880,17 +1032,17 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
||||
case FP_RTK_ENROLL_GET_TEMPLATE:
|
||||
g_assert (self->template_num > 0);
|
||||
|
||||
co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
|
||||
co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
|
||||
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||
|
||||
cmd_buf = (guint8 *) &co_get_template;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_template_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_enroll_get_template_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_ENROLL_BEGIN_POS:
|
||||
tls_enroll_begin.param[0] = self->pos_index;
|
||||
cmd_buf = (guint8 *) &tls_enroll_begin;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
||||
nor_enroll_begin.param[0] = self->pos_index;
|
||||
cmd_buf = (guint8 *) &nor_enroll_begin;
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_ENROLL_CAPTURE:
|
||||
@@ -899,32 +1051,37 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
||||
FP_FINGER_STATUS_NONE);
|
||||
|
||||
cmd_buf = (guint8 *) &co_start_capture;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_task_ssm_generic_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_ENROLL_FINISH_CAPTURE:
|
||||
cmd_buf = (guint8 *) &co_finish_capture;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_finish_capture_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_finish_capture_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_ENROLL_ACCEPT_SAMPLE:
|
||||
co_accept_sample.param[0] = self->fp_purpose;
|
||||
cmd_buf = (guint8 *) &co_accept_sample;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_accept_sample_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_accept_sample_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_ENROLL_CHECK_DUPLICATE:
|
||||
cmd_buf = (guint8 *) &co_check_duplicate;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT_NO_STATUS, 1, fp_check_duplicate_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_NO_STATUS, 0, fp_check_duplicate_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_ENROLL_COMMIT:
|
||||
guint8 *trans_id = NULL;
|
||||
gint payload_len;
|
||||
|
||||
payload_len = UID_PAYLOAD_LEN_DEFAULT;
|
||||
|
||||
fpi_device_get_enroll_data (device, &print);
|
||||
user_id = fpi_print_generate_user_id (print);
|
||||
user_id_len = strlen (user_id);
|
||||
user_id_len = MIN (DEFAULT_UID_LEN, user_id_len);
|
||||
|
||||
payload = g_malloc0 (UID_PAYLOAD_LEN);
|
||||
payload = g_malloc0 (payload_len);
|
||||
memcpy (payload, user_id, user_id_len);
|
||||
|
||||
trans_id = g_steal_pointer (&payload);
|
||||
@@ -945,10 +1102,18 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
||||
|
||||
g_debug ("user_id: %s, finger: 0x%x", user_id, finger);
|
||||
|
||||
tls_enroll_commit.param[0] = SUB_FINGER_01;
|
||||
cmd_buf = (guint8 *) &tls_enroll_commit;
|
||||
realtek_sensor_cmd (self, cmd_buf, trans_id, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
||||
nor_enroll_commit.param[0] = SUB_FINGER_01;
|
||||
nor_enroll_commit.data_len[0] = GET_LEN_L (payload_len);
|
||||
nor_enroll_commit.data_len[1] = GET_LEN_H (payload_len);
|
||||
|
||||
cmd_buf = (guint8 *) &nor_enroll_commit;
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, trans_id, FP_RTK_MSG_DEFAULT, 1, fp_enroll_commit_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_ENROLL_CANCEL_CAPTURE:
|
||||
co_cancel_capture.param[0] = self->fp_purpose;
|
||||
cmd_buf = (guint8 *) &co_cancel_capture;
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -960,15 +1125,19 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
||||
|
||||
switch (fpi_ssm_get_cur_state (ssm))
|
||||
{
|
||||
case FP_RTK_INIT_GET_DEVICE_INFO:
|
||||
rtk_send_ctrl_cmd (self, &get_device_info, NULL, fp_get_device_info_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_INIT_SELECT_OS:
|
||||
co_select_system.param[0] = 0x01;
|
||||
cmd_buf = (guint8 *) &co_select_system;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_INIT_GET_ENROLL_NUM:
|
||||
cmd_buf = (guint8 *) &co_get_enroll_num;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_enroll_num_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_get_enroll_num_cb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -984,17 +1153,17 @@ fp_delete_sm_run_state (FpiSsm *ssm, FpDevice *device)
|
||||
case FP_RTK_DELETE_GET_POS:
|
||||
g_assert (self->template_num > 0);
|
||||
|
||||
co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
|
||||
co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
|
||||
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||
|
||||
cmd_buf = (guint8 *) &co_get_template;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_get_delete_pos_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_get_delete_pos_cb);
|
||||
break;
|
||||
|
||||
case FP_RTK_DELETE_PRINT:
|
||||
co_delete_record.param[0] = self->pos_index;
|
||||
cmd_buf = (guint8 *) &co_delete_record;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_task_ssm_generic_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_task_ssm_generic_cb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1012,17 +1181,14 @@ identify_verify (FpDevice *device)
|
||||
g_assert (current_action == FPI_DEVICE_ACTION_VERIFY ||
|
||||
current_action == FPI_DEVICE_ACTION_IDENTIFY);
|
||||
|
||||
if (current_action == FPI_DEVICE_ACTION_IDENTIFY)
|
||||
self->fp_purpose = FP_RTK_PURPOSE_IDENTIFY;
|
||||
else
|
||||
self->fp_purpose = FP_RTK_PURPOSE_VERIFY;
|
||||
self->fp_purpose = FP_RTK_PURPOSE_IDENTIFY;
|
||||
|
||||
g_assert (!self->task_ssm);
|
||||
|
||||
self->task_ssm = fpi_ssm_new_full (device,
|
||||
fp_verify_sm_run_state,
|
||||
FP_RTK_VERIFY_NUM_STATES,
|
||||
FP_RTK_VERIFY_NUM_STATES,
|
||||
FP_RTK_VERIFY_CANCEL_CAPTURE,
|
||||
"Verify & Identify");
|
||||
|
||||
fpi_ssm_start (self->task_ssm, fp_verify_ssm_done);
|
||||
@@ -1042,7 +1208,7 @@ enroll (FpDevice *device)
|
||||
self->task_ssm = fpi_ssm_new_full (device,
|
||||
fp_enroll_sm_run_state,
|
||||
FP_RTK_ENROLL_NUM_STATES,
|
||||
FP_RTK_ENROLL_NUM_STATES,
|
||||
FP_RTK_ENROLL_CANCEL_CAPTURE,
|
||||
"Enroll");
|
||||
|
||||
fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done);
|
||||
@@ -1167,7 +1333,7 @@ clear_storage (FpDevice *device)
|
||||
G_DEBUG_HERE ();
|
||||
co_delete_record.param[0] = 0xff;
|
||||
cmd_buf = (guint8 *) &co_delete_record;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 0, fp_clear_storage_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 0, fp_clear_storage_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1179,11 +1345,11 @@ list_print (FpDevice *device)
|
||||
G_DEBUG_HERE ();
|
||||
g_assert (self->template_num > 0);
|
||||
|
||||
co_get_template.data_len[0] = GET_LEN_L (TEMPLATE_LEN * self->template_num);
|
||||
co_get_template.data_len[1] = GET_LEN_H (TEMPLATE_LEN * self->template_num);
|
||||
co_get_template.data_len[0] = GET_LEN_L (self->template_len * self->template_num);
|
||||
co_get_template.data_len[1] = GET_LEN_H (self->template_len * self->template_num);
|
||||
|
||||
cmd_buf = (guint8 *) &co_get_template;
|
||||
realtek_sensor_cmd (self, cmd_buf, NULL, FP_RTK_MSG_PLAINTEXT, 1, fp_list_cb);
|
||||
rtk_sensor_bulk_cmd (self, cmd_buf, NULL, FP_RTK_MSG_DEFAULT, 1, fp_list_cb);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -30,16 +30,17 @@
|
||||
|
||||
#define EP_IN_MAX_BUF_SIZE 2048
|
||||
|
||||
#define FP_RTK_CMD_TOTAL_LEN 12
|
||||
#define FP_RTK_CMD_LEN 2
|
||||
#define FP_RTK_CMD_PARAM_LEN 4
|
||||
#define FP_RTK_CMD_ADDR_LEN 4
|
||||
#define FP_RTK_CMD_DATA_LEN 2
|
||||
#define FP_RTK_CMD_BULK_TOTAL_LEN 12
|
||||
#define FP_RTK_CMD_BULK_LEN 2
|
||||
#define FP_RTK_CMD_BULK_PARAM_LEN 4
|
||||
#define FP_RTK_CMD_BULK_ADDR_LEN 4
|
||||
#define FP_RTK_CMD_BULK_DATA_LEN 2
|
||||
|
||||
#define TEMPLATE_LEN_COMMON 35
|
||||
|
||||
#define TEMPLATE_LEN 35
|
||||
#define SUBFACTOR_OFFSET 2
|
||||
#define UID_OFFSET 3
|
||||
#define UID_PAYLOAD_LEN 32
|
||||
#define UID_PAYLOAD_LEN_DEFAULT 32
|
||||
|
||||
/* Command transfer timeout :ms*/
|
||||
#define CMD_TIMEOUT 1000
|
||||
@@ -50,7 +51,7 @@
|
||||
#define DEFAULT_UID_LEN 28
|
||||
#define SUB_FINGER_01 0xFF
|
||||
|
||||
#define GET_CMD_TYPE(val) ((val & 0xC0) >> 6)
|
||||
#define GET_BULK_CMD_TYPE(val) ((val & 0xC0) >> 6)
|
||||
#define GET_TRANS_DATA_LEN(len_h, len_l) ((len_h << 8) | len_l)
|
||||
#define GET_LEN_L(total_data_len) ((total_data_len) & 0xff)
|
||||
#define GET_LEN_H(total_data_len) ((total_data_len) >> 8)
|
||||
@@ -67,19 +68,19 @@ typedef struct
|
||||
} CommandData;
|
||||
|
||||
typedef enum {
|
||||
FP_RTK_CMD_ONLY = 0,
|
||||
FP_RTK_CMD_READ,
|
||||
FP_RTK_CMD_WRITE,
|
||||
FP_RTK_CMD_BULK_ONLY = 0,
|
||||
FP_RTK_CMD_BULK_READ,
|
||||
FP_RTK_CMD_BULK_WRITE,
|
||||
} FpRtkCmdType;
|
||||
|
||||
typedef enum {
|
||||
FP_RTK_MSG_PLAINTEXT = 0,
|
||||
FP_RTK_MSG_PLAINTEXT_NO_STATUS,
|
||||
FP_RTK_MSG_DEFAULT = 0,
|
||||
FP_RTK_MSG_NO_STATUS,
|
||||
} FpRtkMsgType;
|
||||
|
||||
typedef enum {
|
||||
FP_RTK_PURPOSE_IDENTIFY = 0x01, /* identify before enroll */
|
||||
FP_RTK_PURPOSE_VERIFY = 0x02,
|
||||
FP_RTK_PURPOSE_VERIFY = 0x01,
|
||||
FP_RTK_PURPOSE_IDENTIFY = 0x02,
|
||||
FP_RTK_PURPOSE_ENROLL = 0x04,
|
||||
} FpRtkPurpose;
|
||||
|
||||
@@ -107,15 +108,18 @@ typedef enum {
|
||||
FP_RTK_ENROLL_ACCEPT_SAMPLE,
|
||||
FP_RTK_ENROLL_CHECK_DUPLICATE,
|
||||
FP_RTK_ENROLL_COMMIT,
|
||||
FP_RTK_ENROLL_CANCEL_CAPTURE,
|
||||
FP_RTK_ENROLL_NUM_STATES,
|
||||
} FpRtkEnrollState;
|
||||
|
||||
typedef enum {
|
||||
FP_RTK_VERIFY_CAPTURE = 0,
|
||||
FP_RTK_VERIFY_GET_TEMPLATE = 0,
|
||||
FP_RTK_VERIFY_CAPTURE,
|
||||
FP_RTK_VERIFY_FINISH_CAPTURE,
|
||||
FP_RTK_VERIFY_ACCEPT_SAMPLE,
|
||||
FP_RTK_VERIFY_INDENTIFY_FEATURE,
|
||||
FP_RTK_VERIFY_UPDATE_TEMPLATE,
|
||||
FP_RTK_VERIFY_CANCEL_CAPTURE,
|
||||
FP_RTK_VERIFY_NUM_STATES,
|
||||
} FpRtkVerifyState;
|
||||
|
||||
@@ -126,7 +130,8 @@ typedef enum {
|
||||
} FpRtkDeleteState;
|
||||
|
||||
typedef enum {
|
||||
FP_RTK_INIT_SELECT_OS = 0,
|
||||
FP_RTK_INIT_GET_DEVICE_INFO = 0,
|
||||
FP_RTK_INIT_SELECT_OS,
|
||||
FP_RTK_INIT_GET_ENROLL_NUM,
|
||||
FP_RTK_INIT_NUM_STATES,
|
||||
} FpRtkInitState;
|
||||
@@ -155,66 +160,87 @@ struct _FpiDeviceRealtek
|
||||
FpRtkPurpose fp_purpose;
|
||||
gint pos_index;
|
||||
gint template_num;
|
||||
gint template_len;
|
||||
};
|
||||
|
||||
struct realtek_fp_cmd
|
||||
struct rtk_cmd_bulk
|
||||
{
|
||||
uint8_t cmd[FP_RTK_CMD_LEN];
|
||||
uint8_t param[FP_RTK_CMD_PARAM_LEN];
|
||||
uint8_t addr[FP_RTK_CMD_ADDR_LEN];
|
||||
uint8_t data_len[FP_RTK_CMD_DATA_LEN];
|
||||
uint8_t cmd[FP_RTK_CMD_BULK_LEN];
|
||||
uint8_t param[FP_RTK_CMD_BULK_PARAM_LEN];
|
||||
uint8_t addr[FP_RTK_CMD_BULK_ADDR_LEN];
|
||||
uint8_t data_len[FP_RTK_CMD_BULK_DATA_LEN];
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_start_capture = {
|
||||
struct rtk_cmd_ctrl
|
||||
{
|
||||
int direction;
|
||||
uint8_t request;
|
||||
uint16_t value;
|
||||
uint16_t index;
|
||||
uint16_t len;
|
||||
};
|
||||
|
||||
static struct rtk_cmd_ctrl get_device_info = {
|
||||
.direction = G_USB_DEVICE_DIRECTION_DEVICE_TO_HOST,
|
||||
.request = 0x07,
|
||||
.value = 0x000D,
|
||||
.index = 0x0000,
|
||||
.len = 0x0008,
|
||||
};
|
||||
|
||||
static struct rtk_cmd_bulk co_start_capture = {
|
||||
.cmd = {0x05, 0x05},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_finish_capture = {
|
||||
static struct rtk_cmd_bulk co_finish_capture = {
|
||||
.cmd = {0x45, 0x06},
|
||||
.data_len = {0x05},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_accept_sample = {
|
||||
static struct rtk_cmd_bulk co_accept_sample = {
|
||||
.cmd = {0x45, 0x08},
|
||||
.data_len = {0x09},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd tls_identify_feature = {
|
||||
static struct rtk_cmd_bulk nor_identify_feature = {
|
||||
.cmd = {0x45, 0x22},
|
||||
.data_len = {0x2A},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_get_enroll_num = {
|
||||
static struct rtk_cmd_bulk co_get_enroll_num = {
|
||||
.cmd = {0x45, 0x0d},
|
||||
.data_len = {0x02},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_get_template = {
|
||||
static struct rtk_cmd_bulk co_get_template = {
|
||||
.cmd = {0x45, 0x0E},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd tls_enroll_begin = {
|
||||
static struct rtk_cmd_bulk nor_enroll_begin = {
|
||||
.cmd = {0x05, 0x20},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_check_duplicate = {
|
||||
static struct rtk_cmd_bulk co_check_duplicate = {
|
||||
.cmd = {0x45, 0x10},
|
||||
.data_len = {0x22},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd tls_enroll_commit = {
|
||||
static struct rtk_cmd_bulk nor_enroll_commit = {
|
||||
.cmd = {0x85, 0x21},
|
||||
.data_len = {0x20},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_update_template = {
|
||||
static struct rtk_cmd_bulk co_update_template = {
|
||||
.cmd = {0x05, 0x11},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_delete_record = {
|
||||
static struct rtk_cmd_bulk co_delete_record = {
|
||||
.cmd = {0x05, 0x0F},
|
||||
};
|
||||
|
||||
static struct realtek_fp_cmd co_select_system = {
|
||||
static struct rtk_cmd_bulk co_select_system = {
|
||||
.cmd = {0x05, 0x13},
|
||||
};
|
||||
|
||||
static struct rtk_cmd_bulk co_cancel_capture = {
|
||||
.cmd = {0x05, 0x07},
|
||||
};
|
||||
@@ -56,7 +56,8 @@ drivers_tests = [
|
||||
'egismoc-0586',
|
||||
'egismoc-0587',
|
||||
'fpcmoc',
|
||||
'realtek',
|
||||
'realtek',
|
||||
'realtek-5816',
|
||||
'focaltech_moc',
|
||||
]
|
||||
|
||||
|
||||
BIN
tests/realtek-5816/custom.pcapng
Normal file
BIN
tests/realtek-5816/custom.pcapng
Normal file
Binary file not shown.
110
tests/realtek-5816/custom.py
Executable file
110
tests/realtek-5816/custom.py
Executable file
@@ -0,0 +1,110 @@
|
||||
#!/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() == "realtek"
|
||||
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()
|
||||
|
||||
# 1. verify clear storage command, 2. make sure later asserts are good
|
||||
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
|
||||
try:
|
||||
identify_match, identify_print = dev.identify_finish(res)
|
||||
except gi.repository.GLib.GError as e:
|
||||
print("Please try again")
|
||||
else:
|
||||
print('indentification_done: ', identify_match, identify_print)
|
||||
assert identify_match.equal(identify_print)
|
||||
|
||||
def start_identify_async(prints):
|
||||
global identified
|
||||
print('async identifying')
|
||||
d.identify(prints, callback=identify_done)
|
||||
del prints
|
||||
|
||||
while not identified:
|
||||
ctx.iteration(True)
|
||||
|
||||
identified = False
|
||||
|
||||
# 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")
|
||||
try:
|
||||
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||
verify_res, verify_print = d.verify_sync(p)
|
||||
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
||||
except gi.repository.GLib.GError as e:
|
||||
print("Please try again")
|
||||
else:
|
||||
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
|
||||
250
tests/realtek-5816/device
Normal file
250
tests/realtek-5816/device
Normal file
@@ -0,0 +1,250 @@
|
||||
P: /devices/pci0000:00/0000:00:14.0/usb1/1-6
|
||||
N: bus/usb/001/006=12010102EF020140DA0B165800000301020109022E00010104A0FA0904000004FF02000507050102000200070583034000080705840340000807058202000200
|
||||
E: DEVNAME=/dev/bus/usb/001/006
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: PRODUCT=bda/5816/0
|
||||
E: TYPE=239/2/1
|
||||
E: BUSNUM=001
|
||||
E: DEVNUM=006
|
||||
E: MAJOR=189
|
||||
E: MINOR=5
|
||||
E: SUBSYSTEM=usb
|
||||
E: ID_VENDOR=Generic
|
||||
E: ID_VENDOR_ENC=Generic
|
||||
E: ID_VENDOR_ID=0bda
|
||||
E: ID_MODEL=Realtek_USB2.0_Finger_Print_Bridge
|
||||
E: ID_MODEL_ENC=Realtek\x20USB2.0\x20Finger\x20Print\x20Bridge
|
||||
E: ID_MODEL_ID=5816
|
||||
E: ID_REVISION=0000
|
||||
E: ID_SERIAL=Generic_Realtek_USB2.0_Finger_Print_Bridge_201801010001
|
||||
E: ID_SERIAL_SHORT=201801010001
|
||||
E: ID_BUS=usb
|
||||
E: ID_USB_INTERFACES=:ff0200:
|
||||
E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Corp.
|
||||
E: ID_PATH=pci-0000:00:14.0-usb-0:6
|
||||
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_6
|
||||
A: authorized=1\n
|
||||
A: avoid_reset_quirk=0\n
|
||||
A: bConfigurationValue=1\n
|
||||
A: bDeviceClass=ef\n
|
||||
A: bDeviceProtocol=01\n
|
||||
A: bDeviceSubClass=02\n
|
||||
A: bMaxPacketSize0=64\n
|
||||
A: bMaxPower=500mA\n
|
||||
A: bNumConfigurations=1\n
|
||||
A: bNumInterfaces= 1\n
|
||||
A: bcdDevice=0000\n
|
||||
A: bmAttributes=a0\n
|
||||
A: busnum=1\n
|
||||
A: configuration=Realtek USB2.0 Finger Print Bridge\n
|
||||
H: descriptors=12010102EF020140DA0B165800000301020109022E00010104A0FA0904000004FF02000507050102000200070583034000080705840340000807058202000200
|
||||
A: dev=189:5\n
|
||||
A: devnum=6\n
|
||||
A: devpath=6\n
|
||||
L: driver=../../../../../bus/usb/drivers/usb
|
||||
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c/device:52
|
||||
A: idProduct=5816\n
|
||||
A: idVendor=0bda\n
|
||||
A: ltm_capable=no\n
|
||||
A: manufacturer=Generic\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=../1-0:1.0/usb1-port6
|
||||
A: power/active_duration=37699\n
|
||||
A: power/async=enabled\n
|
||||
A: power/autosuspend=2\n
|
||||
A: power/autosuspend_delay_ms=2000\n
|
||||
A: power/connected_duration=37699\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=37457\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=Realtek USB2.0 Finger Print Bridge\n
|
||||
A: quirks=0x0\n
|
||||
A: removable=removable\n
|
||||
A: rx_lanes=1\n
|
||||
A: serial=201801010001\n
|
||||
A: speed=480\n
|
||||
A: tx_lanes=1\n
|
||||
A: urbnum=22\n
|
||||
A: version= 2.01\n
|
||||
|
||||
P: /devices/pci0000:00/0000:00:14.0/usb1
|
||||
N: bus/usb/001/001=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
||||
E: DEVNAME=/dev/bus/usb/001/001
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: PRODUCT=1d6b/2/608
|
||||
E: TYPE=9/0/1
|
||||
E: BUSNUM=001
|
||||
E: DEVNUM=001
|
||||
E: MAJOR=189
|
||||
E: MINOR=0
|
||||
E: SUBSYSTEM=usb
|
||||
E: ID_VENDOR=Linux_6.8.0-40-generic_xhci-hcd
|
||||
E: ID_VENDOR_ENC=Linux\x206.8.0-40-generic\x20xhci-hcd
|
||||
E: ID_VENDOR_ID=1d6b
|
||||
E: ID_MODEL=xHCI_Host_Controller
|
||||
E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||
E: ID_MODEL_ID=0002
|
||||
E: ID_REVISION=0608
|
||||
E: ID_SERIAL=Linux_6.8.0-40-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||
E: ID_SERIAL_SHORT=0000:00:14.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=2.0 root hub
|
||||
E: ID_PATH=pci-0000:00:14.0
|
||||
E: ID_PATH_TAG=pci-0000_00_14_0
|
||||
E: ID_FOR_SEAT=usb-pci-0000_00_14_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=01\n
|
||||
A: bDeviceSubClass=00\n
|
||||
A: bMaxPacketSize0=64\n
|
||||
A: bMaxPower=0mA\n
|
||||
A: bNumConfigurations=1\n
|
||||
A: bNumInterfaces= 1\n
|
||||
A: bcdDevice=0608\n
|
||||
A: bmAttributes=e0\n
|
||||
A: busnum=1\n
|
||||
A: configuration=
|
||||
H: descriptors=12010002090001406B1D020008060302010109021900010100E0000904000001090000000705810304000C
|
||||
A: dev=189:0\n
|
||||
A: devnum=1\n
|
||||
A: devpath=0\n
|
||||
L: driver=../../../../bus/usb/drivers/usb
|
||||
L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c
|
||||
A: idProduct=0002\n
|
||||
A: idVendor=1d6b\n
|
||||
A: interface_authorized_default=1\n
|
||||
A: ltm_capable=no\n
|
||||
A: manufacturer=Linux 6.8.0-40-generic xhci-hcd\n
|
||||
A: maxchild=16\n
|
||||
A: power/active_duration=1096259\n
|
||||
A: power/async=enabled\n
|
||||
A: power/autosuspend=0\n
|
||||
A: power/autosuspend_delay_ms=0\n
|
||||
A: power/connected_duration=1096259\n
|
||||
A: power/control=auto\n
|
||||
A: power/level=auto\n
|
||||
A: power/runtime_active_kids=3\n
|
||||
A: power/runtime_active_time=1096256\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=229\n
|
||||
A: version= 2.00\n
|
||||
|
||||
P: /devices/pci0000:00/0000:00:14.0
|
||||
E: DRIVER=xhci_hcd
|
||||
E: PCI_CLASS=C0330
|
||||
E: PCI_ID=8086:A36D
|
||||
E: PCI_SUBSYS_ID=1028:085C
|
||||
E: PCI_SLOT_NAME=0000:00:14.0
|
||||
E: MODALIAS=pci:v00008086d0000A36Dsv00001028sd0000085Cbc0Csc03i30
|
||||
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=XHCI
|
||||
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
|
||||
E: ID_MODEL_FROM_DATABASE=Cannon Lake PCH USB 3.1 xHCI Host Controller
|
||||
A: ari_enabled=0\n
|
||||
A: broken_parity_status=0\n
|
||||
A: class=0x0c0330\n
|
||||
H: config=86806DA3060590021030030C00008000040030D200000000000000000000000000000000000000000000000028105C08000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F000000005B17C10300000000316000000000000000000000000000000180C2C10800000000000000000000000590B7001803E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000030000000C00000000000000C000000000000000000100003000000000000000030000000C0000000000000000000000000000000000000000000000000000000000000000000000B50F120112000000
|
||||
A: consistent_dma_mask_bits=64\n
|
||||
A: d3cold_allowed=1\n
|
||||
A: dbc=disabled\n
|
||||
A: dbc_bInterfaceProtocol=01\n
|
||||
A: dbc_bcdDevice=0010\n
|
||||
A: dbc_idProduct=0010\n
|
||||
A: dbc_idVendor=1d6b\n
|
||||
A: device=0xa36d\n
|
||||
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:4b
|
||||
A: index=4\n
|
||||
L: iommu=../../virtual/iommu/dmar1
|
||||
L: iommu_group=../../../kernel/iommu_groups/4
|
||||
A: irq=125\n
|
||||
A: label=Onboard - Other\n
|
||||
A: local_cpulist=0-3\n
|
||||
A: local_cpus=f\n
|
||||
A: modalias=pci:v00008086d0000A36Dsv00001028sd0000085Cbc0Csc03i30\n
|
||||
A: msi_bus=1\n
|
||||
A: msi_irqs/125=msi\n
|
||||
A: msi_irqs/126=msi\n
|
||||
A: msi_irqs/127=msi\n
|
||||
A: msi_irqs/128=msi\n
|
||||
A: msi_irqs/129=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 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 6 7 2112 7\nxHCI ring segments 25 25 4096 25\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 12 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=1096935\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=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=0x00000000d2300000 0x00000000d230ffff 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=0x10\n
|
||||
A: subsystem_device=0x085c\n
|
||||
A: subsystem_vendor=0x1028\n
|
||||
A: vendor=0x8086\n
|
||||
|
||||
Binary file not shown.
@@ -1,14 +1,14 @@
|
||||
P: /devices/pci0000:00/0000:00:14.0/usb1/1-4
|
||||
N: bus/usb/001/005=12010102EF020140DA0B135801210301020109022E00010104A0FA0904000004FF02000507050102000200070583031000080705840310000807058202000200
|
||||
E: DEVNAME=/dev/bus/usb/001/005
|
||||
P: /devices/pci0000:00/0000:00:14.0/usb1/1-8
|
||||
N: bus/usb/001/025=12010102EF020140DA0B135801210301020109022E00010104A0FA0904000004FF02000507050102000200070583031000080705840310000807058202000200
|
||||
E: DEVNAME=/dev/bus/usb/001/025
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: PRODUCT=bda/5813/2101
|
||||
E: TYPE=239/2/1
|
||||
E: BUSNUM=001
|
||||
E: DEVNUM=005
|
||||
E: DEVNUM=025
|
||||
E: MAJOR=189
|
||||
E: MINOR=4
|
||||
E: MINOR=24
|
||||
E: SUBSYSTEM=usb
|
||||
E: ID_VENDOR=Generic
|
||||
E: ID_VENDOR_ENC=Generic
|
||||
@@ -22,8 +22,8 @@ E: ID_SERIAL_SHORT=201801010001
|
||||
E: ID_BUS=usb
|
||||
E: ID_USB_INTERFACES=:ff0200:
|
||||
E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Corp.
|
||||
E: ID_PATH=pci-0000:00:14.0-usb-0:4
|
||||
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_4
|
||||
E: ID_PATH=pci-0000:00:14.0-usb-0:8
|
||||
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_8
|
||||
A: authorized=1\n
|
||||
A: avoid_reset_quirk=0\n
|
||||
A: bConfigurationValue=1\n
|
||||
@@ -39,11 +39,11 @@ A: bmAttributes=a0\n
|
||||
A: busnum=1\n
|
||||
A: configuration=Realtek USB2.0 Finger Print Bridge\n
|
||||
H: descriptors=12010102EF020140DA0B135801210301020109022E00010104A0FA0904000004FF02000507050102000200070583031000080705840310000807058202000200
|
||||
A: dev=189:4\n
|
||||
A: devnum=5\n
|
||||
A: devpath=4\n
|
||||
A: dev=189:24\n
|
||||
A: devnum=25\n
|
||||
A: devpath=8\n
|
||||
L: driver=../../../../../bus/usb/drivers/usb
|
||||
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c/device:50
|
||||
L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b/device:4c/device:54
|
||||
A: idProduct=5813\n
|
||||
A: idVendor=0bda\n
|
||||
A: ltm_capable=no\n
|
||||
@@ -54,21 +54,21 @@ 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=../1-0:1.0/usb1-port4
|
||||
A: power/active_duration=91232868\n
|
||||
L: port=../1-0:1.0/usb1-port8
|
||||
A: power/active_duration=271844\n
|
||||
A: power/async=enabled\n
|
||||
A: power/autosuspend=2\n
|
||||
A: power/autosuspend_delay_ms=2000\n
|
||||
A: power/connected_duration=91232868\n
|
||||
A: power/connected_duration=271844\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=91232594\n
|
||||
A: power/runtime_active_time=271564\n
|
||||
A: power/runtime_enabled=forbidden\n
|
||||
A: power/runtime_status=active\n
|
||||
A: power/runtime_suspended_time=0\n
|
||||
A: power/runtime_usage=7\n
|
||||
A: power/runtime_usage=1\n
|
||||
A: power/wakeup=disabled\n
|
||||
A: power/wakeup_abort_count=\n
|
||||
A: power/wakeup_active=\n
|
||||
@@ -85,29 +85,29 @@ A: rx_lanes=1\n
|
||||
A: serial=201801010001\n
|
||||
A: speed=480\n
|
||||
A: tx_lanes=1\n
|
||||
A: urbnum=15076313\n
|
||||
A: urbnum=297176\n
|
||||
A: version= 2.01\n
|
||||
|
||||
P: /devices/pci0000:00/0000:00:14.0/usb1
|
||||
N: bus/usb/001/001=12010002090001406B1D020002060302010109021900010100E0000904000001090000000705810304000C
|
||||
N: bus/usb/001/001=12010002090001406B1D020005060302010109021900010100E0000904000001090000000705810304000C
|
||||
E: DEVNAME=/dev/bus/usb/001/001
|
||||
E: DEVTYPE=usb_device
|
||||
E: DRIVER=usb
|
||||
E: PRODUCT=1d6b/2/602
|
||||
E: PRODUCT=1d6b/2/605
|
||||
E: TYPE=9/0/1
|
||||
E: BUSNUM=001
|
||||
E: DEVNUM=001
|
||||
E: MAJOR=189
|
||||
E: MINOR=0
|
||||
E: SUBSYSTEM=usb
|
||||
E: ID_VENDOR=Linux_6.2.0-35-generic_xhci-hcd
|
||||
E: ID_VENDOR_ENC=Linux\x206.2.0-35-generic\x20xhci-hcd
|
||||
E: ID_VENDOR=Linux_6.5.0-18-generic_xhci-hcd
|
||||
E: ID_VENDOR_ENC=Linux\x206.5.0-18-generic\x20xhci-hcd
|
||||
E: ID_VENDOR_ID=1d6b
|
||||
E: ID_MODEL=xHCI_Host_Controller
|
||||
E: ID_MODEL_ENC=xHCI\x20Host\x20Controller
|
||||
E: ID_MODEL_ID=0002
|
||||
E: ID_REVISION=0602
|
||||
E: ID_SERIAL=Linux_6.2.0-35-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||
E: ID_REVISION=0605
|
||||
E: ID_SERIAL=Linux_6.5.0-18-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0
|
||||
E: ID_SERIAL_SHORT=0000:00:14.0
|
||||
E: ID_BUS=usb
|
||||
E: ID_USB_INTERFACES=:090000:
|
||||
@@ -130,11 +130,11 @@ A: bMaxPacketSize0=64\n
|
||||
A: bMaxPower=0mA\n
|
||||
A: bNumConfigurations=1\n
|
||||
A: bNumInterfaces= 1\n
|
||||
A: bcdDevice=0602\n
|
||||
A: bcdDevice=0605\n
|
||||
A: bmAttributes=e0\n
|
||||
A: busnum=1\n
|
||||
A: configuration=
|
||||
H: descriptors=12010002090001406B1D020002060302010109021900010100E0000904000001090000000705810304000C
|
||||
H: descriptors=12010002090001406B1D020005060302010109021900010100E0000904000001090000000705810304000C
|
||||
A: dev=189:0\n
|
||||
A: devnum=1\n
|
||||
A: devpath=0\n
|
||||
@@ -144,17 +144,17 @@ A: idProduct=0002\n
|
||||
A: idVendor=1d6b\n
|
||||
A: interface_authorized_default=1\n
|
||||
A: ltm_capable=no\n
|
||||
A: manufacturer=Linux 6.2.0-35-generic xhci-hcd\n
|
||||
A: manufacturer=Linux 6.5.0-18-generic xhci-hcd\n
|
||||
A: maxchild=16\n
|
||||
A: power/active_duration=264747968\n
|
||||
A: power/active_duration=351477916\n
|
||||
A: power/async=enabled\n
|
||||
A: power/autosuspend=0\n
|
||||
A: power/autosuspend_delay_ms=0\n
|
||||
A: power/connected_duration=264747968\n
|
||||
A: power/connected_duration=351477916\n
|
||||
A: power/control=auto\n
|
||||
A: power/level=auto\n
|
||||
A: power/runtime_active_kids=3\n
|
||||
A: power/runtime_active_time=264747968\n
|
||||
A: power/runtime_active_time=351477912\n
|
||||
A: power/runtime_enabled=enabled\n
|
||||
A: power/runtime_status=active\n
|
||||
A: power/runtime_suspended_time=0\n
|
||||
@@ -175,7 +175,7 @@ A: rx_lanes=1\n
|
||||
A: serial=0000:00:14.0\n
|
||||
A: speed=480\n
|
||||
A: tx_lanes=1\n
|
||||
A: urbnum=3177\n
|
||||
A: urbnum=2135\n
|
||||
A: version= 2.00\n
|
||||
|
||||
P: /devices/pci0000:00/0000:00:14.0
|
||||
@@ -194,10 +194,14 @@ E: ID_MODEL_FROM_DATABASE=Cannon Lake PCH USB 3.1 xHCI Host Controller
|
||||
A: ari_enabled=0\n
|
||||
A: broken_parity_status=0\n
|
||||
A: class=0x0c0330\n
|
||||
H: config=86806DA3060590021030030C00008000040030D200000000000000000000000000000000000000000000000028105C08000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F000000005919041B00000000316000000000000000000000000000000180C2C108000000000000000000000005908700D802E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000030000000C00000000000000C000000000000000000100003000000000000000030000000C0000000000000000000000000000000000000000000000000000000000000000000000B50F120112000000
|
||||
H: config=86806DA3060590021030030C00008000040030D200000000000000000000000000000000000000000000000028105C08000000007000000000000000FF010000FD0134808FC6FF8300000000000000007F6DDC0F000000004505531F00000000316000000000000000000000000000000180C2C108000000000000000000000005908700D802E0FE0000000000000000090014F01000400100000000C10A080000080E00001800008F40020000010000030000000C00000000000000C000000000000000000100003000000000000000030000000C0000000000000000000000000000000000000000000000000000000000000000000000B50F120112000000
|
||||
A: consistent_dma_mask_bits=64\n
|
||||
A: d3cold_allowed=1\n
|
||||
A: dbc=disabled\n
|
||||
A: dbc_bInterfaceProtocol=01\n
|
||||
A: dbc_bcdDevice=0010\n
|
||||
A: dbc_idProduct=0010\n
|
||||
A: dbc_idVendor=1d6b\n
|
||||
A: device=0xa36d\n
|
||||
A: dma_mask_bits=64\n
|
||||
L: driver=../../../bus/pci/drivers/xhci_hcd
|
||||
@@ -205,19 +209,19 @@ A: driver_override=(null)\n
|
||||
A: enable=1\n
|
||||
L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4b
|
||||
A: index=4\n
|
||||
A: irq=125\n
|
||||
A: irq=126\n
|
||||
A: label=Onboard - Other\n
|
||||
A: local_cpulist=0-3\n
|
||||
A: local_cpus=f\n
|
||||
A: modalias=pci:v00008086d0000A36Dsv00001028sd0000085Cbc0Csc03i30\n
|
||||
A: msi_bus=1\n
|
||||
A: msi_irqs/125=msi\n
|
||||
A: msi_irqs/126=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 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 6 7 2112 7\nxHCI ring segments 24 24 4096 24\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 12 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=264748677\n
|
||||
A: power/runtime_active_time=351478612\n
|
||||
A: power/runtime_enabled=forbidden\n
|
||||
A: power/runtime_status=active\n
|
||||
A: power/runtime_suspended_time=0\n
|
||||
|
||||
Reference in New Issue
Block a user