它根据入口参数unit调用SarAALStart函数激活相应的AAL通道,允许其正常开始收发。
SarAALAdd 增加一条AAL通道,初始化这条通道的收发缓冲区,缓冲区描述字,TCT及RCT表中的相关参数值。
SarAALStart 激活一条AAL通道,根据通道对应的atmif结构设定PVC上行速率。
将通道PVCMASK放入Lookup表中,激活该通道进行接收;发送Tx_Active命令,激活该通道进行发送。
. 停止及卸载函数 在系统执行muxDevUnload或muxDevStop时间接调用这两个函数。
sarEndUnload 释放这个设备所占的EndObject结构资源。
但通道所占的内存资源并没有释放。
sarEndStop 停止这个接口。
并调用sarAALStop函数关闭这条通道,执行与sarEndStart相反的操作。
SarAALStop 解激活并关闭这条通道。
将通道PVCMASK移出Lookup表,解激活该通道,使其停止接收;发送Tx_Deactive命令,解激活该通道,使其停止发送。
. 数据发送函数 函数名称:sarEndSend 功能: 将数据发送到相应的AAL通道中。
入口参数:指向通道的EndObject设备结构指针,指向待发送的数据包mBlk结构指针。
返回: 发送成功,返回OK 阻塞状态返回END_ERR_BLOCK 其他情况返回ERROR。
流程简介:将mBlk指向的数据包进行加封装操作,将指针及长度填入当前发送BD中即可。
注:为防止重入,使用到发送指示信号量,并在修改阻塞状态时给予中断保护 . 中断控制流程 SCC工作在UTOPIA模式下的中断联接在IDMA上,使用函数 IntconnectIV_IDMAVOIDFUNCPTRsarIntr 就能够在SAR发生中断时调用sarIntr函数。
此时我们将轮询整个SAR中断表,并对相应中断进行处理,为避免该中断过多占用系统资源,我们将其放置在一个netJob任务中。
同时,进入该任务后,屏蔽全局中断,直到所有的中断事件处理完毕。
. 数据接收处理 当Utopia接口收到来自于DSP的数据后,会提取出ATM报文头部信息,如果是AAL通道报文,则将报文存入相应的数据缓冲区中,设置相关寄存器值,并产生Utopia数据接收中断。
系统收到中断请求后,将会进入.所示的中断例程进行处理,判断是接收事件时,提取产生事件的通道号,计算出该通道对应的atmif 结构起始地址,作为参数调用sarRecv函数,在函数中进行数据报文处理。
. AAL业务模块的实现 作为系统Vxworks协议栈和SAREND驱动模块之间的接口,ATMAAL业务网络服务子层主要完成如下功能: )发送:向系统注册Bridged、Routed、ATMARP、PPPOA、PPPOE等不同类型接口(interface),根据各个接口的不同类型,对系统IP数据报文进行ATM链路封装,将封装后的数据报文发送到驱动模块并同时指示发送的VC通道; 注:因为Bridged封装的是以太网帧,解封装后可视为正常的以太网数据帧,直接交由协议栈处理,所以我们不需要再注册Bridged协议类型接口。
)接收:向系统注册业务类型,接收系统送来的数据报文(由驱动模块接收,并由系统根据接收的数据报文业务类型进行分发),根据接口属性对数据报文进行解封装后提交到系统协议栈或者交由其他模块处理, )控制:接收系统对于接口上的控制操作(主要是根据vxworksnetworkservices提供的规范完成),通过向mux接口注册重发例程实现数据报文重发。
. vxworks网络服务子层编写规范 vxworks网络服务子层介于从OSI规范的网络层和链路层之间,主要负责处理系统网络协议栈和MUX接口之间的数据报文。
它包括接口初始化、数据结构初始化、数据收发处理、错误报告和流量控制(可选)等部分。
.. 接口初始化 vxworks系统协议栈通过调用网络服务子层初始化例程(函数名称为xxxAttach)来激活相关网络接口。
在这个例程开始处,我们需要先用muxBind函数将该服务子层绑定至相关的网络接口驱动上,使该服务子层能够从MUX层收发数据报文。
.. 数据结构初始化 服务子层在收发相关数据报文时,可能需要申请或释放网络内存块。
为避免系统正常运行期间频繁使用系统内存块操作导致效率降低或稳定性降低,可以在初始化时预先申请一个内存区域,由netBufLib所提供的netBuffer控制机制进行管理。
其它如接口的状态、服务子层数据封装类型、MUX接口初始化Cookie、服务子层地址映射表等参数结构也需要在这一步进行初始