豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 502 行 · 28528 字节 · UTF-8
§
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「平台」之书。
寻观「客体二号」之「基础」之书。
寻观「客体二号」之「实例」之书。

「:文言:块设备之驱:现代 Virtio 块设备,用户态驱动,供文件系统用之。汉语:Virtio 块设备的用户态驱动(现代协议,单队列大小 8、一次一个请求、512 字节扇区)。执行器的线性内存会迁入动态块,设备只能经内核授予的静态窗口(用户空间静态区,设备地址 = 静态偏移 + 0x1000)做 DMA,所以队列、请求头、状态与数据缓冲都放在静态窗口内的固定偏移,用户态只经内核服务“搬入静态/搬出静态”存取。宿主提供设备配置读、设备寄存器读写、搬入静态、搬出静态五个导入。:」

「:文言:宿主之导入。汉语:宿主提供的设备访问导入(与内核服务一一对应)。:」
「设备配置读」乃化「整数」而「整数」也。
「设备配置读」者会「偏」而
  《《外调》》名『导入:平台:设备配置读:1:1』传「偏」
也。

「设备寄存器读」乃化「整数」而「整数」也。
「设备寄存器读」者会「字」而
  《《外调》》名『导入:平台:设备寄存器读:1:1』传「字」
也。

「设备寄存器写」乃化「整数」而化「整数」而「整数」也。
「设备寄存器写」者会「字」而会「值」而
  《《外调》》名『导入:平台:设备寄存器写:2:1』传「字」与「值」
也。

「搬入静态」乃化「整数」而化「整数」而「整数」也。
「搬入静态」者会「址」而会「窗」而
  《《外调》》名『导入:平台:搬入静态:2:1』传「址」与「窗」
也。

「搬出静态」乃化「整数」而化「整数」而「整数」也。
「搬出静态」者会「址」而会「窗」而
  《《外调》》名『导入:平台:搬出静态:2:1』传「址」与「窗」
也。

「:文言:静态窗内之 DMA 区与暂存。汉语:静态窗口内的 DMA 区(静态偏移;设备地址再加 设备偏)与线性内存里的驱动状态格、暂存。窗参数 = 静态偏移 | (长度 << 20)。:」
「静_描述」者「四五八七五二」也。 「:汉语:描述符表 8 项 × 16 B:」
「静_可用」者「四五八八八零」也。 「:汉语:可用环:标志、索引、8 项环:」
「静_已用」者「四五八九一二」也。 「:汉语:已用环:标志、索引、8 项 × 8 B:」
「静_头」者「四五九零零八」也。 「:汉语:请求头 16 B,紧随其后的一字节是状态:」
「静_状态」者「四五九零二四」也。

「静_数据」者「四五九二六四」也。 「:汉语:512 字节数据缓冲:」
「静_区长」者「五一二」也。

「设备偏」者「四零九六」也。

「状态_块态」者「二三六八」也。 「:汉语:0 未试 1 就绪 2 失败:」
「状态_块容量」者「二三七二」也。 「:汉语:扇区数(高位非零时饱和):」
「状态_块只读」者「二三七六」也。

「状态_块通知」者「二三八零」也。 「:汉语:通知寄存器字(宽 2 | 偏移):」
「状态_块序」者「二三八四」也。 「:汉语:已发布的可用索引(十六位):」
「块头暂存」者「二五六零」也。 「:汉语:请求头 16 B + 状态 1 B:」
「块描暂存」者「二五九二」也。 「:汉语:描述符 3 项 48 B:」
「块用暂存」者「二六五六」也。 「:汉语:已用环副本 72 B:」
「块杂暂存」者「二七五二」也。 「:汉语:环项与索引:」
「块初暂存」者「三零七二」也。 「:汉语:初始化时的 512 字节影像:」

「:文言:寄存与窗之小助。汉语:小助手:寄存器写成功、窗搬运成功。:」
「寄存写成」乃化「整数」而化「整数」而「爻」也。
「寄存写成」者会「字」而会「值」而
  「等零」于(「设备寄存器写」于「字」于「值」)
也。

