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

📄 compare.c

📁 详细介绍了一篇关于pci开发的接口芯片
💻 C
字号:
/* 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -