当前位置:网站首页>FreeBSD bnxt以太网驱动源码阅读记录。
FreeBSD bnxt以太网驱动源码阅读记录。
2022-07-13 18:12:00 【酸菜。】
重要结构体间的关系(2022/7/13)
struct device_method {
const char *desc;
void *const func;
};
struct driver {
const char *name;
const struct device_method *methods;
uint32_t size;
};
struct if_shared_ctx {
//...
driver_t *isc_driver;
//...
};
重要结构体的内存申请:
(1)if_shared_ctx 变量定义的形式。
(2)device_t dev 上电时枚举
(3)if_ctx_t ctx iflib_device_register函数里malloc申请
(4)if_t ifp; iflib_register函数里if_alloc申请
(5)bnxt_softc iflib_device_register函数里sc = malloc(sctx->isc_driver->size, M_IFLIB, M_WAITOK|M_ZERO);
申请的,注意size。
这几个结构体之间的关系是,if_shared_ctx,dev,ifp,bnxt_softc都作为ctx的成员。
关于static device_method_t bnxt_iflib_methods结构里成员函数的调用问题
(2022/7/13)
static int
iflib_register(if_ctx_t ctx)
{
//...
driver_t *driver = sctx->isc_driver;
/* * Initialize our context's device specific methods */
kobj_init((kobj_t) ctx, (kobj_class_t) driver);
kobj_class_compile((kobj_class_t) driver);
//...
}
应该所有的成员都会调用一遍,但是调用顺序和定义顺序不是一致的,具体怎么调用的要对kobj这个结构分析。
pci_mapping与pci_mapping_free(2022/7/13)
在attach_pre函数里,从设备的配置空间的bar寄存器当中获取资源,用于后面写寄存器。
这里涉及的写或者读寄存器主要有
(1)doorbell(写生产者的index)
(2)hwrm(用于给硬件发消息)
它们都是
struct bnxt_bar_info {
struct resource *res;
bus_space_tag_t tag;
bus_space_handle_t handle;
bus_size_t size;
int rid;
};
类型,具体的成员含义不太清楚。
主要涉及的api:
bus_alloc_resource_any
bus_release_resource
bar->tag = rman_get_bustag(bar->res);
bar->handle = rman_get_bushandle(bar->res);
bar->size = rman_get_size(bar->res);
bus_space_write_4
//...
alloc_hwrm_dma_mem接口(2022/7/13)
接口申请dma内存,用于给硬件发送信息,然后硬件回复信息。
iflib_dma_alloc(softc->ctx, PAGE_SIZE, &softc->hwrm_cmd_resp, BUS_DMA_NOWAIT);
边栏推荐
- Profile - sessions_per_user :限制用户会话数
- zkSnark教程:从方程到验证
- Detailed explanation of the parameters of the find command
- C primer plus learning notes - 4. File IO (input / output)
- Axelar: what is moonbeam? What can be built on moonbeam?
- . Net core web API using log4net logs
- Baidu upload webuploader
- 微信小程序开发—(八)canvas绘制图形
- 小程序毕设作品之微信教室预约小程序毕业设计(6)开题答辩PPT
- 【u-boot】u-boot Sandbox编译构建和使用总结
猜你喜欢
随机推荐
力扣 732. 我的日程安排表 III
Rasa Action Service concurrency
知识点滴 - 性格分析: MBTI模型
异构计算 — 异构芯片融合趋势
一位 sealer maintainer 的心路历程
Common regular expressions
基于51单片机智能家居监控系统设计仿真(proteus仿真+源码+报告)
小程序毕设作品之微信教室预约小程序毕业设计(6)开题答辩PPT
小程序毕设作品之微信教室预约小程序毕业设计(4)开题报告
Flutter 空安全
软件测试人员需要了解的工具有哪些?
EasyCVR视频广场快照添加设备通道离线原因显示
Wechat applet development - (V) pop up box
深入浅出 eBPF|你要了解的 7 个核心问题
Flutter 加载中视图、失败视图、空视图封装
How to continue to improve after software testing?
Leetcode 454. 四数相加 II
App测试流程及测试点
Thresh - the dynamic scheme of fluent based on JS
matplotlib之pyplot模块之直方图(hist():基础参数,返回值)








