ufshcd_queuecommand函数使用示例
时间: 2023-08-02 11:06:29 浏览: 240
ufshcd_queuecommand函数是基于UFSHCI(Universal Flash Storage Host Controller Interface)的命令队列接口,在Linux内核中实现了驱动程序。该函数用于将一个UFS命令添加到命令队列中,以便由UFS主机控制器发送到UFS设备。以下是ufshcd_queuecommand函数的使用示例:
```c
static int my_ufs_command(struct ufs_hba *hba, struct ufs_cmd *cmd)
{
int err;
unsigned long flags;
struct ufshcd_lrb *lrb;
struct ufshcd_host *host = ufshcd_get_host(hba);
/* 分配命令请求块 */
lrb = ufshcd_alloc_lrb(host);
if (!lrb)
return -ENOMEM;
/* 填充命令请求块 */
ufshcd_prepare_lrb(lrb, cmd, host);
/* 获取自旋锁 */
spin_lock_irqsave(host->host_lock, flags);
/* 将命令请求块添加到命令队列中 */
err = ufshcd_queuecommand(hba, lrb, /*tag*/0);
if (err) {
spin_unlock_irqrestore(host->host_lock, flags);
ufshcd_put_lrb(host, lrb);
dev_err(hba->dev, "command error: %d\n", err);
return err;
}
/* 释放自旋锁 */
spin_unlock_irqrestore(host->host_lock, flags);
return 0;
}
```
在该示例中,ufshcd_queuecommand函数被用于将一个UFS命令添加到命令队列中。该函数的参数包括UFS主机控制器、命令请求块和标签。命令请求块是一个数据结构,用于存储UFS命令的相关信息,包括命令数据、命令长度和命令类型等。标签用于标识该命令请求块,以便在命令队列中进行跟踪和管理。
在ufshcd_queuecommand函数返回之前,该函数会将命令请求块添加到命令队列中,并返回0。如果发生错误,该函数会返回一个负数错误代码。在该示例中,如果ufshcd_queuecommand函数返回错误,那么命令请求块将被释放,并打印一个错误消息。
请注意,ufshcd_queuecommand函数通常在中断上下文中调用,因此必须采取适当的措施来避免竞争条件和死锁问题。
阅读全文