Lines Matching refs:cf
319 static int check_optimized(struct canfd_frame *cf, int start_index) in check_optimized() argument
326 if (cf->len <= CAN_MAX_DLEN) in check_optimized()
327 return (cf->len != start_index); in check_optimized()
335 return (cf->len != padlen(start_index)); in check_optimized()
339 static int check_pad(struct isotp_sock *so, struct canfd_frame *cf, in check_pad() argument
347 return check_optimized(cf, start_index); in check_pad()
355 cf->len != padlen(cf->len)) in check_pad()
360 for (i = start_index; i < cf->len; i++) in check_pad()
361 if (cf->data[i] != content) in check_pad()
369 static int isotp_rcv_fc(struct isotp_sock *so, struct canfd_frame *cf, int ae) in isotp_rcv_fc() argument
379 if ((cf->len < ae + FC_CONTENT_SZ) || in isotp_rcv_fc()
381 check_pad(so, cf, ae + FC_CONTENT_SZ, so->opt.rxpad_content))) { in isotp_rcv_fc()
395 so->txfc.bs = cf->data[ae + 1]; in isotp_rcv_fc()
396 so->txfc.stmin = cf->data[ae + 2]; in isotp_rcv_fc()
420 switch (cf->data[ae] & 0x0F) { in isotp_rcv_fc()
451 static int isotp_rcv_sf(struct sock *sk, struct canfd_frame *cf, int pcilen, in isotp_rcv_sf() argument
460 if (!len || len > cf->len - pcilen) in isotp_rcv_sf()
464 check_pad(so, cf, pcilen + len, so->opt.rxpad_content)) { in isotp_rcv_sf()
476 memcpy(skb_put(nskb, len), &cf->data[pcilen], len); in isotp_rcv_sf()
484 static int isotp_rcv_ff(struct sock *sk, struct canfd_frame *cf, int ae) in isotp_rcv_ff() argument
495 so->rx.ll_dl = padlen(cf->len); in isotp_rcv_ff()
498 if (cf->len != so->rx.ll_dl) in isotp_rcv_ff()
502 so->rx.len = (cf->data[ae] & 0x0F) << 8; in isotp_rcv_ff()
503 so->rx.len += cf->data[ae + 1]; in isotp_rcv_ff()
510 so->rx.len = cf->data[ae + 2] << 24; in isotp_rcv_ff()
511 so->rx.len += cf->data[ae + 3] << 16; in isotp_rcv_ff()
512 so->rx.len += cf->data[ae + 4] << 8; in isotp_rcv_ff()
513 so->rx.len += cf->data[ae + 5]; in isotp_rcv_ff()
542 so->rx.buf[so->rx.idx++] = cf->data[i]; in isotp_rcv_ff()
557 static int isotp_rcv_cf(struct sock *sk, struct canfd_frame *cf, int ae, in isotp_rcv_cf() argument
579 if (cf->len > so->rx.ll_dl) in isotp_rcv_cf()
583 if (cf->len < so->rx.ll_dl) { in isotp_rcv_cf()
589 if ((cf->data[ae] & 0x0F) != so->rx.sn) { in isotp_rcv_cf()
602 for (i = ae + N_PCI_SZ; i < cf->len; i++) { in isotp_rcv_cf()
603 so->rx.buf[so->rx.idx++] = cf->data[i]; in isotp_rcv_cf()
613 check_pad(so, cf, i + 1, so->opt.rxpad_content)) { in isotp_rcv_cf()
655 struct canfd_frame *cf; in isotp_rcv() local
665 cf = (struct canfd_frame *)skb->data; in isotp_rcv()
668 if (ae && cf->data[0] != so->opt.rx_ext_address) in isotp_rcv()
671 n_pci_type = cf->data[ae] & 0xF0; in isotp_rcv()
689 isotp_rcv_fc(so, cf, ae); in isotp_rcv()
701 sf_dl = cf->data[ae] & 0x0F; in isotp_rcv()
703 if (cf->len <= CAN_MAX_DLEN) { in isotp_rcv()
704 isotp_rcv_sf(sk, cf, SF_PCI_SZ4 + ae, skb, sf_dl); in isotp_rcv()
716 isotp_rcv_sf(sk, cf, SF_PCI_SZ8 + ae, skb, in isotp_rcv()
717 cf->data[SF_PCI_SZ4 + ae]); in isotp_rcv()
724 isotp_rcv_ff(sk, cf, ae); in isotp_rcv()
729 isotp_rcv_cf(sk, cf, ae, skb); in isotp_rcv()
737 static void isotp_fill_dataframe(struct canfd_frame *cf, struct isotp_sock *so, in isotp_fill_dataframe() argument
745 cf->can_id = so->txid; in isotp_fill_dataframe()
746 cf->len = num + pcilen; in isotp_fill_dataframe()
751 cf->len = padlen(cf->len); in isotp_fill_dataframe()
752 memset(cf->data, so->opt.txpad_content, cf->len); in isotp_fill_dataframe()
753 } else if (cf->len > CAN_MAX_DLEN) { in isotp_fill_dataframe()
755 cf->len = padlen(cf->len); in isotp_fill_dataframe()
756 memset(cf->data, CAN_ISOTP_DEFAULT_PAD_CONTENT, in isotp_fill_dataframe()
757 cf->len); in isotp_fill_dataframe()
762 cf->data[pcilen + i] = so->tx.buf[so->tx.idx++]; in isotp_fill_dataframe()
765 cf->data[0] = so->opt.ext_address; in isotp_fill_dataframe()
774 struct canfd_frame *cf; in isotp_send_cframe() local
797 cf = (struct canfd_frame *)skb->data; in isotp_send_cframe()
801 isotp_fill_dataframe(cf, so, ae, 0); in isotp_send_cframe()
804 cf->data[ae] = N_PCI_CF | so->tx.sn++; in isotp_send_cframe()
808 cf->flags = so->ll.tx_flags; in isotp_send_cframe()
818 so->cfecho = *(u32 *)cf->data; in isotp_send_cframe()
831 static void isotp_create_fframe(struct canfd_frame *cf, struct isotp_sock *so, in isotp_create_fframe() argument
837 cf->can_id = so->txid; in isotp_create_fframe()
838 cf->len = so->tx.ll_dl; in isotp_create_fframe()
840 cf->data[0] = so->opt.ext_address; in isotp_create_fframe()
845 cf->data[ae] = N_PCI_FF; in isotp_create_fframe()
846 cf->data[ae + 1] = 0; in isotp_create_fframe()
847 cf->data[ae + 2] = (u8)(so->tx.len >> 24) & 0xFFU; in isotp_create_fframe()
848 cf->data[ae + 3] = (u8)(so->tx.len >> 16) & 0xFFU; in isotp_create_fframe()
849 cf->data[ae + 4] = (u8)(so->tx.len >> 8) & 0xFFU; in isotp_create_fframe()
850 cf->data[ae + 5] = (u8)so->tx.len & 0xFFU; in isotp_create_fframe()
854 cf->data[ae] = (u8)(so->tx.len >> 8) | N_PCI_FF; in isotp_create_fframe()
855 cf->data[ae + 1] = (u8)so->tx.len & 0xFFU; in isotp_create_fframe()
861 cf->data[i] = so->tx.buf[so->tx.idx++]; in isotp_create_fframe()
870 struct canfd_frame *cf = (struct canfd_frame *)skb->data; in isotp_rcv_echo() local
873 if (skb->sk != sk || so->cfecho != *(u32 *)cf->data) in isotp_rcv_echo()
957 struct canfd_frame *cf; in isotp_sendmsg() local
1036 cf = (struct canfd_frame *)skb->data; in isotp_sendmsg()
1057 isotp_fill_dataframe(cf, so, ae, off); in isotp_sendmsg()
1060 cf->data[ae] = N_PCI_SF; in isotp_sendmsg()
1064 cf->data[SF_PCI_SZ4 + ae] = size; in isotp_sendmsg()
1066 cf->data[ae] |= size; in isotp_sendmsg()
1069 so->cfecho = *(u32 *)cf->data; in isotp_sendmsg()
1073 isotp_create_fframe(cf, so, ae); in isotp_sendmsg()
1086 so->cfecho = *(u32 *)cf->data; in isotp_sendmsg()
1103 cf->flags = so->ll.tx_flags; in isotp_sendmsg()