⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac960.c.txt

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻 TXT
字号:
any problems,send mail to sindybear@163.com


相关文件
	DAC960.h

***************************基本数据结构******************************************
int  DAC960_ControllerCount = 0;	//检测到的dac控制器的数目
int  DAC960_ActiveControllerCount = 0;	//活动DAC控制器的数目

//控制器阵列的列表
static DAC960_Controller_T  *DAC960_Controllers[DAC960_MaxControllers] =  { NULL };

//使用普通的块设备的接口方式,也就是使用默认的read和write方式
static BlockDeviceOperations_T	
  DAC960_BlockDeviceOperations =
    { owner:                THIS_MODULE,
      open:                 DAC960_Open,
      release:              DAC960_Release,
      ioctl:                DAC960_IOCTL };

*********************************************************************************


**********************************初始化函数*************************************
(1)static int DAC960_Initialize(void)
	DAC960_DetectControllers(DAC960_P_Controller);
	……
	DAC960_RegisterBlockDevice(Controller)	//这个函数是最主要的函数

(2)static void DAC960_DetectControllers(DAC960_HardwareType_T HardwareType)
	//这个函数询问pci配置空间来检测控制器的类型

(3)static boolean DAC960_RegisterBlockDevice(DAC960_Controller_T *Controller)
	RequestQueue = BLK_DEFAULT_QUEUE(MajorNumber);		//定义请求队列
  	blk_init_queue(RequestQueue, DAC960_RequestFunction);	//定义队列处理函数
	blk_queue_headactive(RequestQueue, 0);			//以下定义的都是一般的处理	
	RequestQueue->back_merge_fn = DAC960_BackMergeFunction;	
	RequestQueue->front_merge_fn = DAC960_FrontMergeFunction;
	RequestQueue->merge_requests_fn = DAC960_MergeRequestsFunction;
	RequestQueue->queuedata = Controller;
	Controller->RequestQueue = RequestQueue;
  
*********************************************************************************


***********************************请求队列处理函数**********************************
(1)static void DAC960_RequestFunction(RequestQueue_T *RequestQueue)
	这个事主处理函数,相当于make_request函数的地位
	DAC960_ProcessRequests(Controller);	//这是唯一的请求队列处理函数

(2)static inline void DAC960_ProcessRequests(DAC960_Controller_T *Controller)
	while (DAC960_ProcessRequest(Controller, Counter++ == 0)) ;	//尽可能多地处理请求

(3)static boolean DAC960_ProcessRequest(DAC960_Controller_T *Controller,boolean WaitForCommand)
	……	//得到请求队列的指针
	while (true)
	……	//分配一个command结构,如果不能满足的话,就等待
	……	//对得到的command进行设置
	blkdev_dequeue_request(Request);	//摘掉请求
	blkdev_release_request(Request);
	DAC960_QueueReadWriteCommand(Command);	//执行命令

(4)static void DAC960_V2_QueueReadWriteCommand(DAC960_Command_T *Command)
	//对command重的mailbox参数进行设置
	DAC960_QueueCommand(Command);	//调用一定的controller的处理命令进行处理

(5)static void DAC960_P_QueueCommand(DAC960_Command_T *Command)
	//举一个例子
	……	//进行设置
	while (DAC960_PD_MailboxFullP(ControllerBaseAddress))	
	    udelay(1);		//如果邮箱满了,等待一会
	DAC960_PD_WriteCommandMailbox(ControllerBaseAddress, CommandMailbox);	//写邮箱
 	DAC960_PD_NewCommand(ControllerBaseAddress

(6)void DAC960_PD_WriteCommandMailbox
	//这个函数在文件DAC960.c中
	writel(CommandMailbox->Words[0],ControllerBaseAddress + DAC960_PD_CommandOpcodeRegisterOffset);
	……	//写寄存器,进行传输运行

*************************************************************************************

****************************基本函数*********************************************
*********************************************************************************













⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -