Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright (C) 2011  Intel Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) enum llcp_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 	LLCP_CONNECTED = 1, /* wait_for_packet() wants that */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 	LLCP_CONNECTING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 	LLCP_DISCONNECTING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) 	LLCP_CLOSED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 	LLCP_BOUND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 	LLCP_LISTEN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define LLCP_DEFAULT_LTO 100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define LLCP_DEFAULT_RW  1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define LLCP_DEFAULT_MIU 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define LLCP_MAX_LTO  0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define LLCP_MAX_RW   15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define LLCP_MAX_MIUX 0x7ff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define LLCP_MAX_MIU (LLCP_MAX_MIUX + 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define LLCP_WKS_NUM_SAP   16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define LLCP_SDP_NUM_SAP   16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define LLCP_LOCAL_NUM_SAP 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define LLCP_LOCAL_SAP_OFFSET (LLCP_WKS_NUM_SAP + LLCP_SDP_NUM_SAP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define LLCP_MAX_SAP (LLCP_WKS_NUM_SAP + LLCP_SDP_NUM_SAP + LLCP_LOCAL_NUM_SAP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define LLCP_SDP_UNBOUND   (LLCP_MAX_SAP + 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) struct nfc_llcp_sock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) struct llcp_sock_list {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	struct hlist_head head;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	rwlock_t          lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) struct nfc_llcp_sdp_tlv {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	u8 *tlv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	u8 tlv_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	char *uri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	u8 tid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	u8 sap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	unsigned long time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	struct hlist_node node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) struct nfc_llcp_local {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	struct nfc_dev *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	struct kref ref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	struct mutex sdp_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	struct timer_list link_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	struct sk_buff_head tx_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	struct work_struct	 tx_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	struct work_struct	 rx_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	struct sk_buff *rx_pending;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	struct work_struct	 timeout_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	u32 target_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	u8 rf_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	u8 comm_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	u8 lto;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	u8 rw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	__be16 miux;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	unsigned long local_wks;      /* Well known services */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	unsigned long local_sdp;      /* Local services  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	unsigned long local_sap; /* Local SAPs, not available for discovery */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	atomic_t local_sdp_cnt[LLCP_SDP_NUM_SAP];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	/* local */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	u8 gb[NFC_MAX_GT_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	u8 gb_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	/* remote */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	u8 remote_gb[NFC_MAX_GT_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	u8 remote_gb_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	u8  remote_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	u16 remote_miu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	u16 remote_lto;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	u8  remote_opt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	u16 remote_wks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	struct mutex sdreq_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	struct hlist_head pending_sdreqs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	struct timer_list sdreq_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	struct work_struct sdreq_timeout_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	u8 sdreq_next_tid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	/* sockets array */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	struct llcp_sock_list sockets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	struct llcp_sock_list connecting_sockets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	struct llcp_sock_list raw_sockets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) struct nfc_llcp_sock {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	struct sock sk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	struct nfc_dev *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	struct nfc_llcp_local *local;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	u32 target_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	u32 nfc_protocol;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	/* Link parameters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	u8 ssap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	u8 dsap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	char *service_name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 	size_t service_name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	u8 rw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	__be16 miux;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	/* Remote link parameters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	u8 remote_rw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	u16 remote_miu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	/* Link variables */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	u8 send_n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	u8 send_ack_n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	u8 recv_n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	u8 recv_ack_n;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	/* Is the remote peer ready to receive */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	u8 remote_ready;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 	/* Reserved source SAP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	u8 reserved_ssap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	struct sk_buff_head tx_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	struct sk_buff_head tx_pending_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	struct list_head accept_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	struct sock *parent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct nfc_llcp_ui_cb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	__u8 dsap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	__u8 ssap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define nfc_llcp_ui_skb_cb(__skb) ((struct nfc_llcp_ui_cb *)&((__skb)->cb[0]))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define nfc_llcp_sock(sk) ((struct nfc_llcp_sock *) (sk))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define nfc_llcp_dev(sk)  (nfc_llcp_sock((sk))->dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define LLCP_HEADER_SIZE   2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define LLCP_SEQUENCE_SIZE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define LLCP_AGF_PDU_HEADER_SIZE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) /* LLCP versions: 1.1 is 1.0 plus SDP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define LLCP_VERSION_10 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define LLCP_VERSION_11 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /* LLCP PDU types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define LLCP_PDU_SYMM     0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define LLCP_PDU_PAX      0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define LLCP_PDU_AGF      0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define LLCP_PDU_UI       0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #define LLCP_PDU_CONNECT  0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define LLCP_PDU_DISC     0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define LLCP_PDU_CC       0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define LLCP_PDU_DM       0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) #define LLCP_PDU_FRMR     0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define LLCP_PDU_SNL      0x9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define LLCP_PDU_I        0xc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define LLCP_PDU_RR       0xd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define LLCP_PDU_RNR      0xe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) /* Parameters TLV types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) #define LLCP_TLV_VERSION 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define LLCP_TLV_MIUX    0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #define LLCP_TLV_WKS     0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define LLCP_TLV_LTO     0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #define LLCP_TLV_RW      0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define LLCP_TLV_SN      0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #define LLCP_TLV_OPT     0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define LLCP_TLV_SDREQ   0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define LLCP_TLV_SDRES   0x9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define LLCP_TLV_MAX     0xa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /* Well known LLCP SAP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define LLCP_SAP_SDP   0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define LLCP_SAP_IP    0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define LLCP_SAP_OBEX  0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define LLCP_SAP_SNEP  0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #define LLCP_SAP_MAX   0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) /* Disconnection reason code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define LLCP_DM_DISC    0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define LLCP_DM_NOCONN  0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define LLCP_DM_NOBOUND 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define LLCP_DM_REJ     0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) void nfc_llcp_sock_link(struct llcp_sock_list *l, struct sock *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) void nfc_llcp_sock_unlink(struct llcp_sock_list *l, struct sock *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) void nfc_llcp_socket_remote_param_init(struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) int nfc_llcp_local_put(struct nfc_llcp_local *local);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 			 struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) u8 nfc_llcp_get_local_ssap(struct nfc_llcp_local *local);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) void nfc_llcp_put_ssap(struct nfc_llcp_local *local, u8 ssap);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) int nfc_llcp_queue_i_frames(struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) void nfc_llcp_send_to_raw_sock(struct nfc_llcp_local *local,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 			       struct sk_buff *skb, u8 direction);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) /* Sock API */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) struct sock *nfc_llcp_sock_alloc(struct socket *sock, int type, gfp_t gfp, int kern);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) void nfc_llcp_sock_free(struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) void nfc_llcp_accept_unlink(struct sock *sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) struct sock *nfc_llcp_accept_dequeue(struct sock *sk, struct socket *newsock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) /* TLV API */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) int nfc_llcp_parse_gb_tlv(struct nfc_llcp_local *local,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 			  u8 *tlv_array, u16 tlv_array_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) int nfc_llcp_parse_connection_tlv(struct nfc_llcp_sock *sock,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 				  u8 *tlv_array, u16 tlv_array_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) /* Commands API */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) void nfc_llcp_recv(void *data, struct sk_buff *skb, int err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) u8 *nfc_llcp_build_tlv(u8 type, u8 *value, u8 value_length, u8 *tlv_length);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) struct nfc_llcp_sdp_tlv *nfc_llcp_build_sdres_tlv(u8 tid, u8 sap);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) struct nfc_llcp_sdp_tlv *nfc_llcp_build_sdreq_tlv(u8 tid, char *uri,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 						  size_t uri_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) void nfc_llcp_free_sdp_tlv_list(struct hlist_head *sdp_head);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) void nfc_llcp_recv(void *data, struct sk_buff *skb, int err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) int nfc_llcp_send_symm(struct nfc_dev *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) int nfc_llcp_send_connect(struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) int nfc_llcp_send_cc(struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) int nfc_llcp_send_snl_sdres(struct nfc_llcp_local *local,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 			    struct hlist_head *tlv_list, size_t tlvs_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) int nfc_llcp_send_snl_sdreq(struct nfc_llcp_local *local,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 			    struct hlist_head *tlv_list, size_t tlvs_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) int nfc_llcp_send_dm(struct nfc_llcp_local *local, u8 ssap, u8 dsap, u8 reason);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) int nfc_llcp_send_disconnect(struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) int nfc_llcp_send_i_frame(struct nfc_llcp_sock *sock,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 			  struct msghdr *msg, size_t len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) int nfc_llcp_send_ui_frame(struct nfc_llcp_sock *sock, u8 ssap, u8 dsap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 			   struct msghdr *msg, size_t len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) int nfc_llcp_send_rr(struct nfc_llcp_sock *sock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) /* Socket API */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) int __init nfc_llcp_sock_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) void nfc_llcp_sock_exit(void);