Lines Matching refs:cf_sk

57 static int rx_flow_is_on(struct caifsock *cf_sk)  in rx_flow_is_on()  argument
59 return test_bit(RX_FLOW_ON_BIT, &cf_sk->flow_state); in rx_flow_is_on()
62 static int tx_flow_is_on(struct caifsock *cf_sk) in tx_flow_is_on() argument
64 return test_bit(TX_FLOW_ON_BIT, &cf_sk->flow_state); in tx_flow_is_on()
67 static void set_rx_flow_off(struct caifsock *cf_sk) in set_rx_flow_off() argument
69 clear_bit(RX_FLOW_ON_BIT, &cf_sk->flow_state); in set_rx_flow_off()
72 static void set_rx_flow_on(struct caifsock *cf_sk) in set_rx_flow_on() argument
74 set_bit(RX_FLOW_ON_BIT, &cf_sk->flow_state); in set_rx_flow_on()
77 static void set_tx_flow_off(struct caifsock *cf_sk) in set_tx_flow_off() argument
79 clear_bit(TX_FLOW_ON_BIT, &cf_sk->flow_state); in set_tx_flow_off()
82 static void set_tx_flow_on(struct caifsock *cf_sk) in set_tx_flow_on() argument
84 set_bit(TX_FLOW_ON_BIT, &cf_sk->flow_state); in set_tx_flow_on()
89 struct caifsock *cf_sk; in caif_read_lock() local
90 cf_sk = container_of(sk, struct caifsock, sk); in caif_read_lock()
91 mutex_lock(&cf_sk->readlock); in caif_read_lock()
96 struct caifsock *cf_sk; in caif_read_unlock() local
97 cf_sk = container_of(sk, struct caifsock, sk); in caif_read_unlock()
98 mutex_unlock(&cf_sk->readlock); in caif_read_unlock()
101 static int sk_rcvbuf_lowwater(struct caifsock *cf_sk) in sk_rcvbuf_lowwater() argument
104 return cf_sk->sk.sk_rcvbuf / 4; in sk_rcvbuf_lowwater()
109 struct caifsock *cf_sk; in caif_flow_ctrl() local
110 cf_sk = container_of(sk, struct caifsock, sk); in caif_flow_ctrl()
111 if (cf_sk->layer.dn && cf_sk->layer.dn->modemcmd) in caif_flow_ctrl()
112 cf_sk->layer.dn->modemcmd(cf_sk->layer.dn, mode); in caif_flow_ctrl()
124 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_queue_rcv_skb() local
128 (unsigned int)sk->sk_rcvbuf && rx_flow_is_on(cf_sk)) { in caif_queue_rcv_skb()
130 atomic_read(&cf_sk->sk.sk_rmem_alloc), in caif_queue_rcv_skb()
131 sk_rcvbuf_lowwater(cf_sk)); in caif_queue_rcv_skb()
132 set_rx_flow_off(cf_sk); in caif_queue_rcv_skb()
140 if (!sk_rmem_schedule(sk, skb, skb->truesize) && rx_flow_is_on(cf_sk)) { in caif_queue_rcv_skb()
141 set_rx_flow_off(cf_sk); in caif_queue_rcv_skb()
162 struct caifsock *cf_sk; in caif_sktrecv_cb() local
165 cf_sk = container_of(layr, struct caifsock, layer); in caif_sktrecv_cb()
168 if (unlikely(cf_sk->sk.sk_state != CAIF_CONNECTED)) { in caif_sktrecv_cb()
172 caif_queue_rcv_skb(&cf_sk->sk, skb); in caif_sktrecv_cb()
178 struct caifsock *cf_sk = container_of(layr, struct caifsock, layer); in cfsk_hold() local
179 sock_hold(&cf_sk->sk); in cfsk_hold()
184 struct caifsock *cf_sk = container_of(layr, struct caifsock, layer); in cfsk_put() local
185 sock_put(&cf_sk->sk); in cfsk_put()
193 struct caifsock *cf_sk = container_of(layr, struct caifsock, layer); in caif_ctrl_cb() local
197 set_tx_flow_on(cf_sk); in caif_ctrl_cb()
198 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
203 set_tx_flow_off(cf_sk); in caif_ctrl_cb()
204 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
209 caif_client_register_refcnt(&cf_sk->layer, in caif_ctrl_cb()
211 cf_sk->sk.sk_state = CAIF_CONNECTED; in caif_ctrl_cb()
212 set_tx_flow_on(cf_sk); in caif_ctrl_cb()
213 cf_sk->sk.sk_shutdown = 0; in caif_ctrl_cb()
214 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
219 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_ctrl_cb()
220 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
225 cf_sk->sk.sk_err = ECONNREFUSED; in caif_ctrl_cb()
226 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_ctrl_cb()
227 cf_sk->sk.sk_shutdown = SHUTDOWN_MASK; in caif_ctrl_cb()
232 set_tx_flow_on(cf_sk); in caif_ctrl_cb()
233 cf_sk->sk.sk_state_change(&cf_sk->sk); in caif_ctrl_cb()
238 cf_sk->sk.sk_shutdown = SHUTDOWN_MASK; in caif_ctrl_cb()
239 cf_sk->sk.sk_err = ECONNRESET; in caif_ctrl_cb()
240 set_rx_flow_on(cf_sk); in caif_ctrl_cb()
241 sk_error_report(&cf_sk->sk); in caif_ctrl_cb()
251 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_check_flow_release() local
253 if (rx_flow_is_on(cf_sk)) in caif_check_flow_release()
256 if (atomic_read(&sk->sk_rmem_alloc) <= sk_rcvbuf_lowwater(cf_sk)) { in caif_check_flow_release()
257 set_rx_flow_on(cf_sk); in caif_check_flow_release()
459 static long caif_wait_for_flow_on(struct caifsock *cf_sk, in caif_wait_for_flow_on() argument
462 struct sock *sk = &cf_sk->sk; in caif_wait_for_flow_on()
466 if (tx_flow_is_on(cf_sk) && in caif_wait_for_flow_on()
467 (!wait_writeable || sock_writeable(&cf_sk->sk))) in caif_wait_for_flow_on()
483 if (cf_sk->sk.sk_state != CAIF_CONNECTED) in caif_wait_for_flow_on()
495 static int transmit_skb(struct sk_buff *skb, struct caifsock *cf_sk, in transmit_skb() argument
502 cfpkt_set_prio(pkt, cf_sk->sk.sk_priority); in transmit_skb()
504 if (cf_sk->layer.dn == NULL) { in transmit_skb()
509 return cf_sk->layer.dn->transmit(cf_sk->layer.dn, pkt); in transmit_skb()
517 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_seqpkt_sendmsg() local
523 caif_assert(cf_sk); in caif_seqpkt_sendmsg()
549 if (cf_sk->sk.sk_state != CAIF_CONNECTED || in caif_seqpkt_sendmsg()
556 if (len > cf_sk->maxframe && cf_sk->sk.sk_protocol != CAIFPROTO_RFM) in caif_seqpkt_sendmsg()
559 buffer_size = len + cf_sk->headroom + cf_sk->tailroom; in caif_seqpkt_sendmsg()
567 skb_reserve(skb, cf_sk->headroom); in caif_seqpkt_sendmsg()
573 ret = transmit_skb(skb, cf_sk, noblock, timeo); in caif_seqpkt_sendmsg()
593 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_stream_sendmsg() local
607 timeo = caif_wait_for_flow_on(cf_sk, 1, timeo, &err); in caif_stream_sendmsg()
616 if (size > cf_sk->maxframe) in caif_stream_sendmsg()
617 size = cf_sk->maxframe; in caif_stream_sendmsg()
627 size + cf_sk->headroom + in caif_stream_sendmsg()
628 cf_sk->tailroom, in caif_stream_sendmsg()
634 skb_reserve(skb, cf_sk->headroom); in caif_stream_sendmsg()
649 err = transmit_skb(skb, cf_sk, in caif_stream_sendmsg()
672 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in setsockopt() local
675 if (cf_sk->sk.sk_socket->state != SS_UNCONNECTED) in setsockopt()
686 lock_sock(&(cf_sk->sk)); in setsockopt()
687 cf_sk->conn_req.link_selector = linksel; in setsockopt()
688 release_sock(&cf_sk->sk); in setsockopt()
694 if (cf_sk->sk.sk_protocol != CAIFPROTO_UTIL) in setsockopt()
696 lock_sock(&(cf_sk->sk)); in setsockopt()
697 if (ol > sizeof(cf_sk->conn_req.param.data) || in setsockopt()
698 copy_from_sockptr(&cf_sk->conn_req.param.data, ov, ol)) { in setsockopt()
699 release_sock(&cf_sk->sk); in setsockopt()
702 cf_sk->conn_req.param.size = ol; in setsockopt()
703 release_sock(&cf_sk->sk); in setsockopt()
744 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_connect() local
787 caif_disconnect_client(sock_net(sk), &cf_sk->layer); in caif_connect()
788 caif_free_client(&cf_sk->layer); in caif_connect()
801 sk_stream_kill_queues(&cf_sk->sk); in caif_connect()
807 memcpy(&cf_sk->conn_req.sockaddr, uaddr, in caif_connect()
816 if (cf_sk->sk.sk_priority > CAIF_PRIO_MAX) in caif_connect()
817 cf_sk->conn_req.priority = CAIF_PRIO_MAX; in caif_connect()
818 else if (cf_sk->sk.sk_priority < CAIF_PRIO_MIN) in caif_connect()
819 cf_sk->conn_req.priority = CAIF_PRIO_MIN; in caif_connect()
821 cf_sk->conn_req.priority = cf_sk->sk.sk_priority; in caif_connect()
824 cf_sk->conn_req.ifindex = cf_sk->sk.sk_bound_dev_if; in caif_connect()
826 cf_sk->layer.receive = caif_sktrecv_cb; in caif_connect()
828 err = caif_connect_client(sock_net(sk), &cf_sk->conn_req, in caif_connect()
829 &cf_sk->layer, &ifindex, &headroom, &tailroom); in caif_connect()
832 cf_sk->sk.sk_socket->state = SS_UNCONNECTED; in caif_connect()
833 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_connect()
844 cf_sk->headroom = LL_RESERVED_SPACE_EXTRA(dev, headroom); in caif_connect()
848 cf_sk->tailroom = tailroom; in caif_connect()
849 cf_sk->maxframe = mtu - (headroom + tailroom); in caif_connect()
850 if (cf_sk->maxframe < 1) { in caif_connect()
897 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_release() local
902 set_tx_flow_off(cf_sk); in caif_release()
914 WARN_ON(IS_ERR(cf_sk->debugfs_socket_dir)); in caif_release()
915 debugfs_remove_recursive(cf_sk->debugfs_socket_dir); in caif_release()
917 lock_sock(&(cf_sk->sk)); in caif_release()
921 caif_disconnect_client(sock_net(sk), &cf_sk->layer); in caif_release()
922 cf_sk->sk.sk_socket->state = SS_DISCONNECTING; in caif_release()
926 sk_stream_kill_queues(&cf_sk->sk); in caif_release()
938 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_poll() local
960 if (sock_writeable(sk) && tx_flow_is_on(cf_sk)) in caif_poll()
1009 struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); in caif_sock_destructor() local
1017 sk_stream_kill_queues(&cf_sk->sk); in caif_sock_destructor()
1018 caif_free_client(&cf_sk->layer); in caif_sock_destructor()
1025 struct caifsock *cf_sk = NULL; in caif_create() local
1059 cf_sk = container_of(sk, struct caifsock, sk); in caif_create()
1080 lock_sock(&(cf_sk->sk)); in caif_create()
1086 mutex_init(&cf_sk->readlock); /* single task reading lock */ in caif_create()
1087 cf_sk->layer.ctrlcmd = caif_ctrl_cb; in caif_create()
1088 cf_sk->sk.sk_socket->state = SS_UNCONNECTED; in caif_create()
1089 cf_sk->sk.sk_state = CAIF_DISCONNECTED; in caif_create()
1091 set_tx_flow_off(cf_sk); in caif_create()
1092 set_rx_flow_on(cf_sk); in caif_create()
1095 cf_sk->conn_req.link_selector = CAIF_LINK_LOW_LATENCY; in caif_create()
1096 cf_sk->conn_req.protocol = protocol; in caif_create()
1097 release_sock(&cf_sk->sk); in caif_create()