- 论坛徽章:
- 0
|
本人菜鸟一枚,写驱动有许多问题,请大家指教
我在写hsi驱动的中断时,在read函数中调用wait_event_interrupbile()函数,当前进程就会挂起。这时候触发中断,进入中断处理函数,想在中断处理函数中wake_up唤醒当前进程,但是wake_up中的参数不会传递,代码如下:
static ssize_t hsc_read(struct *file, char __user *buf, size_t len, loff_t *ppos __maybe_unused)
{
struct hsc_channel *channel = file->private_data;
struct hsi_msg *msg;
ssize_t ret;
... ...
ret = wait_event_interruptible(channel->rx_wait, !list_empty(&channel->free_msgs_list));
... ...
msg = hsc_get_first_msg(channel->free_msgs_list);
... ...
copy_to_user((void __user *)buf, sg_virt(msg->sgt.sgl), len);
... ...
}
中断处理函数:
static irqreturn_t hsi_imx_isr(int irq, void *dev_id)
{
struct hsi_imx_data *hsi_imx = dev_id;
.... ....
wake_up(&channel->rx_wait);
return IRQ_HANDLED;
}
其中wake_up函数的参数正式wait_event_interruptible中的第一个参数,但是中断处理函数位于hsi_imx.c文件中,read函数位于hsi_char.c中,那么关于这个参数channel怎么才能传递? |
|