18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * NCI based Driver for STMicroelectronics NFC Chip
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2014-2015  STMicroelectronics SAS. All rights reserved.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef __LOCAL_NDLC_H_
98c2ecf20Sopenharmony_ci#define __LOCAL_NDLC_H_
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/skbuff.h>
128c2ecf20Sopenharmony_ci#include <net/nfc/nfc.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cistruct st_nci_se_status;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci/* Low Level Transport description */
178c2ecf20Sopenharmony_cistruct llt_ndlc {
188c2ecf20Sopenharmony_ci	struct nci_dev *ndev;
198c2ecf20Sopenharmony_ci	struct nfc_phy_ops *ops;
208c2ecf20Sopenharmony_ci	void *phy_id;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	struct timer_list t1_timer;
238c2ecf20Sopenharmony_ci	bool t1_active;
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci	struct timer_list t2_timer;
268c2ecf20Sopenharmony_ci	bool t2_active;
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci	struct sk_buff_head rcv_q;
298c2ecf20Sopenharmony_ci	struct sk_buff_head send_q;
308c2ecf20Sopenharmony_ci	struct sk_buff_head ack_pending_q;
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	struct work_struct sm_work;
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci	struct device *dev;
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci	/*
378c2ecf20Sopenharmony_ci	 * < 0 if hardware error occurred
388c2ecf20Sopenharmony_ci	 * and prevents normal operation.
398c2ecf20Sopenharmony_ci	 */
408c2ecf20Sopenharmony_ci	int hard_fault;
418c2ecf20Sopenharmony_ci	int powered;
428c2ecf20Sopenharmony_ci};
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ciint ndlc_open(struct llt_ndlc *ndlc);
458c2ecf20Sopenharmony_civoid ndlc_close(struct llt_ndlc *ndlc);
468c2ecf20Sopenharmony_ciint ndlc_send(struct llt_ndlc *ndlc, struct sk_buff *skb);
478c2ecf20Sopenharmony_civoid ndlc_recv(struct llt_ndlc *ndlc, struct sk_buff *skb);
488c2ecf20Sopenharmony_ciint ndlc_probe(void *phy_id, struct nfc_phy_ops *phy_ops, struct device *dev,
498c2ecf20Sopenharmony_ci	       int phy_headroom, int phy_tailroom, struct llt_ndlc **ndlc_id,
508c2ecf20Sopenharmony_ci	       struct st_nci_se_status *se_status);
518c2ecf20Sopenharmony_civoid ndlc_remove(struct llt_ndlc *ndlc);
528c2ecf20Sopenharmony_ci#endif /* __LOCAL_NDLC_H__ */
53