gpt4 book ai didi

c - 如何将 platform_device 的通用资源/数据转发给驱动程序

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:02 25 4
gpt4 key购买 nike

我有一个 platform_device实例,我想向它传递一个函数指针,我想知道最干净、最通用的方法是什么。

最佳的做法是,如果我在内核中有一些杂项资源,我可以为我想要的任何东西传递 void*,但这些是唯一可用的资源:

 31 #define IORESOURCE_TYPE_BITS    0x00001f00      /* Resource type */
32 #define IORESOURCE_IO 0x00000100 /* PCI/ISA I/O ports */
33 #define IORESOURCE_MEM 0x00000200
34 #define IORESOURCE_REG 0x00000300 /* Register offsets */
35 #define IORESOURCE_IRQ 0x00000400
36 #define IORESOURCE_DMA 0x00000800
37 #define IORESOURCE_BUS 0x00001000

实际上我有一个用于平台设备的容器,但它是在探测函数中动态分配和初始化的。

我的问题是如何将通用指针作为资源传递给设备?或者我怎样才能以最干净的方式做到这一点?

最佳答案

按照您在问题中链接的 LWN 文章底部所述使用 platform_data。在您的情况下,您的数据结构将如下所示。这显然是未经测试的,但你明白了。您的 platform_data 结构将保存您在定义设备细节的同时设置的函数指针。

int sleep_function_chip1(struct platform_device *pdev)
{
// Go to sleep
return 0;
}
int resume_function_chip1(struct platform_device *pdev)
{
// Resume
return 0;
}

struct my_platform_data {
int (*sleep_function)(struct platform_device *);
int (*resume_function)(struct platform_device *);
};

// Instance of my_platform_data for a particular hardware (called chip1 for now)
static struct my_platform_data my_platform_data_chip1 = {
.sleep_function = &sleep_function_chip1,
.resume_function = &resume_function_chip1,
};

// Second instance of my_platform_data for a different hardware (called chip2 for now)
static struct my_platform_data my_platform_data_chip2 = {
.sleep_function = &sleep_function_chip2,
.resume_function = &resume_function_chip2,
};

// Now include that data when you create the descriptor for
// your platform
static struct platform_device my_platform_device_chip1 = {
.name = "my_device",
.id = 0,
.dev = {
.platform_data = &my_platform_data_chip1,
}
};

int some_driver_function() {
struct platform_device *pdev;
pdev = // wherever you store this

// Any time you need that data, extract the platform_data pointer
struct my_platform_data *pd = (struct my_platform_data*)pdev->dev.platform_data;

// Call the function pointer
pd->sleep_function(pdev);
}

关于c - 如何将 platform_device 的通用资源/数据转发给驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18612173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com