「窗参数」乃化「整数」而化「整数」而「整数」也。
「窗参数」者会「静偏」而会「长」而
  「位或」于「静偏」于(「左移」于「长」于「二零」)
也。

「搬入成」乃化「整数」而化「整数」而化「整数」而「爻」也。
「搬入成」者会「址」而会「静偏」而会「长」而
  「等零」于(「搬入静态」于「址」于(「窗参数」于「静偏」于「长」))
也。

「搬出成」乃化「整数」而化「整数」而化「整数」而「爻」也。
「搬出成」者会「址」而会「静偏」而会「长」而
  「等零」于(「搬出静态」于「址」于(「窗参数」于「静偏」于「长」))
也。

「:文言:能力链之察:有界遍历 PCI 能力链,核通知窗与设备配置窗。汉语:检查 PCI 能力链:有界遍历,要求见到通知能力(cfg_type 2,偏移 0x3000,倍数 4)与设备配置能力(cfg_type 4,偏移 0x2000)。:」
「通知能力有效」乃化「整数」而化「整数」而「爻」也。
「通知能力有效」者会「指」而会「型」而
  若「或者」
    于(「无符号大于」于「指」于「二三六」)
    于(「无符号小于」于(「位与」于(「无符号右移」于「型」于「一六」)于「二五五」)于「二零」)则
      「阴」
  否则
    (
      若「不等于」于(「位与」于(「设备配置读」于(「加」于「指」于「四」))于「二五五」)于「四」则
        「阴」
      否则
        (
          若「不等于」
            于(「设备配置读」于(「加」于「指」于「八」))于「一二二八八」则
              「阴」
          否则
            (
              若「不等于」
                于(「设备配置读」于(「加」于「指」于「一二」))于「四零九六」则
                  「阴」
              否则
                「等」于(「设备配置读」于(「加」于「指」于「一六」))于「四」
            )
        )
    )
也。

「设备能力有效」乃化「整数」而化「整数」而「爻」也。
「设备能力有效」者会「指」而会「型」而
  若「或者」
    于(「无符号大于」于「指」于「二四零」)
    于(「无符号小于」于(「位与」于(「无符号右移」于「型」于「一六」)于「二五五」)于「一六」)则
      「阴」
  否则
    (
      若「不等于」于(「位与」于(「设备配置读」于(「加」于「指」于「四」))于「二五五」)于「四」则
        「阴」
      否则
        (
          若「不等于」
            于(「设备配置读」于(「加」于「指」于「八」))于「八一九二」则
              「阴」
          否则
            「等」
              于(「设备配置读」于(「加」于「指」于「一二」))于「四零九六」
        )
    )
也。

「能力链」乃化「整数」而化「整数」而化「爻」而化「爻」而「爻」也。
「能力链」者会「指」而会「数」而会「通知见」而会「设备见」而
  若「等零」于「指」
  则
    「且」于「通知见」于「设备见」
  否则
    若「或者」
      于(「无符号大等」于「数」于「四八」)
      于(「或者」
        于(「或者」于(「无符号小于」于「指」于「六四」)于(「无符号大于」于「指」于「二五二」))
        于(「不等于」于(「位与」于「指」于「三」)于「零」))
    则
      「阴」
    否则
      虑「型」者「设备配置读」于「指」
      而
      虑「是通知」者
        「且」
          于(「等」于(「位与」于「型」于「二五五」)于「九」)
          于(「等」于(「无符号右移」于「型」于「二四」)于「二」)
      而
      虑「是设备」者
        「且」
          于(「等」于(「位与」于「型」于「二五五」)于「九」)
          于(「等」于(「无符号右移」于「型」于「二四」)于「四」)
      而
      若「且」于「是通知」于(「等零」于(「爻整」于(「通知能力有效」于「指」于「型」)))
      则
        「阴」
      否则
        (
          若「且」
            于「是设备」
            于(「等零」于(「爻整」于(「设备能力有效」于「指」于「型」)))
          则
            「阴」
          否则
            「能力链」
              于(「位与」于(「无符号右移」于「型」于「八」)于「二五五」)
              于(「加」于「数」于「一」)
              于(「或者」于「通知见」于「是通知」)
              于(「或者」于「设备见」于「是设备」)
        )
