Lines Matching full:mod

99 					  struct cf_mod *mod);
154 struct cf_mod *mod) { op ; }
156 MODFUNC(mod_and_id, cf->can_id &= mod->modframe.and.can_id)
157 MODFUNC(mod_and_len, cf->len &= mod->modframe.and.len)
158 MODFUNC(mod_and_flags, cf->flags &= mod->modframe.and.flags)
159 MODFUNC(mod_and_data, *(u64 *)cf->data &= *(u64 *)mod->modframe.and.data)
160 MODFUNC(mod_or_id, cf->can_id |= mod->modframe.or.can_id)
161 MODFUNC(mod_or_len, cf->len |= mod->modframe.or.len)
162 MODFUNC(mod_or_flags, cf->flags |= mod->modframe.or.flags)
163 MODFUNC(mod_or_data, *(u64 *)cf->data |= *(u64 *)mod->modframe.or.data)
164 MODFUNC(mod_xor_id, cf->can_id ^= mod->modframe.xor.can_id)
165 MODFUNC(mod_xor_len, cf->len ^= mod->modframe.xor.len)
166 MODFUNC(mod_xor_flags, cf->flags ^= mod->modframe.xor.flags)
167 MODFUNC(mod_xor_data, *(u64 *)cf->data ^= *(u64 *)mod->modframe.xor.data)
168 MODFUNC(mod_set_id, cf->can_id = mod->modframe.set.can_id)
169 MODFUNC(mod_set_len, cf->len = mod->modframe.set.len)
170 MODFUNC(mod_set_flags, cf->flags = mod->modframe.set.flags)
171 MODFUNC(mod_set_data, *(u64 *)cf->data = *(u64 *)mod->modframe.set.data)
173 static void mod_and_fddata(struct canfd_frame *cf, struct cf_mod *mod) in mod_and_fddata() argument
178 *(u64 *)(cf->data + i) &= *(u64 *)(mod->modframe.and.data + i); in mod_and_fddata()
181 static void mod_or_fddata(struct canfd_frame *cf, struct cf_mod *mod) in mod_or_fddata() argument
186 *(u64 *)(cf->data + i) |= *(u64 *)(mod->modframe.or.data + i); in mod_or_fddata()
189 static void mod_xor_fddata(struct canfd_frame *cf, struct cf_mod *mod) in mod_xor_fddata() argument
194 *(u64 *)(cf->data + i) ^= *(u64 *)(mod->modframe.xor.data + i); in mod_xor_fddata()
197 static void mod_set_fddata(struct canfd_frame *cf, struct cf_mod *mod) in mod_set_fddata() argument
199 memcpy(cf->data, mod->modframe.set.data, CANFD_MAX_DLEN); in mod_set_fddata()
237 static void mod_and_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) in mod_and_ccdlc() argument
240 mod_and_len(cf, mod); in mod_and_ccdlc()
244 static void mod_or_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) in mod_or_ccdlc() argument
247 mod_or_len(cf, mod); in mod_or_ccdlc()
251 static void mod_xor_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) in mod_xor_ccdlc() argument
254 mod_xor_len(cf, mod); in mod_xor_ccdlc()
258 static void mod_set_ccdlc(struct canfd_frame *cf, struct cf_mod *mod) in mod_set_ccdlc() argument
260 mod_set_len(cf, mod); in mod_set_ccdlc()
462 struct cf_mod *mod; in can_can_gw_rcv() local
510 mod = rcu_dereference(gwj->cf_mod); in can_can_gw_rcv()
511 if (mod->modfunc[0]) in can_can_gw_rcv()
534 while (modidx < MAX_MODFUNCTIONS && mod->modfunc[modidx]) in can_can_gw_rcv()
535 (*mod->modfunc[modidx++])(cf, mod); in can_can_gw_rcv()
551 if (mod->csumfunc.crc8) in can_can_gw_rcv()
552 (*mod->csumfunc.crc8)(cf, &mod->csum.crc8); in can_can_gw_rcv()
554 if (mod->csumfunc.xor) in can_can_gw_rcv()
555 (*mod->csumfunc.xor)(cf, &mod->csum.xor); in can_can_gw_rcv()
632 struct cf_mod *mod; in cgw_put_job() local
667 mod = cgw_job_cf_mod(gwj); in cgw_put_job()
671 if (mod->modtype.and) { in cgw_put_job()
672 memcpy(&mb.cf, &mod->modframe.and, sizeof(mb.cf)); in cgw_put_job()
673 mb.modtype = mod->modtype.and; in cgw_put_job()
678 if (mod->modtype.or) { in cgw_put_job()
679 memcpy(&mb.cf, &mod->modframe.or, sizeof(mb.cf)); in cgw_put_job()
680 mb.modtype = mod->modtype.or; in cgw_put_job()
685 if (mod->modtype.xor) { in cgw_put_job()
686 memcpy(&mb.cf, &mod->modframe.xor, sizeof(mb.cf)); in cgw_put_job()
687 mb.modtype = mod->modtype.xor; in cgw_put_job()
692 if (mod->modtype.set) { in cgw_put_job()
693 memcpy(&mb.cf, &mod->modframe.set, sizeof(mb.cf)); in cgw_put_job()
694 mb.modtype = mod->modtype.set; in cgw_put_job()
701 if (mod->modtype.and) { in cgw_put_job()
702 memcpy(&mb.cf, &mod->modframe.and, sizeof(mb.cf)); in cgw_put_job()
703 mb.modtype = mod->modtype.and; in cgw_put_job()
708 if (mod->modtype.or) { in cgw_put_job()
709 memcpy(&mb.cf, &mod->modframe.or, sizeof(mb.cf)); in cgw_put_job()
710 mb.modtype = mod->modtype.or; in cgw_put_job()
715 if (mod->modtype.xor) { in cgw_put_job()
716 memcpy(&mb.cf, &mod->modframe.xor, sizeof(mb.cf)); in cgw_put_job()
717 mb.modtype = mod->modtype.xor; in cgw_put_job()
722 if (mod->modtype.set) { in cgw_put_job()
723 memcpy(&mb.cf, &mod->modframe.set, sizeof(mb.cf)); in cgw_put_job()
724 mb.modtype = mod->modtype.set; in cgw_put_job()
730 if (mod->uid) { in cgw_put_job()
731 if (nla_put_u32(skb, CGW_MOD_UID, mod->uid) < 0) in cgw_put_job()
735 if (mod->csumfunc.crc8) { in cgw_put_job()
737 &mod->csum.crc8) < 0) in cgw_put_job()
741 if (mod->csumfunc.xor) { in cgw_put_job()
743 &mod->csum.xor) < 0) in cgw_put_job()
815 static int cgw_parse_attr(struct nlmsghdr *nlh, struct cf_mod *mod, in cgw_parse_attr() argument
824 memset(mod, 0, sizeof(*mod)); in cgw_parse_attr()
845 canfdframecpy(&mod->modframe.and, &mb.cf); in cgw_parse_attr()
846 mod->modtype.and = mb.modtype; in cgw_parse_attr()
849 mod->modfunc[modidx++] = mod_and_id; in cgw_parse_attr()
852 mod->modfunc[modidx++] = mod_and_len; in cgw_parse_attr()
855 mod->modfunc[modidx++] = mod_and_flags; in cgw_parse_attr()
858 mod->modfunc[modidx++] = mod_and_fddata; in cgw_parse_attr()
864 canfdframecpy(&mod->modframe.or, &mb.cf); in cgw_parse_attr()
865 mod->modtype.or = mb.modtype; in cgw_parse_attr()
868 mod->modfunc[modidx++] = mod_or_id; in cgw_parse_attr()
871 mod->modfunc[modidx++] = mod_or_len; in cgw_parse_attr()
874 mod->modfunc[modidx++] = mod_or_flags; in cgw_parse_attr()
877 mod->modfunc[modidx++] = mod_or_fddata; in cgw_parse_attr()
883 canfdframecpy(&mod->modframe.xor, &mb.cf); in cgw_parse_attr()
884 mod->modtype.xor = mb.modtype; in cgw_parse_attr()
887 mod->modfunc[modidx++] = mod_xor_id; in cgw_parse_attr()
890 mod->modfunc[modidx++] = mod_xor_len; in cgw_parse_attr()
893 mod->modfunc[modidx++] = mod_xor_flags; in cgw_parse_attr()
896 mod->modfunc[modidx++] = mod_xor_fddata; in cgw_parse_attr()
902 canfdframecpy(&mod->modframe.set, &mb.cf); in cgw_parse_attr()
903 mod->modtype.set = mb.modtype; in cgw_parse_attr()
906 mod->modfunc[modidx++] = mod_set_id; in cgw_parse_attr()
909 mod->modfunc[modidx++] = mod_set_len; in cgw_parse_attr()
912 mod->modfunc[modidx++] = mod_set_flags; in cgw_parse_attr()
915 mod->modfunc[modidx++] = mod_set_fddata; in cgw_parse_attr()
923 canframecpy(&mod->modframe.and, &mb.cf); in cgw_parse_attr()
924 mod->modtype.and = mb.modtype; in cgw_parse_attr()
927 mod->modfunc[modidx++] = mod_and_id; in cgw_parse_attr()
930 mod->modfunc[modidx++] = mod_and_ccdlc; in cgw_parse_attr()
933 mod->modfunc[modidx++] = mod_and_data; in cgw_parse_attr()
939 canframecpy(&mod->modframe.or, &mb.cf); in cgw_parse_attr()
940 mod->modtype.or = mb.modtype; in cgw_parse_attr()
943 mod->modfunc[modidx++] = mod_or_id; in cgw_parse_attr()
946 mod->modfunc[modidx++] = mod_or_ccdlc; in cgw_parse_attr()
949 mod->modfunc[modidx++] = mod_or_data; in cgw_parse_attr()
955 canframecpy(&mod->modframe.xor, &mb.cf); in cgw_parse_attr()
956 mod->modtype.xor = mb.modtype; in cgw_parse_attr()
959 mod->modfunc[modidx++] = mod_xor_id; in cgw_parse_attr()
962 mod->modfunc[modidx++] = mod_xor_ccdlc; in cgw_parse_attr()
965 mod->modfunc[modidx++] = mod_xor_data; in cgw_parse_attr()
971 canframecpy(&mod->modframe.set, &mb.cf); in cgw_parse_attr()
972 mod->modtype.set = mb.modtype; in cgw_parse_attr()
975 mod->modfunc[modidx++] = mod_set_id; in cgw_parse_attr()
978 mod->modfunc[modidx++] = mod_set_ccdlc; in cgw_parse_attr()
981 mod->modfunc[modidx++] = mod_set_data; in cgw_parse_attr()
995 nla_memcpy(&mod->csum.crc8, tb[CGW_CS_CRC8], in cgw_parse_attr()
1003 mod->csumfunc.crc8 = cgw_csum_crc8_rel; in cgw_parse_attr()
1005 mod->csumfunc.crc8 = cgw_csum_crc8_pos; in cgw_parse_attr()
1007 mod->csumfunc.crc8 = cgw_csum_crc8_neg; in cgw_parse_attr()
1018 nla_memcpy(&mod->csum.xor, tb[CGW_CS_XOR], in cgw_parse_attr()
1026 mod->csumfunc.xor = cgw_csum_xor_rel; in cgw_parse_attr()
1028 mod->csumfunc.xor = cgw_csum_xor_pos; in cgw_parse_attr()
1030 mod->csumfunc.xor = cgw_csum_xor_neg; in cgw_parse_attr()
1034 nla_memcpy(&mod->uid, tb[CGW_MOD_UID], sizeof(u32)); in cgw_parse_attr()
1077 struct cf_mod *mod; in cgw_create_job() local
1096 mod = kmalloc(sizeof(*mod), GFP_KERNEL); in cgw_create_job()
1097 if (!mod) in cgw_create_job()
1100 err = cgw_parse_attr(nlh, mod, CGW_TYPE_CAN_CAN, &ccgw, &limhops); in cgw_create_job()
1104 if (mod->uid) { in cgw_create_job()
1112 if (old_cf->uid != mod->uid) in cgw_create_job()
1121 rcu_assign_pointer(gwj->cf_mod, mod); in cgw_create_job()
1147 RCU_INIT_POINTER(gwj->cf_mod, mod); in cgw_create_job()
1184 kfree(mod); in cgw_create_job()
1210 struct cf_mod mod; in cgw_remove_job() local
1229 err = cgw_parse_attr(nlh, &mod, CGW_TYPE_CAN_CAN, &ccgw, &limhops); in cgw_remove_job()
1255 if (cf_mod->uid || mod.uid) { in cgw_remove_job()
1256 if (cf_mod->uid != mod.uid) in cgw_remove_job()
1260 if (memcmp(cf_mod, &mod, sizeof(mod))) in cgw_remove_job()