编写设备驱动程序

ddi_device_acc_attr 结构

此结构描述设备的字节序和数据顺序要求。驱动程序需要对此结构进行初始化并将其作为一个参数传递给 ddi_regs_map_setup(9F)

typedef struct ddi_device_acc_attr {
    ushort_t       devacc_attr_version;
    uchar_t    devacc_attr_endian_flags;
    uchar_t    devacc_attr_dataorder;
} ddi_device_acc_attr_t;
devacc_attr_version

指定 DDI_DEVICE_ATTR_V0

devacc_attr_endian_flags

描述设备的字节序特征。指定为一个位值,其可能值包括:

  • DDI_NEVERSWAP_ACC-从不交换数据

  • DDI_STRUCTURE_BE_ACC-设备数据格式为大端字节序

  • DDI_STRUCTURE_LE_ACC-设备数据格式为小端字节序

devacc_attr_dataorder

描述 CPU 根据设备的要求引用数据时必须遵循的顺序。指定为一个枚举值,其中数据访问限制的排列顺序为最严格到最不严格。

  • DDI_STRICTORDER_ACC-主机必须按程序员指定的顺序发出引用。此标志为缺省行为。

  • DDI_UNORDERED_OK_ACC-允许主机重新排列到设备内存的负载和存储。

  • DDI_MERGING_OK_ACC-允许主机将单个存储合并到连续位置。此设置还表明需要重新排列。

  • DDI_LOADCACHING_OK_ACC-允许主机从设备读取数据,直到发生存储。

  • DDI_STORECACHING_OK_ACC-允许主机对写入设备的数据进行高速缓存。然后,主机可以延迟将数据写入设备,直到将来某一时间。


注 –

系统对数据的访问可能会比驱动程序在 devacc_attr_dataorder 中所做指定更严格。就数据访问而言,由从必须遵循严格的数据排序到可以执行高速缓存存储操作,驱动程序对主机的限制依次降低。