也。

「:文言:容量之读:世次前后一致乃信。汉语:读容量:配置世次前后一致才采信,至多重试 0x400 次;容量为零视为失败。:」
「读容量」乃化「整数」而「爻」也。
「读容量」者会「试」而
  虑「世」者「设备寄存器读」于「六五五五七」而
  虑「容低」者「设备寄存器读」于「二七零三三六」而
  虑「容高」者「设备寄存器读」于「二七零三四零」而
  若「等」于(「设备寄存器读」于「六五五五七」)于「世」
  则
    若「等零」于(「位或」于「容低」于「容高」)则「阴」
    否则
      ((「写四」于「状态_块容量」于(「选择」于(「不等于」于「容高」于「零」)于「负一」于「容低」));
        「阳」)
  否则
    若「等零」于(「减」于「试」于「一」)则「阴」否则「读容量」
      于(「减」于「试」于「一」)
也。

「:文言:初始化之步:逐步而行,任一步败则整体败。汉语:设备初始化,逐步执行,任一步失败即整体失败:复位、协商特性(要求 VERSION_1 与 FLUSH)、核对能力链、配置队列零、读容量、划定 DMA 区、置 DRIVER_OK。特性位存在第二参数里。:」
「块协商步」乃化「整数」而化「整数」而「爻」也。
「块协商步」者会「步」而会「特」而
  鉴「步」而
    有「零」则(若「无符号小等」于(「内存页数」于「元」)于「八」则「阴」否则「块协商步」于「一」于「特」)
    或有「一」则
      ((「写四」于「状态_块序」于「零」);
        「块协商步」于「二」于「特」)
    或有「二」则(若「不等于」于(「设备寄存器读」于「六五五五六」)于「零」则「阴」否则「块协商步」于「三」于「特」)
    或有「三」则(若「寄存写成」于「六五五五六」于「一」则「块协商步」于「四」于「特」否则「阴」)
    或有「四」则(若「寄存写成」于「六五五五六」于「三」则「块协商步」于「五」于「特」否则「阴」)
    或有「五」则(若「寄存写成」于「二六二一四四」于「一」则「块协商步」于「六」于「特」否则「阴」)
    或有「六」则(
      若「不等于」于(「位与」于(「设备寄存器读」于「二六二一四八」)于「三」)于「三」则
        「阴」
      否则
        「块协商步」于「七」于「特」
    )
    或有「七」则(若「寄存写成」于「二六二一四四」于「零」则「块协商步」于「八」于「特」否则「阴」)
    或有「八」则
      「块协商步」于「九」于(「位与」于(「设备寄存器读」于「二六二一四八」)于「五四四」)
    或有「九」则(若「不等于」于(「位与」于「特」于「五一二」)于「五一二」则「阴」否则「块协商步」于「一零」于「特」)
    或有「一零」则
      ((「写四」于「状态_块只读」于(「位与」于「特」于「三二」));
        「块协商步」于「一一」于「特」)
    或有「一一」则(若「寄存写成」于「二六二一五二」于「零」则「块协商步」于「一二」于「特」否则「阴」)
    或有「一二」则(若「寄存写成」于「二六二一五六」于「特」则「块协商步」于「一三」于「特」否则「阴」)
    或有「一三」则(若「寄存写成」于「二六二一五二」于「一」则「块协商步」于「一四」于「特」否则「阴」)
    或有「一四」则(若「寄存写成」于「二六二一五六」于「三」则「块协商步」于「一五」于「特」否则「阴」)
    或有「一五」则(若「寄存写成」于「六五五五六」于「一一」则「块协商步」于「一六」于「特」否则「阴」)
    或有「一六」则
      (若「不等于」于(「设备寄存器读」于「六五五五六」)于「一一」则「阴」否则「块协商步」于「一七」于「特」)
    或有「一七」则(
      若「能力链」于(「位与」于(「设备配置读」于「五二」)于「二五五」)于「零」于「阴」于「阴」则
        「块协商步」于「一八」于「特」
      否则
        「阴」
    )
    或有「一八」则(若「等零」于(「设备寄存器读」于「一三一零九零」)则「阴」否则「块协商步」于「一九」于「特」)
    或有「一九」则(若「寄存写成」于「一三一零九四」于「零」则「块协商步」于「二零」于「特」否则「阴」)
    或有「二零」则
      (若「无符号小于」于(「设备寄存器读」于「一三一零九六」)于「八」则「阴」否则「块协商步」于「二一」于「特」)
    或有「二一」则(若「寄存写成」于「一三一零九六」于「八」则「块协商步」于「二二」于「特」否则「阴」)
    或有「二二」则
      (若「不等于」于(「设备寄存器读」于「一三一零九六」)于「八」则「阴」否则「块协商步」于「二三」于「特」)
    或有「二三」则(若「寄存写成」于「一三一零八八」于「六五五三五」则「块协商步」于「二四」于「特」否则「阴」)
    或有「二四」则(若「寄存写成」于「一三一零九八」于「六五五三五」则「块协商步」于「二五」于「特」否则「阴」)
    或有「二五」则(
      虑「队通」者「设备寄存器读」于「一三一一零二」
      而
      若「无符号大于」于「队通」于「一零二三」则「阴」
      否则
        ((「写四」于「状态_块通知」于(「加」于「一四三三六零」于(「乘」于「队通」于「四」)));
          「块协商步」于「二六」于「特」)
    )
    或有「二六」则(若「读容量」于「一零二四」则「块协商步」于「二七」于「特」否则「阴」)
    或有「二七」则(
      虑「无」者(「内存填充」于「块初暂存」于「零」于「静_区长」)
      而
      虑「无」者
        (「写二」于(「加」于「块初暂存」于(「减」于「静_可用」于「静_描述」))于「一」)
      而
      若「搬入成」于「块初暂存」于「静_描述」于「静_区长」则
        「块协商步」于「二八」于「特」
      否则
        「阴」
    )
    或有「二八」则(
      若「寄存写成」于「二六二一七六」于(「加」于「静_描述」于「设备偏」)则「块协商步」于「二九」于「特」否则「阴」
    )
    或有「二九」则(若「寄存写成」于「二六二一八零」于「零」则「块协商步」于「三零」于「特」否则「阴」)
    或有「三零」则(
      若「寄存写成」于「二六二一八四」于(「加」于「静_可用」于「设备偏」)则「块协商步」于「三一」于「特」否则「阴」
    )
    或有「三一」则(若「寄存写成」于「二六二一八八」于「零」则「块协商步」于「三二」于「特」否则「阴」)
    或有「三二」则(
      若「寄存写成」于「二六二一九二」于(「加」于「静_已用」于「设备偏」)则「块协商步」于「三三」于「特」否则「阴」
    )
    或有「三三」则(若「寄存写成」于「二六二一九六」于「零」则「块协商步」于「三四」于「特」否则「阴」)
    或有「三四」则(若「寄存写成」于「一三一一零零」于「一」则「块协商步」于「三五」于「特」否则「阴」)
    或有「三五」则
      (若「不等于」于(「设备寄存器读」于「一三一一零零」)于「一」则「阴」否则「块协商步」于「三六」于「特」)
    或有「三六」则(若「寄存写成」于「六五五五六」于「一五」则「块协商步」于「三七」于「特」否则「阴」)
    或有「其他」则
      「等」于(「设备寄存器读」于「六五五五六」)于「一五」
