int can_Config( struct inode *inode, int target, unsigned long val1, unsigned long val2 ) { unsigned int minor = MINOR(inode->i_rdev); switch(target) { case CONF_ACC: DBGprint(DBG_DATA,("mask = 0x%lx, code = 0x%lx", val1, val2)); AccMask[minor] = val1; AccCode[minor] = val2; CAN_SetMask(minor, AccCode[minor], AccMask[minor]); break; case CONF_ACCM: DBGprint(DBG_DATA,("acc_mask=0x%lx", val1)); AccMask[minor] = val1; CAN_SetMask(minor, AccCode[minor], AccMask[minor]); break; case CONF_ACCC: DBGprint(DBG_DATA,("acc_code=0x%lx", val1)); AccCode[minor] = val1; CAN_SetMask(minor, AccCode[minor], AccMask[minor]); break; case CONF_TIMING: Baud[minor] = val1; CAN_SetTiming(minor,(int) val1); break; case CONF_OMODE: CAN_SetOMode( minor, (int) val1); break; #if CAN_USE_FILTER case CONF_FILTER: Can_FilterOnOff( minor, (int) val1 ); break; case CONF_FENABLE: Can_FilterMessage( minor, (int) val1, 1); break; case CONF_FDISABLE: Can_FilterMessage( minor, (int) val1, 0); break; #endif default: DBGout(); return(-EINVAL); } return 0; }
int can_Config( struct inode *inode, struct file *file, int target, unsigned long val1, unsigned long val2 ) { unsigned int minor = iminor(inode); int rx_fifo = ((struct _instance_data *)(file->private_data))->rx_index; int ret; DBGin(); ret = -EINVAL; switch(target) { case CONF_ACC: /* set the first code/mask pair */ #if defined(IMX35) || defined(IMX25) ret = CAN_SetMask(minor, 0, val2, val1); #else ret = CAN_SetMask(minor, val2, val1); #endif break; case CONF_ACCM: /* set the first mask only */ #if defined(IMX35) || defined(IMX25) ret = CAN_SetMask(minor, 0, AccCode[minor][0], val1); #else ret = CAN_SetMask(minor, AccCode[minor], val1); #endif break; case CONF_ACCC: /* the first code only */ #if defined(IMX35) || defined(IMX25) ret = CAN_SetMask(minor, 0, val1, AccMask[minor][0]); #else ret = CAN_SetMask(minor, val1, AccMask[minor]); #endif break; #if defined(IMX35) || defined(IMX25) case CONF_ACC1: /* set the first additional code/mask pair */ ret = CAN_SetMask(minor, 1, val2, val1); break; case CONF_ACC2: ret = CAN_SetMask(minor, 2, val2, val1); break; case CONF_ACC3: ret = CAN_SetMask(minor, 3, val2, val1); break; case CONF_ACC4: ret = CAN_SetMask(minor, 4, val2, val1); break; case CONF_ACC5: ret = CAN_SetMask(minor, 5, val2, val1); break; case CONF_ACC6: ret = CAN_SetMask(minor, 6, val2, val1); break; case CONF_ACC7: ret = CAN_SetMask(minor, 7, val2, val1); break; #endif case CONF_TIMING: ret = CAN_SetTiming(minor,(int) val1); if (0 == ret) { Baud[minor] = val1; } else { ret = -EINVAL; } break; case CONF_OMODE: ret = CAN_SetOMode( minor, (int) val1); break; #if CAN_USE_FILTER case CONF_FILTER: Can_FilterOnOff( minor, (int) val1 ); break; case CONF_FENABLE: Can_FilterMessage( minor, (int) val1, 1); break; case CONF_FDISABLE: Can_FilterMessage( minor, (int) val1, 0); break; #endif case CONF_LISTEN_ONLY_MODE: ret = CAN_SetListenOnlyMode( minor, (int) val1); break; case CONF_SELF_RECEPTION: DBGprint(DBG_DATA, ("setting selfreception of minor %d to %d\n", minor, (int)val1)); selfreception[minor][rx_fifo] = (int)val1; ret = 0; break; case CONF_TIMESTAMP: use_timestamp[minor] = (int)val1; ret = 0; break; case CONF_WAKEUP: wakeup[minor] = (int)val1; ret = 0; break; case CONF_BTR: ret = CAN_SetBTR(minor, (int)val1, (int)val2); break; default: ret = -EINVAL; } DBGout(); return ret; }