cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mei.c (1474B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (C) 2013 Intel Corporation. All rights reserved.
      4 *
      5 * HCI based Driver for Inside Secure microread NFC Chip
      6 */
      7
      8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      9
     10#include <linux/module.h>
     11#include <linux/mod_devicetable.h>
     12#include <linux/nfc.h>
     13#include <net/nfc/llc.h>
     14
     15#include "../mei_phy.h"
     16#include "microread.h"
     17
     18#define MICROREAD_DRIVER_NAME "microread"
     19
     20static int microread_mei_probe(struct mei_cl_device *cldev,
     21			       const struct mei_cl_device_id *id)
     22{
     23	struct nfc_mei_phy *phy;
     24	int r;
     25
     26	phy = nfc_mei_phy_alloc(cldev);
     27	if (!phy)
     28		return -ENOMEM;
     29
     30	r = microread_probe(phy, &mei_phy_ops, LLC_NOP_NAME,
     31			    MEI_NFC_HEADER_SIZE, 0, MEI_NFC_MAX_HCI_PAYLOAD,
     32			    &phy->hdev);
     33	if (r < 0) {
     34		nfc_mei_phy_free(phy);
     35
     36		return r;
     37	}
     38
     39	return 0;
     40}
     41
     42static void microread_mei_remove(struct mei_cl_device *cldev)
     43{
     44	struct nfc_mei_phy *phy = mei_cldev_get_drvdata(cldev);
     45
     46	microread_remove(phy->hdev);
     47
     48	nfc_mei_phy_free(phy);
     49}
     50
     51static struct mei_cl_device_id microread_mei_tbl[] = {
     52	{ MICROREAD_DRIVER_NAME, MEI_NFC_UUID, MEI_CL_VERSION_ANY},
     53
     54	/* required last entry */
     55	{ }
     56};
     57MODULE_DEVICE_TABLE(mei, microread_mei_tbl);
     58
     59static struct mei_cl_driver microread_driver = {
     60	.id_table = microread_mei_tbl,
     61	.name = MICROREAD_DRIVER_NAME,
     62
     63	.probe = microread_mei_probe,
     64	.remove = microread_mei_remove,
     65};
     66
     67module_mei_cl_driver(microread_driver);
     68
     69MODULE_LICENSE("GPL");
     70MODULE_DESCRIPTION(DRIVER_DESC);