Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mei: bus: add client protocol version to the device alias

The device alias now looks like mei:S:uuid:N:*
In that way we can bind different drivers to clients with
different protocol versions if required.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Tomas Winkler and committed by
Greg Kroah-Hartman
b26864ca 40b7320e

+30 -10
+21 -7
drivers/misc/mei/bus.c
··· 453 453 { 454 454 const struct mei_cl_device_id *id; 455 455 const uuid_le *uuid; 456 + u8 version; 457 + bool match; 456 458 457 459 uuid = mei_me_cl_uuid(cldev->me_cl); 460 + version = mei_me_cl_ver(cldev->me_cl); 458 461 459 462 id = cldrv->id_table; 460 463 while (uuid_le_cmp(NULL_UUID_LE, id->uuid)) { 461 464 if (!uuid_le_cmp(*uuid, id->uuid)) { 465 + match = true; 462 466 463 - if (!cldev->name[0]) 464 - return id; 467 + if (cldev->name[0]) 468 + if (strncmp(cldev->name, id->name, 469 + sizeof(id->name))) 470 + match = false; 465 471 466 - if (!strncmp(cldev->name, id->name, sizeof(id->name))) 472 + if (id->version != MEI_CL_VERSION_ANY) 473 + if (id->version != version) 474 + match = false; 475 + if (match) 467 476 return id; 468 477 } 469 478 ··· 656 647 if (add_uevent_var(env, "MEI_CL_NAME=%s", cldev->name)) 657 648 return -ENOMEM; 658 649 659 - if (add_uevent_var(env, "MODALIAS=mei:%s:%pUl:", cldev->name, uuid)) 650 + if (add_uevent_var(env, "MODALIAS=mei:%s:%pUl:%02X:", 651 + cldev->name, uuid, version)) 660 652 return -ENOMEM; 661 653 662 654 return 0; ··· 747 737 mei_cl_dev_fixup(cldev); 748 738 749 739 if (cldev->do_match) 750 - dev_set_name(&cldev->dev, "mei:%s:%pUl", 751 - cldev->name, mei_me_cl_uuid(cldev->me_cl)); 740 + dev_set_name(&cldev->dev, "mei:%s:%pUl:%02X", 741 + cldev->name, 742 + mei_me_cl_uuid(cldev->me_cl), 743 + mei_me_cl_ver(cldev->me_cl)); 752 744 753 745 return cldev->do_match == 1; 754 746 } ··· 766 754 { 767 755 int ret; 768 756 769 - dev_dbg(cldev->bus->dev, "adding %pUL\n", mei_me_cl_uuid(cldev->me_cl)); 757 + dev_dbg(cldev->bus->dev, "adding %pUL:%02X\n", 758 + mei_me_cl_uuid(cldev->me_cl), 759 + mei_me_cl_ver(cldev->me_cl)); 770 760 ret = device_add(&cldev->dev); 771 761 if (!ret) 772 762 cldev->is_added = 1;
+1 -1
drivers/nfc/microread/mei.c
··· 67 67 } 68 68 69 69 static struct mei_cl_device_id microread_mei_tbl[] = { 70 - { MICROREAD_DRIVER_NAME, MEI_NFC_UUID}, 70 + { MICROREAD_DRIVER_NAME, MEI_NFC_UUID, MEI_CL_VERSION_ANY}, 71 71 72 72 /* required last entry */ 73 73 { }
+1 -1
drivers/nfc/pn544/mei.c
··· 67 67 } 68 68 69 69 static struct mei_cl_device_id pn544_mei_tbl[] = { 70 - { PN544_DRIVER_NAME, MEI_NFC_UUID}, 70 + { PN544_DRIVER_NAME, MEI_NFC_UUID, MEI_CL_VERSION_ANY}, 71 71 72 72 /* required last entry */ 73 73 { }
+3
include/linux/mod_devicetable.h
··· 601 601 602 602 #define MEI_CL_MODULE_PREFIX "mei:" 603 603 #define MEI_CL_NAME_SIZE 32 604 + #define MEI_CL_VERSION_ANY 0xff 604 605 605 606 /** 606 607 * struct mei_cl_device_id - MEI client device identifier 607 608 * @name: helper name 608 609 * @uuid: client uuid 610 + * @version: client protocol version 609 611 * @driver_info: information used by the driver. 610 612 * 611 613 * identifies mei client device by uuid and name ··· 615 613 struct mei_cl_device_id { 616 614 char name[MEI_CL_NAME_SIZE]; 617 615 uuid_le uuid; 616 + __u8 version; 618 617 kernel_ulong_t driver_info; 619 618 }; 620 619
+1
scripts/mod/devicetable-offsets.c
··· 185 185 DEVID(mei_cl_device_id); 186 186 DEVID_FIELD(mei_cl_device_id, name); 187 187 DEVID_FIELD(mei_cl_device_id, uuid); 188 + DEVID_FIELD(mei_cl_device_id, version); 188 189 189 190 DEVID(rio_device_id); 190 191 DEVID_FIELD(rio_device_id, did);
+3 -1
scripts/mod/file2alias.c
··· 1202 1202 } 1203 1203 ADD_TO_DEVTABLE("cpu", cpu_feature, do_cpu_entry); 1204 1204 1205 - /* Looks like: mei:S:uuid */ 1205 + /* Looks like: mei:S:uuid:N:* */ 1206 1206 static int do_mei_entry(const char *filename, void *symval, 1207 1207 char *alias) 1208 1208 { 1209 1209 DEF_FIELD_ADDR(symval, mei_cl_device_id, name); 1210 1210 DEF_FIELD_ADDR(symval, mei_cl_device_id, uuid); 1211 + DEF_FIELD(symval, mei_cl_device_id, version); 1211 1212 1212 1213 sprintf(alias, MEI_CL_MODULE_PREFIX); 1213 1214 sprintf(alias + strlen(alias), "%s:", (*name)[0] ? *name : "*"); 1214 1215 add_uuid(alias, *uuid); 1216 + ADD(alias, ":", version != MEI_CL_VERSION_ANY, version); 1215 1217 1216 1218 strcat(alias, ":*"); 1217 1219