^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Link Layer Control manager
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2012 Intel Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifndef __LOCAL_LLC_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define __LOCAL_LLC_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <net/nfc/hci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <net/nfc/llc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/skbuff.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) struct nfc_llc_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) void *(*init) (struct nfc_hci_dev *hdev, xmit_to_drv_t xmit_to_drv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) rcv_to_hci_t rcv_to_hci, int tx_headroom,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) int tx_tailroom, int *rx_headroom, int *rx_tailroom,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) llc_failure_t llc_failure);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) void (*deinit) (struct nfc_llc *llc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) int (*start) (struct nfc_llc *llc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) int (*stop) (struct nfc_llc *llc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) void (*rcv_from_drv) (struct nfc_llc *llc, struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) int (*xmit_from_hci) (struct nfc_llc *llc, struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) struct nfc_llc_engine {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) struct nfc_llc_ops *ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) struct list_head entry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct nfc_llc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) void *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct nfc_llc_ops *ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) int rx_headroom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) int rx_tailroom;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) void *nfc_llc_get_data(struct nfc_llc *llc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) int nfc_llc_register(const char *name, struct nfc_llc_ops *ops);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) void nfc_llc_unregister(const char *name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) int nfc_llc_nop_register(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #if defined(CONFIG_NFC_SHDLC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) int nfc_llc_shdlc_register(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) static inline int nfc_llc_shdlc_register(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #endif /* __LOCAL_LLC_H_ */