virtio协议1.0 -- 基础组件

这里描述符的是virito的通用基础组件,不依赖于总线类型,如PCI,MMIO, Channel IO 等

0. virtio基本基础组件

  • Device status 域
  • Feature bits
  • Device Configuration space
  • 一个或多个 virtqueues

1. Device status 域

驱动在发现和加载设备过程中,会经历一系列加载步骤,device status 就是在底层提示加载步骤的完成状态,底层设备通过这些状态值,知道需要完成的事情

  • 状态
    • ACKNOWLEDGE (1) 客户系统发现了设备,并且知道是一个virtio设备
    • DRIVER (2) :客户系统找到了对应的驱动
    • FAILED (128): 客户系统的驱动有问题,加载失败
    • FEATURES_OK (8) 驱动已经取得了所有的features bit并协商完成了
    • DRIVER_OK (4) :驱动安装完成
    • DEVICE_NEEDS_RESET (64) :设备有问题且问题设备无法恢复
  • 驱动
    • 按照初始化步骤,不断设定device status域
    • 不能清除,只能写入
    • 设置了FAILED,在重新初始化前,必须对设备进行reset
    • 不可以依赖DEVICE_NEEDS_RESET来处理in flight数据,应在在设备重启后,重新发送
  • 设备
    • 设备在reset的时候,device status域必须归零
    • 在 DRIVER_OK 前,不能处理数据
    • 设备进入错误状态的时候,必须设置 DEVICE_NEEDS_RESET 位,然后发送 device configuration change 中断

2. Feature Bits

设备提供所有支持的 features bit,在设备初始化期间,驱动读取 features bit 并告诉设备哪些 features 被接受,一旦协商完成,再需要协商的话,需要reset设备。通过 features bit 可以完成向后兼容,驱动可以选择最新能力的feature bit或者选择不接受没有实现的feature

  • feature 位分配
    • 0 to 23 特定类型设备的 feature bits
    • 24 to 32 queue 的 feature bits 
    • 33 and above 保留.
    • 有些feature bit 会表示设备有新的configuration space域
  • 驱动
    • 不能接受没有实现的特性的feature bits,包括关联的
    • 如果设备提供的feature bits比较旧,驱动应切换为老模式,或者停止初始化
  • 设备
    • 不能提供没有实现的特性的feature bits,包括关联的
    • 接受并校验驱动提供的feature bits的子集
    • 当dirver写回feature bits后,设定FEATURES_OK状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值