也。

「块就绪」乃化「有」而「爻」也。
「块就绪」者会「无」而
  虑「无」者
    (
      若「等零」于(「读四」于「状态_块态」)
      则
        「写四」于「状态_块态」于(「选择」于(「块协商步」于「零」于「零」)于「一」于「二」)
      否则
        「元」
    )
  而
  「等」于(「读四」于「状态_块态」)于「一」
也。

「块容量」乃化「有」而「整数」也。
「块容量」者会「无」而
  「选择」于(「等」于(「读四」于「状态_块态」)于「一」)于(「读四」于「状态_块容量」)于「零」
也。

「:文言:传输:读、写、刷新各一请求。汉语:块传输:操作 0 读、1 写、4 刷新。成功返回 0,设备报告错误返回其状态字节,拒绝或超时返回 -1。请求头、三项描述符先搬入静态窗,环项先写并经寄存器读作屏障,再推进可用索引并通知,最后轮询已用环。:」
「可传输」乃化「整数」而化「整数」而化「整数」而「爻」也。
「可传输」者会「操作」而会「扇区」而会「偏」而
  若「块就绪」于「元」
  则
    若「且」于(「不等于」于「操作」于「四」)于(「无符号大等」于「扇区」于(「读四」于「状态_块容量」))则
      「阴」
    否则
      (
        若「且」于(「等」于「操作」于「一」)于(「不等于」于(「读四」于「状态_块只读」)于「零」)则
          「阴」
        否则
          (
            若「且」
              于(「不等于」于「操作」于「四」)
              于(「无符号大于」于(「加」于「偏」于「五一二」)于(「乘」于(「内存页数」于「元」)于「页字节」))则
                「阴」
            否则
              「阳」
          )
      )
  否则
    「阴」
