162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * NCI based Driver for STMicroelectronics NFC Chip
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2014-2015  STMicroelectronics SAS. All rights reserved.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __LOCAL_NDLC_H_
962306a36Sopenharmony_ci#define __LOCAL_NDLC_H_
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/skbuff.h>
1262306a36Sopenharmony_ci#include <net/nfc/nfc.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cistruct st_nci_se_status;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/* Low Level Transport description */
1762306a36Sopenharmony_cistruct llt_ndlc {
1862306a36Sopenharmony_ci	struct nci_dev *ndev;
1962306a36Sopenharmony_ci	const struct nfc_phy_ops *ops;
2062306a36Sopenharmony_ci	void *phy_id;
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	struct timer_list t1_timer;
2362306a36Sopenharmony_ci	bool t1_active;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	struct timer_list t2_timer;
2662306a36Sopenharmony_ci	bool t2_active;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	struct sk_buff_head rcv_q;
2962306a36Sopenharmony_ci	struct sk_buff_head send_q;
3062306a36Sopenharmony_ci	struct sk_buff_head ack_pending_q;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	struct work_struct sm_work;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci	struct device *dev;
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci	/*
3762306a36Sopenharmony_ci	 * < 0 if hardware error occurred
3862306a36Sopenharmony_ci	 * and prevents normal operation.
3962306a36Sopenharmony_ci	 */
4062306a36Sopenharmony_ci	int hard_fault;
4162306a36Sopenharmony_ci	int powered;
4262306a36Sopenharmony_ci};
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciint ndlc_open(struct llt_ndlc *ndlc);
4562306a36Sopenharmony_civoid ndlc_close(struct llt_ndlc *ndlc);
4662306a36Sopenharmony_ciint ndlc_send(struct llt_ndlc *ndlc, struct sk_buff *skb);
4762306a36Sopenharmony_civoid ndlc_recv(struct llt_ndlc *ndlc, struct sk_buff *skb);
4862306a36Sopenharmony_ciint ndlc_probe(void *phy_id, const struct nfc_phy_ops *phy_ops,
4962306a36Sopenharmony_ci	       struct device *dev, int phy_headroom, int phy_tailroom,
5062306a36Sopenharmony_ci	       struct llt_ndlc **ndlc_id, struct st_nci_se_status *se_status);
5162306a36Sopenharmony_civoid ndlc_remove(struct llt_ndlc *ndlc);
5262306a36Sopenharmony_ci#endif /* __LOCAL_NDLC_H__ */
53