Nouveau源码分析(二)
在讨论Nouveau对Nvidia设备的初始化前,我准备先说一下Nouveau结构体的基本框架
Nouveau的很多结构体都可以看作是C++中的类,之间有很多相似的东西,比如继承关系,virtual成员函数等.
模拟继承
先尝试阅读一下这个代码:
#include <stdlib.h>
struct abc
{
int a;
int b;
int c;
};
struct def
{
struct abc base;
int d;
int e;
int f;
};
#define abc_create(a,b,c,pabc) \
abc_create_(a,b,c,sizeof(**pabc),(void **)pabc)
int abc_create_(int a,int b,int c,
size_t size,void **pabc)
{
struct abc *abc_ = (struct abc *)malloc(size); //按传入的size分配空间
abc_->a = a;
abc_->b = b;
abc_->c = c; //初始化自身
*pabc = abc_;
return 0;
}
#define def_create(a,b,c,d,e,f,pdef) \
def_create_(a,b,c,d,e,f,sizeof(**pdef),(void **)pdef) //获得实际应分配空间大小
int def_create_(int a,int b,int c,int d,int e,int f,
size_t size,void **pdef)
{
struct def *def_;
abc_create_(a,b