openUBMC Chip Abstract Layer V0.1
载入中...
搜索中...
未找到
Driver(驱动接口设计)

ADC控制器驱动,用于读取模数转换结果。对应MDS的/bmc/kepler/Bus/Adc总线接口,属性 ScanRate、VoltRefSrc、VoltRefVal 作为配置项,在初始化时生效。

  • 语言,沿用libsoc_adapter,使用C++作为接口语言
  • 类命名,统一使用Xyz作为Xyz驱动的接口类名,采用大驼峰
  • namespace,沿用libsoc_adapter的处理,驱动Xyz的namespace为DRIVER_XYZ
  • 每个Xyz实例,都是xyz设备的总管,可以操作所有的xyz设备
    • 设备操作接口,统一增加一个index入参,用于区分xyz设备。 index的分配由驱动实现决定;
    • 对比 libsoc_adapter的处理,Xyz实例
      • 有的是指单个xyz设备,或者单例(比如Ipmb, Efuse)
      • 有的是xyz设备的总管(比如I2c)
  • 不提供ioctl方式的API ioctl(fd, cmdcode, param) 该形式和定义函数接口没有本质差别 且API面向的业务场景是确定的,可以明确定义函数接口

对比

<tt>ctor</tt>

  • 原接口
    Driver();
    Driver(const std::string_view &dev_name, int32_t op_mode);
  • 新接口
    IDriver(const string_t& driver_name);
  • 变更说明 取消在构造函数传递device的做法,要不要打开设备、打开什么设备、打开几个设备,这些均取决于实现
    • 避免强制指定设备名称(不规定用户必须、且只能打开一个设备);同步删除opmode参数
    • 避免指定m_is_owner。每个IDriver实例都能平等访问所有设备,销毁后都需要自行释放资源
  • 接口用途
    • ALL
  • 变更后对应组件需要做的修改
    • ALL 设备驱动获取方法修改

<tt>dtor</tt>

  • 原接口
    ~Driver();
    void free();
  • 新接口
    ~Driver();
    void free();
  • 变更说明 无
  • 接口用途
    • ALL
  • 变更后对应组件需要做的修改
    • ALL 无

<tt>lock</tt>/<tt>unlock</tt>

  • 原接口
    void lock();
    void unlock();
  • 新接口
    void lock();
    void unlock();
  • 变更说明 无
  • 接口用途
    • ALL
  • 变更后对应组件需要做的修改
    • ALL 无

<tt>init</tt>

  • 原接口 无
  • 新接口
    void init(void *args, uint32_t size);
  • 变更说明 统一新增init方法,用于驱动的初始化,允许传递任意入参
    • 框架本身对驱动总管并没有配置诉求
    • 业务组件开发者在知晓具体驱动实现的情况下,可以传递配置给驱动 这里仅支持通过初始化配置驱动的行为,不支持在具体操作接口,比如read,传递自定义参数。因为
      • 框架对驱动的调用是固定的
      • 如果用户自定义的业务想要传参,可以自己扩展接口
  • 接口用途
    • ALL
  • 变更后对应组件需要做的修改
    • ALL 框架/内源组件对驱动初始化是没有传参的 如果用户自定义组件有传参,自行传递即可

<tt>config</tt>

  • 原接口 部分驱动定义了init方法,用于设备初始化
    // 示例
    void init(uint32_t scan_rate, VOLT_REF_SRC volt_ref_src, uint32_t volt_ref_val, string_t bus_name);
  • 新接口
    void config(int32_t index, void *config, uint32_t size);
  • 变更说明 统一新增config方法,用于设备实例的初始化,允许传递任意入参。
    • 框架使用的入参形式,在每个接口类处定义,其命名为XyzConfig。比如AdcConfig 该结构体主要是为了支撑MDS属性的实际生效
  • 接口用途
    • ALL
  • 变更后对应组件需要做的修改
    • ALL 初始化需要修改方法和入参

<tt>config</tt>

  • 原接口 无
  • 新接口
    string_t get_version(void);
  • 变更说明 新增方法,用于驱动加载的DFX
  • 接口用途
    • ALL 获取驱动版本信息,用于增加可定位性
  • 变更后对应组件需要做的修改
    • ALL 新增特性