也。

「传输请求头」乃化「整数」而化「整数」而「爻」也。
「传输请求头」者会「操作」而会「扇区」而
  虑「无」者(「写四」于「块头暂存」于「操作」)而
  虑「无」者(「写字段」于「块头暂存」于「四」于「零」)而
  虑「无」者
    (「写字段」于「块头暂存」于「八」于(「选择」于(「等」于「操作」于「四」)于「零」于「扇区」))而
    虑「无」者(「写字段」于「块头暂存」于「一二」于「零」)而
    虑「无」者
      (「写一」于(「加」于「块头暂存」于「一六」)于「二五五」)
    而
    「搬入成」于「块头暂存」于「静_头」于「一七」
也。

「传输描述符」乃化「整数」而「爻」也。
「传输描述符」者会「操作」而
  虑「无」者
    (「写四」于「块描暂存」于(「加」于「静_头」于「设备偏」))而
    虑「无」者(「写字段」于「块描暂存」于「四」于「零」)而
    虑「无」者(「写字段」于「块描暂存」于「八」于「一六」)而
    虑「无」者(「写二」于(「加」于「块描暂存」于「一二」)于「一」)而
    虑「无」者
      (「写二」于(「加」于「块描暂存」于「一四」)于(「选择」于(「等」于「操作」于「四」)于「二」于「一」))而
      虑「无」者
        (「写字段」于「块描暂存」于「一六」于(「加」于「静_数据」于「设备偏」))而
        虑「无」者(「写字段」于「块描暂存」于「二零」于「零」)而
        虑「无」者(「写字段」于「块描暂存」于「二四」于「五一二」)而
        虑「无」者
          (「写二」于(「加」于「块描暂存」于「二八」)于(「选择」于(「等」于「操作」于「零」)于「三」于「一」))而
          虑「无」者
            (「写二」于(「加」于「块描暂存」于「三零」)于「二」)而
            虑「无」者
              (「写字段」于「块描暂存」于「三二」于(「加」于「静_状态」于「设备偏」))而
              虑「无」者(「写字段」于「块描暂存」于「三六」于「零」)而
              虑「无」者(「写字段」于「块描暂存」于「四零」于「一」)而
              虑「无」者
                (「写二」于(「加」于「块描暂存」于「四四」)于「二」)而
                虑「无」者
                  (「写二」于(「加」于「块描暂存」于「四六」)于「零」)
                而
                「搬入成」于「块描暂存」于「静_描述」于「四八」
也。

「传输写数据」乃化「整数」而化「整数」而「爻」也。
「传输写数据」者会「操作」而会「偏」而
  若「等」于「操作」于「一」则
    「搬入成」于「偏」于「静_数据」于「五一二」
  否则
    「阳」
也。

