Lines Matching full:mod
99 struct cf_mod *mod);
133 struct cf_mod mod; member
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()
447 if (gwj->mod.modfunc[0]) in can_can_gw_rcv()
470 while (modidx < MAX_MODFUNCTIONS && gwj->mod.modfunc[modidx]) in can_can_gw_rcv()
471 (*gwj->mod.modfunc[modidx++])(cf, &gwj->mod); in can_can_gw_rcv()
487 if (gwj->mod.csumfunc.crc8) in can_can_gw_rcv()
488 (*gwj->mod.csumfunc.crc8)(cf, &gwj->mod.csum.crc8); in can_can_gw_rcv()
490 if (gwj->mod.csumfunc.xor) in can_can_gw_rcv()
491 (*gwj->mod.csumfunc.xor)(cf, &gwj->mod.csum.xor); in can_can_gw_rcv()
588 if (gwj->mod.modtype.and) { in cgw_put_job()
589 memcpy(&mb.cf, &gwj->mod.modframe.and, sizeof(mb.cf)); in cgw_put_job()
590 mb.modtype = gwj->mod.modtype.and; in cgw_put_job()
595 if (gwj->mod.modtype.or) { in cgw_put_job()
596 memcpy(&mb.cf, &gwj->mod.modframe.or, sizeof(mb.cf)); in cgw_put_job()
597 mb.modtype = gwj->mod.modtype.or; in cgw_put_job()
602 if (gwj->mod.modtype.xor) { in cgw_put_job()
603 memcpy(&mb.cf, &gwj->mod.modframe.xor, sizeof(mb.cf)); in cgw_put_job()
604 mb.modtype = gwj->mod.modtype.xor; in cgw_put_job()
609 if (gwj->mod.modtype.set) { in cgw_put_job()
610 memcpy(&mb.cf, &gwj->mod.modframe.set, sizeof(mb.cf)); in cgw_put_job()
611 mb.modtype = gwj->mod.modtype.set; in cgw_put_job()
618 if (gwj->mod.modtype.and) { in cgw_put_job()
619 memcpy(&mb.cf, &gwj->mod.modframe.and, sizeof(mb.cf)); in cgw_put_job()
620 mb.modtype = gwj->mod.modtype.and; in cgw_put_job()
625 if (gwj->mod.modtype.or) { in cgw_put_job()
626 memcpy(&mb.cf, &gwj->mod.modframe.or, sizeof(mb.cf)); in cgw_put_job()
627 mb.modtype = gwj->mod.modtype.or; in cgw_put_job()
632 if (gwj->mod.modtype.xor) { in cgw_put_job()
633 memcpy(&mb.cf, &gwj->mod.modframe.xor, sizeof(mb.cf)); in cgw_put_job()
634 mb.modtype = gwj->mod.modtype.xor; in cgw_put_job()
639 if (gwj->mod.modtype.set) { in cgw_put_job()
640 memcpy(&mb.cf, &gwj->mod.modframe.set, sizeof(mb.cf)); in cgw_put_job()
641 mb.modtype = gwj->mod.modtype.set; in cgw_put_job()
647 if (gwj->mod.uid) { in cgw_put_job()
648 if (nla_put_u32(skb, CGW_MOD_UID, gwj->mod.uid) < 0) in cgw_put_job()
652 if (gwj->mod.csumfunc.crc8) { in cgw_put_job()
654 &gwj->mod.csum.crc8) < 0) in cgw_put_job()
658 if (gwj->mod.csumfunc.xor) { in cgw_put_job()
660 &gwj->mod.csum.xor) < 0) in cgw_put_job()
732 static int cgw_parse_attr(struct nlmsghdr *nlh, struct cf_mod *mod, in cgw_parse_attr() argument
741 memset(mod, 0, sizeof(*mod)); in cgw_parse_attr()
762 canfdframecpy(&mod->modframe.and, &mb.cf); in cgw_parse_attr()
763 mod->modtype.and = mb.modtype; in cgw_parse_attr()
766 mod->modfunc[modidx++] = mod_and_id; in cgw_parse_attr()
769 mod->modfunc[modidx++] = mod_and_len; in cgw_parse_attr()
772 mod->modfunc[modidx++] = mod_and_flags; in cgw_parse_attr()
775 mod->modfunc[modidx++] = mod_and_fddata; in cgw_parse_attr()
781 canfdframecpy(&mod->modframe.or, &mb.cf); in cgw_parse_attr()
782 mod->modtype.or = mb.modtype; in cgw_parse_attr()
785 mod->modfunc[modidx++] = mod_or_id; in cgw_parse_attr()
788 mod->modfunc[modidx++] = mod_or_len; in cgw_parse_attr()
791 mod->modfunc[modidx++] = mod_or_flags; in cgw_parse_attr()
794 mod->modfunc[modidx++] = mod_or_fddata; in cgw_parse_attr()
800 canfdframecpy(&mod->modframe.xor, &mb.cf); in cgw_parse_attr()
801 mod->modtype.xor = mb.modtype; in cgw_parse_attr()
804 mod->modfunc[modidx++] = mod_xor_id; in cgw_parse_attr()
807 mod->modfunc[modidx++] = mod_xor_len; in cgw_parse_attr()
810 mod->modfunc[modidx++] = mod_xor_flags; in cgw_parse_attr()
813 mod->modfunc[modidx++] = mod_xor_fddata; in cgw_parse_attr()
819 canfdframecpy(&mod->modframe.set, &mb.cf); in cgw_parse_attr()
820 mod->modtype.set = mb.modtype; in cgw_parse_attr()
823 mod->modfunc[modidx++] = mod_set_id; in cgw_parse_attr()
826 mod->modfunc[modidx++] = mod_set_len; in cgw_parse_attr()
829 mod->modfunc[modidx++] = mod_set_flags; in cgw_parse_attr()
832 mod->modfunc[modidx++] = mod_set_fddata; in cgw_parse_attr()
840 canframecpy(&mod->modframe.and, &mb.cf); in cgw_parse_attr()
841 mod->modtype.and = mb.modtype; in cgw_parse_attr()
844 mod->modfunc[modidx++] = mod_and_id; in cgw_parse_attr()
847 mod->modfunc[modidx++] = mod_and_len; in cgw_parse_attr()
850 mod->modfunc[modidx++] = mod_and_data; in cgw_parse_attr()
856 canframecpy(&mod->modframe.or, &mb.cf); in cgw_parse_attr()
857 mod->modtype.or = mb.modtype; in cgw_parse_attr()
860 mod->modfunc[modidx++] = mod_or_id; in cgw_parse_attr()
863 mod->modfunc[modidx++] = mod_or_len; in cgw_parse_attr()
866 mod->modfunc[modidx++] = mod_or_data; in cgw_parse_attr()
872 canframecpy(&mod->modframe.xor, &mb.cf); in cgw_parse_attr()
873 mod->modtype.xor = mb.modtype; in cgw_parse_attr()
876 mod->modfunc[modidx++] = mod_xor_id; in cgw_parse_attr()
879 mod->modfunc[modidx++] = mod_xor_len; in cgw_parse_attr()
882 mod->modfunc[modidx++] = mod_xor_data; in cgw_parse_attr()
888 canframecpy(&mod->modframe.set, &mb.cf); in cgw_parse_attr()
889 mod->modtype.set = mb.modtype; in cgw_parse_attr()
892 mod->modfunc[modidx++] = mod_set_id; in cgw_parse_attr()
895 mod->modfunc[modidx++] = mod_set_len; in cgw_parse_attr()
898 mod->modfunc[modidx++] = mod_set_data; in cgw_parse_attr()
912 nla_memcpy(&mod->csum.crc8, tb[CGW_CS_CRC8], in cgw_parse_attr()
920 mod->csumfunc.crc8 = cgw_csum_crc8_rel; in cgw_parse_attr()
922 mod->csumfunc.crc8 = cgw_csum_crc8_pos; in cgw_parse_attr()
924 mod->csumfunc.crc8 = cgw_csum_crc8_neg; in cgw_parse_attr()
935 nla_memcpy(&mod->csum.xor, tb[CGW_CS_XOR], in cgw_parse_attr()
943 mod->csumfunc.xor = cgw_csum_xor_rel; in cgw_parse_attr()
945 mod->csumfunc.xor = cgw_csum_xor_pos; in cgw_parse_attr()
947 mod->csumfunc.xor = cgw_csum_xor_neg; in cgw_parse_attr()
951 nla_memcpy(&mod->uid, tb[CGW_MOD_UID], sizeof(u32)); in cgw_parse_attr()
994 struct cf_mod mod; in cgw_create_job() local
1013 err = cgw_parse_attr(nlh, &mod, CGW_TYPE_CAN_CAN, &ccgw, &limhops); in cgw_create_job()
1017 if (mod.uid) { in cgw_create_job()
1022 if (gwj->mod.uid != mod.uid) in cgw_create_job()
1031 memcpy(&gwj->mod, &mod, sizeof(mod)); in cgw_create_job()
1053 memcpy(&gwj->mod, &mod, sizeof(mod)); in cgw_create_job()
1108 struct cf_mod mod; in cgw_remove_job() local
1127 err = cgw_parse_attr(nlh, &mod, CGW_TYPE_CAN_CAN, &ccgw, &limhops); in cgw_remove_job()
1150 if (gwj->mod.uid || mod.uid) { in cgw_remove_job()
1151 if (gwj->mod.uid != mod.uid) in cgw_remove_job()
1155 if (memcmp(&gwj->mod, &mod, sizeof(mod))) in cgw_remove_job()