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

📄 zl5011xpki.c

📁 Zalink50114----TDMoIP芯片驱动源码
💻 C
📖 第 1 页 / 共 4 页
字号:
            pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
            status = zl5011xReadModWrite(zl5011xParams, pkiAddress,
                     ~((ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN) | (ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_N_RESET)),
                      ((ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN) | (ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_N_RESET)));
         }

        /* For devices that require it write relevant Control Reg bit low to indicate
           the linkdown state */
         if( status== ZL5011X_OK)
         {
            if (portNum != linkdownBitReg)
            {
               pkiAddress= ZL5011X_PKI0_CTRL+ (linkdownBitReg* sizeof( Uint32T));
               status = zl5011xReadModWrite(zl5011xParams, pkiAddress,
                        ~(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN),
                         (ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_LINKDOWN));
            }
         }

         /* and update the state of the MAC in the structure */
         if( status== ZL5011X_OK)
         {
            zl5011xParams->pki.lanPort[ portNum].macControl.linkDown= ZL5011X_FALSE;
         }

         /* make sure port is not in power save */
         if( status== ZL5011X_OK)
         {
            pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
            status = zl5011xReadModWrite(zl5011xParams, pkiAddress,
                     ~(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_PWD_SAVE_EN),
                      (ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_PWD_SAVE_EN));
         }

         /* and update the state of the MAC in the structure */
         if( status== ZL5011X_OK)
         {
            zl5011xParams->pki.lanPort[ portNum].macControl.powerSaveEnable= portEnabled;
         }

      }
      else
      {
         status= ZL5011X_PARAMETER_INVALID;
      }
   }
   return(status);
}

/*******************************************************************************
 Function:
    zl5011xPkiSetVlanMode

 Description:

 Inputs:
    zl5011xParams     Pointer to the structure for this device instance
    Uint8T  portNum        - port number 0 to 3
    zl5011xBooleanE    vlanEnabled - VLAN aware enable / disable

 Outputs:

 Returns:
    zlStatusE

 Remarks:

*******************************************************************************/
extern zlStatusE zl5011xPkiSetVlanMode(zl5011xParamsS *zl5011xParams,
                                     Uint8T  portNum, zl5011xBooleanE vlanEnabled )
{
   zlStatusE status = ZL5011X_OK;
   Uint32T pkiAddress=0, regValue= 0;

   ZL5011X_TRACE(ZL5011X_PKI_FN_ID, "zl5011xPkiSetVlanMode: port number %d vlan enabled %d",
                           portNum, vlanEnabled, 0, 0, 0, 0);

   if( status==  ZL5011X_OK)
   {
      status= ZL5011X_CHECK_BOOLEAN( vlanEnabled);
   }

   /* write relevant Control Reg VLAN Aware bit HIGH enable/LOW disable  */
   if( status== ZL5011X_OK)
   {
      pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
      if( vlanEnabled== ZL5011X_TRUE)
      {
         regValue= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_VLAN_AWARE;
      }
      else
      {
         regValue= ~(ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_VLAN_AWARE);
      }
      status = zl5011xReadModWrite(zl5011xParams, pkiAddress, regValue,
                              ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_VLAN_AWARE);
   }

   /* and update this in structure */
   if( status== ZL5011X_OK)
   {
      zl5011xParams->pki.lanPort[ portNum].macControl.vlanAware= vlanEnabled;
   }

   return(status);
}

/*******************************************************************************
 Function:
    zl5011xPkiSetInterfaceType

 Description:

 Inputs:
    zl5011xParams      Pointer to the structure for this device instance
    Uint8T  portNum        - device internal port number, 0 to 3
    zl5011xMacTypeE macType - interface type - MII, GMII, PCS

 Outputs:

 Returns:
    zlStatusE

 Remarks:

*******************************************************************************/
extern zlStatusE zl5011xPkiSetInterfaceType(zl5011xParamsS *zl5011xParams,
                                           Uint8T  portNum,
                                           zl5011xMacTypeE macType )
{
   zlStatusE status = ZL5011X_OK;
   Uint32T pkiAddress=0, registerValue= 0;
   Uint8T externalPortNum;

   ZL5011X_TRACE(ZL5011X_PKI_FN_ID, "zl5011xPkiSetInterfaceType: port number %d mac type %d",
                           portNum, macType, 0, 0, 0, 0);

   /* Check range of allowed types  */
   /* The devLimits structure assumes an external port numbering scheme with contiguous
      port numbers from 0 upwards. But the portNum passed into this function is an
      internal port number which may be non-contiguous. So need to convert to same
      scheme for comparison */
   status = zl5011xPkiInternalPortToExternal(zl5011xParams, portNum, &externalPortNum);

   if( status== ZL5011X_OK)
   {
      switch ( macType)
      {
         case ZL5011X_MAC_TYPE_MII:
            /* check the LAN port number is valid for the MAC type */
            if (externalPortNum >= zl5011xParams->devLimits.lanNumLanPorts)
            {
               status = ZL5011X_PARAMETER_INVALID;
            }
            break;

         case ZL5011X_MAC_TYPE_GMII:  /* intentional fall through */
         case ZL5011X_MAC_TYPE_PCS:
            /* check the LAN port number is valid for the MAC type. */
            if (externalPortNum >= zl5011xParams->devLimits.lanNumGbitLanPorts)
            {
               status = ZL5011X_PARAMETER_INVALID;
            }
            break;

         default:
            status = ZL5011X_PARAMETER_INVALID;
            break;
      }
   }

   /* write relevant Control Reg bits sel_pcs & sel_mii */
   if( status== ZL5011X_OK)
   {
      pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));
      switch ( macType)
      {
        case ZL5011X_MAC_TYPE_MII:
            registerValue= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII;
            status = zl5011xReadModWrite(zl5011xParams, pkiAddress, registerValue,
                                  ZL5011X_2BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII);
        break;
        case ZL5011X_MAC_TYPE_GMII:
            registerValue= 0;
            status = zl5011xReadModWrite(zl5011xParams, pkiAddress, registerValue,
                                  ZL5011X_2BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII);
        break;
        case ZL5011X_MAC_TYPE_PCS:
            registerValue= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_PCS;
            status = zl5011xReadModWrite(zl5011xParams, pkiAddress, registerValue,
                                  ZL5011X_2BIT_MASK << ZL5011X_PKI_CTRL_REG_SEL_MII);
        break;
        default:
            status= ZL5011X_PARAMETER_INVALID;
        break;
      }
   }

   /* and update this in structure */
   if( status== ZL5011X_OK)
   {
      zl5011xParams->pki.lanPort[ portNum].macControl.macType= macType;
   }

   return(status);
}

