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

s3fwrn5.h (1842B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * NCI based driver for Samsung S3FWRN5 NFC chip
      4 *
      5 * Copyright (C) 2015 Samsung Electrnoics
      6 * Robert Baldyga <r.baldyga@samsung.com>
      7 */
      8
      9#ifndef __LOCAL_S3FWRN5_H_
     10#define __LOCAL_S3FWRN5_H_
     11
     12#include <linux/nfc.h>
     13
     14#include <net/nfc/nci_core.h>
     15
     16#include "firmware.h"
     17
     18enum s3fwrn5_mode {
     19	S3FWRN5_MODE_COLD,
     20	S3FWRN5_MODE_NCI,
     21	S3FWRN5_MODE_FW,
     22};
     23
     24struct s3fwrn5_phy_ops {
     25	void (*set_wake)(void *id, bool sleep);
     26	void (*set_mode)(void *id, enum s3fwrn5_mode);
     27	enum s3fwrn5_mode (*get_mode)(void *id);
     28	int (*write)(void *id, struct sk_buff *skb);
     29};
     30
     31struct s3fwrn5_info {
     32	struct nci_dev *ndev;
     33	void *phy_id;
     34	struct device *pdev;
     35
     36	const struct s3fwrn5_phy_ops *phy_ops;
     37
     38	struct s3fwrn5_fw_info fw_info;
     39
     40	struct mutex mutex;
     41};
     42
     43static inline int s3fwrn5_set_mode(struct s3fwrn5_info *info,
     44	enum s3fwrn5_mode mode)
     45{
     46	if (!info->phy_ops->set_mode)
     47		return -EOPNOTSUPP;
     48
     49	info->phy_ops->set_mode(info->phy_id, mode);
     50
     51	return 0;
     52}
     53
     54static inline enum s3fwrn5_mode s3fwrn5_get_mode(struct s3fwrn5_info *info)
     55{
     56	if (!info->phy_ops->get_mode)
     57		return -EOPNOTSUPP;
     58
     59	return info->phy_ops->get_mode(info->phy_id);
     60}
     61
     62static inline int s3fwrn5_set_wake(struct s3fwrn5_info *info, bool wake)
     63{
     64	if (!info->phy_ops->set_wake)
     65		return -EOPNOTSUPP;
     66
     67	info->phy_ops->set_wake(info->phy_id, wake);
     68
     69	return 0;
     70}
     71
     72static inline int s3fwrn5_write(struct s3fwrn5_info *info, struct sk_buff *skb)
     73{
     74	if (!info->phy_ops->write)
     75		return -EOPNOTSUPP;
     76
     77	return info->phy_ops->write(info->phy_id, skb);
     78}
     79
     80int s3fwrn5_probe(struct nci_dev **ndev, void *phy_id, struct device *pdev,
     81	const struct s3fwrn5_phy_ops *phy_ops);
     82void s3fwrn5_remove(struct nci_dev *ndev);
     83
     84int s3fwrn5_recv_frame(struct nci_dev *ndev, struct sk_buff *skb,
     85	enum s3fwrn5_mode mode);
     86
     87#endif /* __LOCAL_S3FWRN5_H_ */