Lines Matching +full:device +full:- +full:version

1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2013-2023, Intel Corporation. All rights reserved.
10 #include <linux/device.h>
49 * number_of_connections - determine whether an client be on the bus
55 * @cldev: me clients device
59 if (cldev->me_cl->props.max_number_of_connections > 1) in number_of_connections()
60 cldev->do_match = 0; in number_of_connections()
64 * blacklist - blacklist a client from the bus
66 * @cldev: me clients device
70 cldev->do_match = 0; in blacklist()
74 * whitelist - forcefully whitelist client
76 * @cldev: me clients device
80 cldev->do_match = 1; in whitelist()
122 req->hdr.group_id = MKHI_FWCAPS_GROUP_ID; in mei_osver()
123 req->hdr.command = MKHI_FWCAPS_SET_OS_VER_APP_RULE_CMD; in mei_osver()
125 fwcaps = (struct mkhi_fwcaps *)req->data; in mei_osver()
127 fwcaps->id.rule_type = 0x0; in mei_osver()
128 fwcaps->id.feature_id = MKHI_FEATURE_PTT; in mei_osver()
129 fwcaps->len = sizeof(*os_ver); in mei_osver()
130 os_ver = (struct mei_os_ver *)fwcaps->data; in mei_osver()
131 os_ver->os_type = OSTYPE_LINUX; in mei_osver()
133 return __mei_cl_send_timeout(cldev->cl, buf, size, 0, mode, MKHI_SEND_MAX_TIMEOUT_MSEC); in mei_osver()
153 ret = __mei_cl_send_timeout(cldev->cl, (u8 *)&req, sizeof(req), 0, in mei_fwver()
156 dev_info(&cldev->dev, "Could not send ReqFWVersion cmd ret = %d\n", ret); in mei_fwver()
161 bytes_recv = __mei_cl_recv(cldev->cl, buf, sizeof(buf), NULL, 0, in mei_fwver()
162 cldev->bus->timeouts.mkhi_recv); in mei_fwver()
165 * Should be at least one version block, in mei_fwver()
168 dev_info(&cldev->dev, "Could not read FW version ret = %d\n", bytes_recv); in mei_fwver()
169 return -EIO; in mei_fwver()
173 fwver = (struct mkhi_fw_ver *)rsp->data; in mei_fwver()
174 memset(cldev->bus->fw_ver, 0, sizeof(cldev->bus->fw_ver)); in mei_fwver()
178 dev_dbg(&cldev->dev, "FW version%d %d:%d.%d.%d.%d\n", in mei_fwver()
179 i, fwver->ver[i].platform, in mei_fwver()
180 fwver->ver[i].major, fwver->ver[i].minor, in mei_fwver()
181 fwver->ver[i].hotfix, fwver->ver[i].buildno); in mei_fwver()
183 cldev->bus->fw_ver[i].platform = fwver->ver[i].platform; in mei_fwver()
184 cldev->bus->fw_ver[i].major = fwver->ver[i].major; in mei_fwver()
185 cldev->bus->fw_ver[i].minor = fwver->ver[i].minor; in mei_fwver()
186 cldev->bus->fw_ver[i].hotfix = fwver->ver[i].hotfix; in mei_fwver()
187 cldev->bus->fw_ver[i].buildno = fwver->ver[i].buildno; in mei_fwver()
189 cldev->bus->fw_ver_received = 1; in mei_fwver()
205 dev_dbg(&cldev->dev, "Sending memory ready command\n"); in mei_gfx_memory_ready()
206 return __mei_cl_send_timeout(cldev->cl, (u8 *)&req, sizeof(req), 0, in mei_gfx_memory_ready()
215 if (!cldev->bus->fw_f_fw_ver_supported && in mei_mkhi_fix()
216 !cldev->bus->hbm_f_os_supported) in mei_mkhi_fix()
223 if (cldev->bus->fw_f_fw_ver_supported) { in mei_mkhi_fix()
226 dev_info(&cldev->dev, "FW version command failed %d\n", in mei_mkhi_fix()
230 if (cldev->bus->hbm_f_os_supported) { in mei_mkhi_fix()
233 dev_info(&cldev->dev, "OS version command failed %d\n", in mei_mkhi_fix()
245 * No need to fill in version if it is already filled in by the fix address client. in mei_gsc_mkhi_ver()
247 if (!cldev->bus->fw_f_fw_ver_supported || cldev->bus->fw_ver_received) in mei_gsc_mkhi_ver()
256 dev_info(&cldev->dev, "FW version command failed %d\n", ret); in mei_gsc_mkhi_ver()
265 if (!cldev->bus->fw_f_fw_ver_supported && in mei_gsc_mkhi_fix_ver()
266 cldev->bus->pxp_mode != MEI_DEV_PXP_INIT) in mei_gsc_mkhi_fix_ver()
273 if (cldev->bus->pxp_mode == MEI_DEV_PXP_INIT) { in mei_gsc_mkhi_fix_ver()
276 dev_err(&cldev->dev, "memory ready command failed %d\n", ret); in mei_gsc_mkhi_fix_ver()
278 dev_dbg(&cldev->dev, "memory ready command sent\n"); in mei_gsc_mkhi_fix_ver()
279 cldev->bus->pxp_mode = MEI_DEV_PXP_SETUP; in mei_gsc_mkhi_fix_ver()
287 dev_info(&cldev->dev, "FW version command failed %d\n", in mei_gsc_mkhi_fix_ver()
294 * mei_wd - wd client on the bus, change protocol version
297 * @cldev: me clients device
301 #include "hw-me-regs.h"
304 struct pci_dev *pdev = to_pci_dev(cldev->dev.parent); in mei_wd()
306 if (pdev->device == MEI_DEV_ID_WPT_LP || in mei_wd()
307 pdev->device == MEI_DEV_ID_SPT || in mei_wd()
308 pdev->device == MEI_DEV_ID_SPT_H) in mei_wd()
309 cldev->me_cl->props.protocol_version = 0x2; in mei_wd()
311 cldev->do_match = 1; in mei_wd()
361 * mei_nfc_if_version - get NFC interface version
364 * @ver: NFC interface version to be filled in
382 bus = cl->dev; in mei_nfc_if_version()
384 WARN_ON(mutex_is_locked(&bus->device_lock)); in mei_nfc_if_version()
389 dev_err(bus->dev, "Could not send IF version cmd ret = %d\n", ret); in mei_nfc_if_version()
398 return -ENOMEM; in mei_nfc_if_version()
404 dev_err(bus->dev, "Could not read IF version ret = %d\n", bytes_recv); in mei_nfc_if_version()
405 ret = -EIO; in mei_nfc_if_version()
409 memcpy(ver, reply->data, sizeof(*ver)); in mei_nfc_if_version()
411 dev_info(bus->dev, "NFC MEI VERSION: IVN 0x%x Vendor ID 0x%x Type 0x%x\n", in mei_nfc_if_version()
412 ver->fw_ivn, ver->vendor_id, ver->radio_type); in mei_nfc_if_version()
420 * mei_nfc_radio_name - derive nfc radio name from the interface version
422 * @ver: NFC radio version
429 if (ver->vendor_id == MEI_NFC_VENDOR_INSIDE) { in mei_nfc_radio_name()
430 if (ver->radio_type == MEI_NFC_VENDOR_INSIDE_UREAD) in mei_nfc_radio_name()
434 if (ver->vendor_id == MEI_NFC_VENDOR_NXP) { in mei_nfc_radio_name()
435 if (ver->radio_type == MEI_NFC_VENDOR_NXP_PN544) in mei_nfc_radio_name()
443 * mei_nfc - The nfc fixup function. The function retrieves nfc radio
444 * name and set is as device attribute so we can load
445 * the proper device driver for it
447 * @cldev: me client device (nfc)
458 bus = cldev->bus; in mei_nfc()
460 mutex_lock(&bus->device_lock); in mei_nfc()
466 dev_err(bus->dev, "nfc hook alloc failed %d\n", ret); in mei_nfc()
472 ret = -ENOTTY; in mei_nfc()
473 dev_err(bus->dev, "Cannot find nfc info %d\n", ret); in mei_nfc()
479 dev_err(&cldev->dev, "Can't connect to the NFC INFO ME ret = %d\n", in mei_nfc()
484 mutex_unlock(&bus->device_lock); in mei_nfc()
493 ret = -ENOENT; in mei_nfc()
494 dev_err(&cldev->dev, "Can't get the NFC interface version ret = %d\n", in mei_nfc()
499 dev_dbg(bus->dev, "nfc radio %s\n", radio_name); in mei_nfc()
500 strscpy(cldev->name, radio_name, sizeof(cldev->name)); in mei_nfc()
503 mutex_lock(&bus->device_lock); in mei_nfc()
505 dev_err(bus->dev, "Can't disconnect the NFC INFO ME\n"); in mei_nfc()
511 mutex_unlock(&bus->device_lock); in mei_nfc()
516 cldev->do_match = 0; in mei_nfc()
518 dev_dbg(bus->dev, "end of fixup match = %d\n", cldev->do_match); in mei_nfc()
522 * vt_support - enable on bus clients with vtag support
524 * @cldev: me clients device
528 if (cldev->me_cl->props.vt_supported == 1) in vt_support()
529 cldev->do_match = 1; in vt_support()
533 * pxp_is_ready - enable bus client if pxp is ready
535 * @cldev: me clients device
539 struct mei_device *bus = cldev->bus; in pxp_is_ready()
541 switch (bus->pxp_mode) { in pxp_is_ready()
544 cldev->do_match = 1; in pxp_is_ready()
547 cldev->do_match = 0; in pxp_is_ready()
572 * mei_cl_bus_dev_fixup - run fixup handlers
574 * @cldev: me client device
579 const uuid_le *uuid = mei_me_cl_uuid(cldev->me_cl); in mei_cl_bus_dev_fixup()
585 if (uuid_le_cmp(f->uuid, MEI_UUID_ANY) == 0 || in mei_cl_bus_dev_fixup()
586 uuid_le_cmp(f->uuid, *uuid) == 0) in mei_cl_bus_dev_fixup()
587 f->hook(cldev); in mei_cl_bus_dev_fixup()