18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Link Layer Control manager
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2012  Intel Corporation. All rights reserved.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef __LOCAL_LLC_H_
98c2ecf20Sopenharmony_ci#define __LOCAL_LLC_H_
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <net/nfc/hci.h>
128c2ecf20Sopenharmony_ci#include <net/nfc/llc.h>
138c2ecf20Sopenharmony_ci#include <linux/skbuff.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cistruct nfc_llc_ops {
168c2ecf20Sopenharmony_ci	void *(*init) (struct nfc_hci_dev *hdev, xmit_to_drv_t xmit_to_drv,
178c2ecf20Sopenharmony_ci		       rcv_to_hci_t rcv_to_hci, int tx_headroom,
188c2ecf20Sopenharmony_ci		       int tx_tailroom, int *rx_headroom, int *rx_tailroom,
198c2ecf20Sopenharmony_ci		       llc_failure_t llc_failure);
208c2ecf20Sopenharmony_ci	void (*deinit) (struct nfc_llc *llc);
218c2ecf20Sopenharmony_ci	int (*start) (struct nfc_llc *llc);
228c2ecf20Sopenharmony_ci	int (*stop) (struct nfc_llc *llc);
238c2ecf20Sopenharmony_ci	void (*rcv_from_drv) (struct nfc_llc *llc, struct sk_buff *skb);
248c2ecf20Sopenharmony_ci	int (*xmit_from_hci) (struct nfc_llc *llc, struct sk_buff *skb);
258c2ecf20Sopenharmony_ci};
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistruct nfc_llc_engine {
288c2ecf20Sopenharmony_ci	const char *name;
298c2ecf20Sopenharmony_ci	struct nfc_llc_ops *ops;
308c2ecf20Sopenharmony_ci	struct list_head entry;
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistruct nfc_llc {
348c2ecf20Sopenharmony_ci	void *data;
358c2ecf20Sopenharmony_ci	struct nfc_llc_ops *ops;
368c2ecf20Sopenharmony_ci	int rx_headroom;
378c2ecf20Sopenharmony_ci	int rx_tailroom;
388c2ecf20Sopenharmony_ci};
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_civoid *nfc_llc_get_data(struct nfc_llc *llc);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciint nfc_llc_register(const char *name, struct nfc_llc_ops *ops);
438c2ecf20Sopenharmony_civoid nfc_llc_unregister(const char *name);
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ciint nfc_llc_nop_register(void);
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#if defined(CONFIG_NFC_SHDLC)
488c2ecf20Sopenharmony_ciint nfc_llc_shdlc_register(void);
498c2ecf20Sopenharmony_ci#else
508c2ecf20Sopenharmony_cistatic inline int nfc_llc_shdlc_register(void)
518c2ecf20Sopenharmony_ci{
528c2ecf20Sopenharmony_ci	return 0;
538c2ecf20Sopenharmony_ci}
548c2ecf20Sopenharmony_ci#endif
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci#endif /* __LOCAL_LLC_H_ */
57