kopia lustrzana https://github.com/cariboulabs/cariboulite
added kernel module runtime parameter change (ioctls)
rodzic
ff3ffb296e
commit
cc786d6d82
|
@ -421,6 +421,76 @@ static long smi_stream_ioctl(struct file *file, unsigned int cmd, unsigned long
|
|||
|
||||
break;
|
||||
}
|
||||
//-------------------------------
|
||||
case SMI_STREAM_IOC_SET_FIFO_MULT:
|
||||
{
|
||||
int temp = (int)arg;
|
||||
if (temp > 20 || temp < 2)
|
||||
{
|
||||
dev_err(inst->dev, "Parameter error: 2<fifo_mtu_multiplier<20, got %d", temp);
|
||||
return -EINVAL;
|
||||
}
|
||||
dev_info(inst->dev, "Setting FIFO size multiplier to %d", temp);
|
||||
fifo_mtu_multiplier = temp;
|
||||
break;
|
||||
}
|
||||
//-------------------------------
|
||||
case SMI_STREAM_IOC_SET_ADDR_DIR_OFFSET:
|
||||
{
|
||||
int temp = (int)arg;
|
||||
if (temp > 4 || temp < -1)
|
||||
{
|
||||
dev_err(inst->dev, "Parameter error: 0<=addr_dir_offset<=4 or (-1 - unused), got %d", temp);
|
||||
return -EINVAL;
|
||||
}
|
||||
dev_info(inst->dev, "Setting address direction indication offset to %d", temp);
|
||||
addr_dir_offset = temp;
|
||||
break;
|
||||
}
|
||||
//-------------------------------
|
||||
case SMI_STREAM_IOC_SET_ADDR_CH_OFFSET:
|
||||
{
|
||||
int temp = (int)arg;
|
||||
if (temp > 4 || temp < -1)
|
||||
{
|
||||
dev_err(inst->dev, "Parameter error: 0<=addr_ch_offset<=4 or (-1 - unused), got %d", temp);
|
||||
return -EINVAL;
|
||||
}
|
||||
dev_info(inst->dev, "Setting address channel indication offset to %d", temp);
|
||||
addr_ch_offset = temp;
|
||||
break;
|
||||
}
|
||||
|
||||
//-------------------------------
|
||||
case SMI_STREAM_IOC_GET_FIFO_MULT:
|
||||
{
|
||||
dev_dbg(inst->dev, "Reading FIFO size multiplier of %d", fifo_mtu_multiplier);
|
||||
if (copy_to_user((void *)arg, &fifo_mtu_multiplier, sizeof(fifo_mtu_multiplier)))
|
||||
{
|
||||
dev_err(inst->dev, "fifo_mtu_multiplier copy failed.");
|
||||
}
|
||||
break;
|
||||
}
|
||||
//-------------------------------
|
||||
case SMI_STREAM_IOC_GET_ADDR_DIR_OFFSET:
|
||||
{
|
||||
dev_dbg(inst->dev, "Reading address direction indication offset of %d", addr_dir_offset);
|
||||
if (copy_to_user((void *)arg, &addr_dir_offset, sizeof(addr_dir_offset)))
|
||||
{
|
||||
dev_err(inst->dev, "addr_dir_offset copy failed.");
|
||||
}
|
||||
break;
|
||||
}
|
||||
//-------------------------------
|
||||
case SMI_STREAM_IOC_GET_ADDR_CH_OFFSET:
|
||||
{
|
||||
dev_dbg(inst->dev, "Reading address channel indication offset of %d", addr_ch_offset);
|
||||
if (copy_to_user((void *)arg, &addr_ch_offset, sizeof(addr_ch_offset)))
|
||||
{
|
||||
dev_err(inst->dev, "addr_ch_offset copy failed.");
|
||||
}
|
||||
break;
|
||||
}
|
||||
//-------------------------------
|
||||
default:
|
||||
dev_err(inst->dev, "invalid ioctl cmd: %d", cmd);
|
||||
|
|
|
@ -99,5 +99,11 @@ struct bcm2835_smi_instance {
|
|||
#define SMI_STREAM_IOC_GET_NATIVE_BUF_SIZE _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+1))
|
||||
#define SMI_STREAM_IOC_SET_STREAM_STATUS _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+2))
|
||||
#define SMI_STREAM_IOC_SET_STREAM_IN_CHANNEL _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+3))
|
||||
#define SMI_STREAM_IOC_SET_FIFO_MULT _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+4))
|
||||
#define SMI_STREAM_IOC_SET_ADDR_DIR_OFFSET _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+5))
|
||||
#define SMI_STREAM_IOC_SET_ADDR_CH_OFFSET _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+6))
|
||||
#define SMI_STREAM_IOC_GET_FIFO_MULT _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+7))
|
||||
#define SMI_STREAM_IOC_GET_ADDR_DIR_OFFSET _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+8))
|
||||
#define SMI_STREAM_IOC_GET_ADDR_CH_OFFSET _IO(BCM2835_SMI_IOC_MAGIC,(BCM2835_SMI_IOC_MAX+9))
|
||||
|
||||
#endif /* _SMI_STREAM_DEV_H_ */
|
||||
|
|
Ładowanie…
Reference in New Issue