From: hartkopp Date: Fri, 12 Mar 2010 16:48:13 +0000 (+0000) Subject: Reduce codesize by using a macro. X-Git-Url: https://rtime.felk.cvut.cz/gitweb/socketcan-devel.git/commitdiff_plain/dba5d2df56821db0c8ba6d8c957ea769b52533ef Reduce codesize by using a macro. git-svn-id: svn://svn.berlios.de//socketcan/trunk@1161 030b6a49-0b11-0410-94ab-b0dab22257f2 --- diff --git a/kernel/2.6/net/can/gw.c b/kernel/2.6/net/can/gw.c index 7225b5f..895fce7 100644 --- a/kernel/2.6/net/can/gw.c +++ b/kernel/2.6/net/can/gw.c @@ -122,42 +122,22 @@ struct gw_job { #define CAN_TX_SRC_TSTAMP 0x00000002 /* modification functions that are invoked in the hot path in gw_rcv */ -static void mod_and_id (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_id &= mod->modframe.and.can_id; -} -static void mod_and_dlc (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_dlc &= mod->modframe.and.can_dlc; -} -static void mod_and_data (struct can_frame *cf, struct can_can_gw *mod) { - *(u64 *)cf->data &= *(u64 *)mod->modframe.and.data; -} -static void mod_or_id (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_id |= mod->modframe.or.can_id; -} -static void mod_or_dlc (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_dlc |= mod->modframe.or.can_dlc; -} -static void mod_or_data (struct can_frame *cf, struct can_can_gw *mod) { - *(u64 *)cf->data |= *(u64 *)mod->modframe.or.data; -} -static void mod_xor_id (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_id ^= mod->modframe.xor.can_id; -} -static void mod_xor_dlc (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_dlc ^= mod->modframe.xor.can_dlc; -} -static void mod_xor_data (struct can_frame *cf, struct can_can_gw *mod) { - *(u64 *)cf->data ^= *(u64 *)mod->modframe.xor.data; -} -static void mod_set_id (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_id = mod->modframe.set.can_id; -} -static void mod_set_dlc (struct can_frame *cf, struct can_can_gw *mod) { - cf->can_dlc = mod->modframe.set.can_dlc; -} -static void mod_set_data (struct can_frame *cf, struct can_can_gw *mod) { - *(u64 *)cf->data = *(u64 *)mod->modframe.set.data; -} + +#define MODFUNC(func, op) static void func (struct can_frame *cf, \ + struct can_can_gw *mod) { op ; } + +MODFUNC(mod_and_id, cf->can_id &= mod->modframe.and.can_id) +MODFUNC(mod_and_dlc, cf->can_dlc &= mod->modframe.and.can_dlc) +MODFUNC(mod_and_data, *(u64 *)cf->data &= *(u64 *)mod->modframe.and.data) +MODFUNC(mod_or_id, cf->can_id |= mod->modframe.or.can_id) +MODFUNC(mod_or_dlc, cf->can_dlc |= mod->modframe.or.can_dlc) +MODFUNC(mod_or_data, *(u64 *)cf->data |= *(u64 *)mod->modframe.or.data) +MODFUNC(mod_xor_id, cf->can_id ^= mod->modframe.xor.can_id) +MODFUNC(mod_xor_dlc, cf->can_dlc ^= mod->modframe.xor.can_dlc) +MODFUNC(mod_xor_data, *(u64 *)cf->data ^= *(u64 *)mod->modframe.xor.data) +MODFUNC(mod_set_id, cf->can_id = mod->modframe.set.can_id) +MODFUNC(mod_set_dlc, cf->can_dlc = mod->modframe.set.can_dlc) +MODFUNC(mod_set_data, *(u64 *)cf->data = *(u64 *)mod->modframe.set.data) static inline void canframecpy(struct can_frame *dst, struct can_frame *src) {