mirror of
https://github.com/HEYAHONG/HCppBox.git
synced 2025-10-14 02:27:41 +08:00
[hdriverframework] 完善选项
This commit is contained in:
@@ -95,3 +95,24 @@ size_t hdriverframework_driver_base_vm_write(hdriverframework_driver_base_t *drv
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
size_t hdriverframework_driver_base_getmaxvmopsize(hdriverframework_driver_base_t *drv)
|
||||
{
|
||||
size_t ret=0;
|
||||
if(drv!=NULL && drv->process!=NULL)
|
||||
{
|
||||
drv->process(drv,HDRIVERFRAMEWORK_OP_GET_MAX_VM_OP_SIZE,&ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
size_t hdriverframework_driver_base_getminvmopsize(hdriverframework_driver_base_t *drv)
|
||||
{
|
||||
size_t ret=0;
|
||||
if(drv!=NULL && drv->process!=NULL)
|
||||
{
|
||||
drv->process(drv,HDRIVERFRAMEWORK_OP_GET_MIN_VM_OP_SIZE,&ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@@ -181,6 +181,8 @@ enum
|
||||
HDRIVERFRAMEWORK_OP_GET_OF_COMPATIBLE=3, /**< 获取设备树(Open Firmware Device Tree)的兼容字符串数据(必须以NULL结尾),其可变参数为const char ***,在使用设备树的情况下,用于加载驱动 */
|
||||
HDRIVERFRAMEWORK_OP_VM_READ=4, /**< 虚拟内存读,相关参数见hsoftwarevirtualmemory,当驱动有可映射至虚拟内存的可编址资源时,可使用此操作 */
|
||||
HDRIVERFRAMEWORK_OP_VM_WRITE=5, /**< 虚拟内存写,相关参数见hsoftwarevirtualmemory,当驱动有可映射至虚拟内存的可编址资源时,可使用此操作 */
|
||||
HDRIVERFRAMEWORK_OP_GET_MAX_VM_OP_SIZE=6, /**< 获取最大的虚拟内存操作的字节数大小(一般为2的N次方,一般使用对齐访问),其可变参数为size_t * */
|
||||
HDRIVERFRAMEWORK_OP_GET_MIN_VM_OP_SIZE=7, /**< 获取最小的虚拟内存操作的字节数大小(一般为2的N次方,一般使用对齐访问),其可变参数为size_t * */
|
||||
HDRIVERFRAMEWORK_OP_DRIVER_BASE=0x10000, /**< 驱动操作起始,由具体的驱动使用 */
|
||||
};
|
||||
|
||||
@@ -264,6 +266,23 @@ size_t hdriverframework_driver_base_vm_read(hdriverframework_driver_base_t *drv,
|
||||
size_t hdriverframework_driver_base_vm_write(hdriverframework_driver_base_t *drv,const hsoftwarevirtualmemory_map_item_t *map_item,uintptr_t address,const uint8_t *data,size_t length);
|
||||
|
||||
|
||||
/** \brief 获取最大的虚拟内存操作的字节数大小
|
||||
*
|
||||
* \param drv hdriverframework_driver_base_t* 驱动指针
|
||||
* \return size_t 最大的虚拟内存操作的字节数大小,返回0表示选项不可用
|
||||
*
|
||||
*/
|
||||
size_t hdriverframework_driver_base_getmaxvmopsize(hdriverframework_driver_base_t *drv);
|
||||
|
||||
|
||||
/** \brief 获取最小的虚拟内存操作的字节数大小
|
||||
*
|
||||
* \param drv hdriverframework_driver_base_t* 驱动指针
|
||||
* \return size_t 最大的虚拟内存操作的字节数大小,返回0表示选项不可用
|
||||
*
|
||||
*/
|
||||
size_t hdriverframework_driver_base_getminvmopsize(hdriverframework_driver_base_t *drv);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
@@ -94,6 +94,26 @@ static int hdriverframework_driver_base_dummy_process(hdriverframework_driver_ba
|
||||
}
|
||||
}
|
||||
break;
|
||||
case HDRIVERFRAMEWORK_OP_GET_MAX_VM_OP_SIZE:
|
||||
{
|
||||
size_t *ret_ptr=va_arg(va,size_t *);
|
||||
if(ret_ptr!=NULL)
|
||||
{
|
||||
(*ret_ptr)=8;
|
||||
ret=HDRIVERFRAMEWORK_EOK;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case HDRIVERFRAMEWORK_OP_GET_MIN_VM_OP_SIZE:
|
||||
{
|
||||
size_t *ret_ptr=va_arg(va,size_t *);
|
||||
if(ret_ptr!=NULL)
|
||||
{
|
||||
(*ret_ptr)=1;
|
||||
ret=HDRIVERFRAMEWORK_EOK;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
|
||||
@@ -186,3 +206,23 @@ size_t hdriverframework_driver_dummy_vm_write(hdriverframework_driver_dummy_t *d
|
||||
return hdriverframework_driver_base_vm_write(&drv->base,map_item,address,data,length);
|
||||
}
|
||||
|
||||
size_t hdriverframework_driver_dummy_getmaxvmopsize(hdriverframework_driver_dummy_t *drv)
|
||||
{
|
||||
hdriverframework_driver_base_dummy_check(drv);
|
||||
if(drv==NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return hdriverframework_driver_base_getmaxvmopsize(&drv->base);
|
||||
}
|
||||
|
||||
|
||||
size_t hdriverframework_driver_dummy_getminvmopsize(hdriverframework_driver_dummy_t *drv)
|
||||
{
|
||||
hdriverframework_driver_base_dummy_check(drv);
|
||||
if(drv==NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return hdriverframework_driver_base_getminvmopsize(&drv->base);
|
||||
}
|
||||
|
@@ -93,6 +93,23 @@ size_t hdriverframework_driver_dummy_vm_read(hdriverframework_driver_dummy_t *dr
|
||||
*/
|
||||
size_t hdriverframework_driver_dummy_vm_write(hdriverframework_driver_dummy_t *drv,const hsoftwarevirtualmemory_map_item_t *map_item,uintptr_t address,const uint8_t *data,size_t length);
|
||||
|
||||
/** \brief 获取最大的虚拟内存操作的字节数大小
|
||||
*
|
||||
* \param drv hdriverframework_driver_dummy_t* 驱动指针
|
||||
* \return size_t 最大的虚拟内存操作的字节数大小,返回0表示选项不可用
|
||||
*
|
||||
*/
|
||||
size_t hdriverframework_driver_dummy_getmaxvmopsize(hdriverframework_driver_dummy_t *drv);
|
||||
|
||||
|
||||
/** \brief 获取最小的虚拟内存操作的字节数大小
|
||||
*
|
||||
* \param drv hdriverframework_driver_dummy_t* 驱动指针
|
||||
* \return size_t 最大的虚拟内存操作的字节数大小,返回0表示选项不可用
|
||||
*
|
||||
*/
|
||||
size_t hdriverframework_driver_dummy_getminvmopsize(hdriverframework_driver_dummy_t *drv);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
@@ -39,7 +39,7 @@ static size_t hsoftwarevirtualmemory_default_write(const hsoftwarevirtualmemory_
|
||||
|
||||
static const hsoftwarevirtualmemory_map_item_t hsoftwarevirtualmemory_default_map_table[]=
|
||||
{
|
||||
{0,0,hsoftwarevirtualmemory_default_read,hsoftwarevirtualmemory_default_write,NULL}
|
||||
{0,0,hsoftwarevirtualmemory_default_read,hsoftwarevirtualmemory_default_write,NULL,0}
|
||||
};
|
||||
|
||||
const hsoftwarevirtualmemory_map_item_t * hsoftwarevirtualmemory_global_map_table=NULL;
|
||||
|
@@ -50,6 +50,7 @@ struct hsoftwarevirtualmemory_map_item
|
||||
hsoftwarevirtualmemory_read_callback_t read_callback;
|
||||
hsoftwarevirtualmemory_write_callback_t write_callback;
|
||||
void * usr;
|
||||
uintptr_t flags; /**< 标志位,默认为0,默认情况下,在32位系统下最少32位,读写回调的实现需要遵循标志位的设置*/
|
||||
};
|
||||
|
||||
/** \brief 软件虚拟内存读
|
||||
|
Reference in New Issue
Block a user