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;
}
Beispiel #2
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;
}