MUX所用的END函数
下表是MUX所用的和驱动之间通信的函数。在本文中,函数用一个一般的“end”前
缀,但是在实际的驱动中,此前缀通常被能识别驱动的表示所代替,例如“motFcc”代表
MPC8260的快速以太网驱动。
函数 描述
endLoad( ) 把一个设备加载到MUX中,并把驱动和这个设备结合在一起
endUnload( ) 从MUX中释放一个设备或者设备上的一个端口
endSend( ) 从MUX层接收数据并把它发送到物理层。
endMCastAddrDel( ) 从一个设备中注册的广播列表中移出一个广播地址。
endMCastAddrGet( ) 检索注册在一个设备中的广播列表
endMCastAddrAdd( ) 向注册在一个设备中的列表中增加一个广播地址
endPollSend( ) 在查询模式而不是在中断模式下发送帧
endPollReceive( ) 在查询模式而不是在中断模式下接收帧
endStart( ) 连接设备中断并激活接口
endStop( ) 停止或者释放一个网络结构或设备
endAddressForm( ) 向一个包中添加地址信息
endAddrGet( ) 从一个包中提取地址信息
endPacketDataGet( ) 分离包中的地址信息和数据信息
endIoctl( ) 支持多种ioctl命令
endLoad( )
在网络接口被用于发送和接收帧之前,这个适当的设备必须被加载到MUX中并被配
置。当函数endLoad( )在系统启动时被任务tRootTask用于加载设备时,是由muxDevLoad()
调用的。
此函数接收一个初始化字符串,它的内容一般来说是用户定义的,但是总的来说需要
包括能够识别物理接口的设备号,中断向量号,以及存储器映射寄存器的地址。
endLoad( )必须被写成two-pass算法。在加载过程中,MUX调用此函数两次。在第一次
初始化字符串是空的(全0)。endLoad( )期望能检测到空字符并返回拷贝到字符串的设备名。
第二次调用传给endLoad( )函数的是提供给muxDevLoad()的实际的初始化字符串。endLoad( )
函数必须返回它所分配的指向END_OBJ结构的指针或是当加载失败时返回NULL。
一般来说,endLoad( )函数在第二次调用的时候,将主要完成以下功能:
? 初始化设备和接口
? 分配并给END_OBJ赋值
? 初始化一些主要的结构
? 分析并处理初始化字符串
? 创建并填充MIB II接口表
? 用netBufLib分配一个或是多个网络缓冲池
? 根据END_OBJ机构中的pNetFuncs来填充NET_FUNCS表endLoad( )函数基于以下的框架
END_OBJ * endLoad
(
char * initString, /* defined in endTbl */
void * pBsp /* BSP-specific information (optional) */
)
{
END_OBJ * newEndObj;
if( !initString ) /* initString is NULL, error condition */
{
/* set errno perhaps */
return( (END_OBJ *) 0 );
}
else if( initString[0] == 0 ) /* initString[0] is NULL, pass one */
{
strcpy( initString, "foo" );
return( (END_OBJ *) 0 );
}
else /* initString is not NULL, pass two */
{
/* initialize device */
newEndObj = (END_OBJ *) malloc( sizeof(END_OBJ) );
/* fill newEndObj and newEndObj->pFuncTable */
/* create and populate the MIB2 interface table */
/* initialize any needed private structures */
/* parse and process initString, and pBsp if necessary */
/* create a private pool of memory using netBufLib API */
/* create network buffer pools using netBufLib API */
return( newEndObj );
}
}
文章评论(0条评论)
登录后参与讨论