[hdriverframework] 完善选项

This commit is contained in:
2025-10-09 09:59:33 +08:00
parent e80042fb46
commit 81d3b6fc1a
6 changed files with 99 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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 软件虚拟内存读