compare.c
来自「详细介绍了一篇关于pci开发的接口芯片」· C语言 代码 · 共 154 行
C
154 行
/* compare.c */
#include <stdtypes.h>
#include <clib1.h>
#include <string.h>
#include <stdio.h>
int compare(LONG length, VOID *addr1, VOID *addr2, \
CHAR *err_string, WORD max_err_length, WORD flags)
/* "flags" is defined in clib1.h.
Assumes that addr1 and addr2 can be accessed the same way (size-wise).
For example, this allows WORD addr1 <-> LONG addr2 as long as
dynamic bus sizing is supported.
Entry:
Exit: <> if OK.
*/
{
void *temp;
if ( !length ) return(1);
/* compare data from addr1 & addr2 */
if ( !( (flags & ADDR1_SAME) || (flags & ADDR2_SAME) ) )
/* both addresses increment */
{
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( bcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( wcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( lcompare( length, addr1, addr2, \
err_string, max_err_length ) );
}
}
if ( (flags & ADDR1_SAME) && !(flags & ADDR2_SAME) )
/* ADDR1 does not increment */
if ( !(flags & ADDR1_SAME) && (flags & ADDR2_SAME) )
/* ADDR2 does not increment, so swap addr1/addr2 */
{
temp = addr1;
addr2 = addr1;
addr1 = temp;
}
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( bcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( wcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( lcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
}
return(1); /* OK */
}
int physical_compare(LONG length, UINT32 addr1, UINT32 addr2, \
CHAR *err_string, WORD max_err_length, WORD flags)
/* "flags" is defined in clib1.h.
Assumes that addr1 and addr2 can be accessed the same way (size-wise).
For example, this allows WORD addr1 <-> LONG addr2 as long as
dynamic bus sizing is supported.
Entry:
Exit: <> if OK.
*/
{
UINT32 temp;
if ( !length ) return(1);
/* compare data from addr1 & addr2 */
if ( !( (flags & ADDR1_SAME) || (flags & ADDR2_SAME) ) )
/* both addresses increment */
{
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( physical_bcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( physical_wcompare( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( physical_lcompare( length, addr1, addr2, \
err_string, max_err_length ) );
}
}
if ( (flags & ADDR1_SAME) && !(flags & ADDR2_SAME) )
/* ADDR1 does not increment */
if ( !(flags & ADDR1_SAME) && (flags & ADDR2_SAME) )
/* ADDR2 does not increment, so swap addr1/addr2 */
{
temp = addr1;
addr2 = addr1;
addr1 = temp;
}
switch( flags & SIZE_MASK )
{
case SIZE_BYTE:
return ( physical_bcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_WORD:
return ( physical_wcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
case SIZE_LONG:
return ( physical_lcompare_1( length, addr1, addr2, \
err_string, max_err_length ) );
}
return(1); /* OK */
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?