/*******************************************************************************
 Function:
    zl5011xPkiSetPacketFiltering

 Description:
    Set bits in the port Control Reg to filter out various types of packet.
    Overwrites prev state of the 3 filter bits.

 Inputs:
    zl5011xParams      Pointer to the structure for this device instance
    Uint8T  portNum        - port number 0 to 3
    zl5011xBooleanE filterBroadcast, - ONE to filter out broaadcast packets
   zl5011xBooleanE filterMulticast,  - etc
   zl5011xBooleanE filterWrongUnicast-
 Outputs:

 Returns:
    zlStatusE

 Remarks:

*******************************************************************************/
extern zlStatusE zl5011xPkiSetPacketFiltering(zl5011xParamsS *zl5011xParams,
                                             Uint8T  portNum,
                                             zl5011xBooleanE filterBroadcast,
                                             zl5011xBooleanE filterMulticast,
                                             zl5011xBooleanE filterWrongUnicast)
{
   zlStatusE status = ZL5011X_OK;
   Uint32T RegisterBitMask= ZL5011X_3BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER0;
   Uint32T FilterThis= 0;
   Uint32T pkiAddress= ZL5011X_PKI0_CTRL+ (portNum* sizeof( Uint32T));

   ZL5011X_TRACE(ZL5011X_PKI_FN_ID,
         "zl5011xPkiSetPacketFiltering: port number %d, set boolean values- "
         "filter broadcast= %d, filter multicast= %d, filter non unicast=%d",
         portNum, filterBroadcast, filterMulticast, filterWrongUnicast, 0, 0);


   if( status== ZL5011X_OK)
   {
      status= ZL5011X_CHECK_BOOLEAN( filterBroadcast);
   }
   if( status== ZL5011X_OK)
   {
      status= ZL5011X_CHECK_BOOLEAN( filterMulticast);
   }
   if( status== ZL5011X_OK)
   {
      status= ZL5011X_CHECK_BOOLEAN( filterWrongUnicast);
   }

   /* write relevant Control Reg bits  */
   if( status== ZL5011X_OK)
   {
      if( filterBroadcast== ZL5011X_TRUE)
      {
         FilterThis= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER2;
      }
      if( filterMulticast== ZL5011X_TRUE)
      {
         FilterThis |= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER1;
      }
      if( filterWrongUnicast== ZL5011X_TRUE)
      {
         FilterThis |= ZL5011X_1BIT_MASK << ZL5011X_PKI_CTRL_REG_ADDR_FILTER0;
      }

      status = zl5011xReadModWrite(zl5011xParams, pkiAddress, FilterThis, RegisterBitMask);
   }

   /* and update this in structure */
   if( status== ZL5011X_OK)
   {
      zl5011xParams->pki.lanPort[ portNum].macControl.filterBroadcast= filterBroadcast;
      zl5011xParams->pki.lanPort[ portNum].macControl.filterMulticast= filterMulticast;
      zl5011xParams->pki.lanPort[ portNum].macControl.filterWrongUnicast= filterWrongUnicast;
   }
   return(status);
}

/*******************************************************************************
 Function:
    zl5011xPkiGetEtherStats


 Description:
   Reads the port counters out of the device structure and formats the stats, using
   64 bit counters if they are enabled. Conforms with RFC 2819 for Remote Network
   Monitoring MIB (Management Information Base).

 Inputs:
    zl5011xParams      Pointer to the structure for this device instance
    Uint8T  portNum        - port number 0 to 3
    zl5011xEtherStatsS *     pEtherStats  - pointer to the structure to receive the data

 Outputs:

 Returns:
    zlStatusE

 Remarks:

⌨️ 快捷键说明

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