1 // SPDX-License-Identifier: GPL-2.0-only
3 * nop (passthrough) Link Layer Control
5 * Copyright (C) 2012 Intel Corporation. All rights reserved.
8 #include <linux/types.h>
13 struct nfc_hci_dev
*hdev
;
14 xmit_to_drv_t xmit_to_drv
;
15 rcv_to_hci_t rcv_to_hci
;
18 llc_failure_t llc_failure
;
21 static void *llc_nop_init(struct nfc_hci_dev
*hdev
, xmit_to_drv_t xmit_to_drv
,
22 rcv_to_hci_t rcv_to_hci
, int tx_headroom
,
23 int tx_tailroom
, int *rx_headroom
, int *rx_tailroom
,
24 llc_failure_t llc_failure
)
26 struct llc_nop
*llc_nop
;
31 llc_nop
= kzalloc(sizeof(struct llc_nop
), GFP_KERNEL
);
36 llc_nop
->xmit_to_drv
= xmit_to_drv
;
37 llc_nop
->rcv_to_hci
= rcv_to_hci
;
38 llc_nop
->tx_headroom
= tx_headroom
;
39 llc_nop
->tx_tailroom
= tx_tailroom
;
40 llc_nop
->llc_failure
= llc_failure
;
45 static void llc_nop_deinit(struct nfc_llc
*llc
)
47 kfree(nfc_llc_get_data(llc
));
50 static int llc_nop_start(struct nfc_llc
*llc
)
55 static int llc_nop_stop(struct nfc_llc
*llc
)
60 static void llc_nop_rcv_from_drv(struct nfc_llc
*llc
, struct sk_buff
*skb
)
62 struct llc_nop
*llc_nop
= nfc_llc_get_data(llc
);
64 llc_nop
->rcv_to_hci(llc_nop
->hdev
, skb
);
67 static int llc_nop_xmit_from_hci(struct nfc_llc
*llc
, struct sk_buff
*skb
)
69 struct llc_nop
*llc_nop
= nfc_llc_get_data(llc
);
71 return llc_nop
->xmit_to_drv(llc_nop
->hdev
, skb
);
74 static struct nfc_llc_ops llc_nop_ops
= {
76 .deinit
= llc_nop_deinit
,
77 .start
= llc_nop_start
,
79 .rcv_from_drv
= llc_nop_rcv_from_drv
,
80 .xmit_from_hci
= llc_nop_xmit_from_hci
,
83 int nfc_llc_nop_register(void)
85 return nfc_llc_register(LLC_NOP_NAME
, &llc_nop_ops
);