「传输发布」乃化「整数」而化「整数」而「爻」也。
「传输发布」者会「序」而会「新序」而
  虑「无」者(「写二」于「块杂暂存」于「零」)而
  若「搬入成」
    于「块杂暂存」
    于(「加」于(「加」于「静_可用」于「四」)于(「乘」于(「位与」于「序」于「七」)于「二」))于「二」
  则
    若「不等于」于(「设备寄存器读」于「六五五五六」)于「一五」则
      「阴」
    否则
      虑「无」者(「写二」于(「加」于「块杂暂存」于「二」)于「新序」)
      而
      若「搬入成」于(「加」于「块杂暂存」于「二」)于(「加」于「静_可用」于「二」)于「二」
      则
        「等零」于(「设备寄存器写」于(「读四」于「状态_块通知」)于「零」)
      否则
        「阴」
  否则
    「阴」
也。

「轮询已用」乃化「整数」而化「整数」而「爻」也。
「轮询已用」者会「试」而会「新序」而
  若「不等于」于(「设备寄存器读」于「六五五五六」)于「一五」则
    「阴」
  否则
    (
      若「等零」于(「爻整」于(「搬出成」于「块用暂存」于「静_已用」于「七二」))则
        「阴」
      否则
        (
          若「等」于(「读二」于(「加」于「块用暂存」于「二」))于「新序」则
            「阳」
          否则
            (
              若「等」于(「减」于「试」于「一」)于「零」则「阴」
              否则
                「轮询已用」于(「减」于「试」于「一」)于「新序」
            )
        )
    )
也。

「传输收尾」乃化「整数」而化「整数」而化「整数」而化「整数」而「整数」也。
「传输收尾」者会「操作」而会「偏」而会「序」而会「新序」而
  若「不等于」于(「设备寄存器读」于「六五五五六」)于「一五」则
    「负一」
  否则
    虑「槽址」者
      「加」于(「加」于「块用暂存」于「四」)于(「乘」于(「位与」于「序」于「七」)于「八」)
    而
    若「不等于」于(「读四」于「槽址」)于「零」则
      「负一」
    否则
      虑「无」者(「写四」于「状态_块序」于「新序」)
      而
      若「等零」于(「爻整」于(「搬出成」于「块头暂存」于「静_头」于「一七」))则
        「负一」
      否则
        虑「状态」者「读一」于(「加」于「块头暂存」于「一六」)
        而
        若「不等于」于「状态」于「零」则
          「状态」
        否则
          (
            若「不等于」
              于(「读字段」于「槽址」于「四」)
              于(「选择」于(「等」于「操作」于「零」)于「五一三」于「一」)则
                「负一」
            否则
              (
                若「等」于「操作」于「零」
                则
                  (若「搬出成」于「偏」于「静_数据」于「五一二」则「状态」否则「负一」)
                否则
                  「状态」
              )
          )
也。

「块传输」乃化「整数」而化「整数」而化「整数」而「整数」也。
「块传输」者会「操作」而会「扇区」而会「偏」而
  若「等零」于(「爻整」于(「可传输」于「操作」于「扇区」于「偏」))则
    「负一」
  否则
    (
      若「等零」于(「爻整」于(「传输请求头」于「操作」于「扇区」))则
        「负一」
      否则
        (
          若「等零」于(「爻整」于(「传输描述符」于「操作」))则
            「负一」
          否则
            (
              若「等零」于(「爻整」于(「传输写数据」于「操作」于「偏」))则
                「负一」
              否则
                虑「序」者「读四」于「状态_块序」
                而
                虑「新序」者
                  「位与」于(「加」于「序」于「一」)于「六五五三五」
                而
                若「等零」于(「爻整」于(「传输发布」于「序」于「新序」))则
                  「负一」
                否则
                  (
                    若「等零」于(「爻整」于(「轮询已用」于「一零零零零零零」于「新序」))则
                      「负一」
                    否则
                      「传输收尾」于「操作」于「偏」于「序」于「新序」
                  )
            )
        )
    )
也。

「块读」乃化「整数」而化「整数」而「整数」也。
「块读」者会「扇区」而会「偏」而
  「块传输」于「零」于「扇区」于「偏」
也。

「块写」乃化「整数」而化「整数」而「整数」也。
「块写」者会「扇区」而会「偏」而
  「块传输」于「一」于「扇区」于「偏」
也。

「块刷新」乃化「有」而「整数」也。
「块刷新」者会「无」而
  「块传输」于「四」于「零」于「零」
也。