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实例都能平等访问所有设备,销毁后都需要自行释放资源
- 接口用途
- 变更后对应组件需要做的修改
<tt>dtor</tt>
- 原接口
- 新接口
- 变更说明 无
- 接口用途
- 变更后对应组件需要做的修改
<tt>lock</tt>/<tt>unlock</tt>
- 原接口
void lock();
void unlock();
- 新接口
void lock();
void unlock();
- 变更说明 无
- 接口用途
- 变更后对应组件需要做的修改
<tt>init</tt>
- 原接口 无
- 新接口
void init(void *args, uint32_t size);
- 变更说明 统一新增
init方法,用于驱动的初始化,允许传递任意入参
- 框架本身对驱动总管并没有配置诉求
- 业务组件开发者在知晓具体驱动实现的情况下,可以传递配置给驱动 这里仅支持通过初始化配置驱动的行为,不支持在具体操作接口,比如
read,传递自定义参数。因为
- 框架对驱动的调用是固定的
- 如果用户自定义的业务想要传参,可以自己扩展接口
- 接口用途
- 变更后对应组件需要做的修改
- 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属性的实际生效
- 接口用途
- 变更后对应组件需要做的修改
<tt>config</tt>
- 原接口 无
- 新接口
string_t get_version(void);
- 变更说明 新增方法,用于驱动加载的DFX
- 接口用途
- 变更后对应组件需要做的修改