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

📄 pquicc.c

📁 文件内包含了nuclues的内核代码和针对Power PC的编译器。需要用VirtNet生成一个虚拟网卡才可使用
💻 C
📖 第 1 页 / 共 5 页
字号:
/*                                                                          */
/*    PQUICC_Open                                                           */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*    uchar pointer                                                         */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*  NAME        DATE      REMARKS                                           */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/

STATUS PQUICC_Get_Address (uchar *ether_addr, ulint io_addr)
{

   return ( NU_SUCCESS );
}


/****************************************************************************/
/* FUNCTION                                                                 */
/*                                                                          */
/*  PQUICC_Set_Address                                                      */
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*  This function will handle loading the Ethernet address for PQUICC       */
/*  Ethernet controller, which is not necessary for QUICC, but necessary to */
/*  maintain the interface with the generic code of NUCLEUS NET             */
/*                                                                          */
/* AUTHOR                                                                   */
/*                                                                          */
/*    Bill Haggerty             Accelerated Technology Inc.                 */
/*                                                                          */
/* CALLED BY                                                                */
/*                                                                          */
/*    PQUICC_Open                                                           */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*    uchar pointer  : MAC address                                          */
/*    device pointer : device entry to use                                  */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*  NAME        DATE      REMARKS                                           */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/

VOID PQUICC_Set_Address(uchar *ether_addr, DV_DEVICE_ENTRY *device)
{
    uchar     temp; 
    uchar     *endp;
    uchar     *swap;
    int       i;
    uchar     local[6];
    uchar     *fix;

    memcpy ((void *) local, (void *)ether_addr, 6); 

    swap = local;

    endp = swap + 5;

    while (swap < endp)
    {
      temp = *swap;
      *swap++ = *endp;
      *endp-- = temp;
    }
    

    fix = (uchar *)&pquicc->pram[0].enet_scc.paddr_h;

    fix [0] = local[0];
    fix [1] = local[1];
    fix [2] = local[2];
    fix [3] = local[3];
    fix [4] = local[4];
    fix [5] = local[5];

    pquicc->pram[0].enet_scc.gaddr1 = 0;   /* Zero group address */
    pquicc->pram[0].enet_scc.gaddr2 = 0;
    pquicc->pram[0].enet_scc.gaddr3 = 0;
    pquicc->pram[0].enet_scc.gaddr4 = 0;

    pquicc->pram[0].enet_scc.iaddr1 = 0;   /* Individual hash table not used */
    pquicc->pram[0].enet_scc.iaddr2 = 0;
    pquicc->pram[0].enet_scc.iaddr3 = 0;
    pquicc->pram[0].enet_scc.iaddr4 = 0;

    pquicc->pram[0].enet_scc.taddr_h = 0; /* Temp regs -- clear them */
    pquicc->pram[0].enet_scc.taddr_m = 0;
    pquicc->pram[0].enet_scc.taddr_l = 0;

} /* PQUICC_Set_Address routine */


/****************************************************************************/
/* FUNCTION                                                                 */
/*                                                                          */
/*  PQUICC_Update_Hash_Table                                                */
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*                                                                          */
/* AUTHOR                                                                   */
/*                                                                          */
/*    Bill Haggerty             Accelerated Technology Inc.                 */
/*                                                                          */
/* CALLED BY                                                                */
/*                                                                          */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*  NAME        DATE      REMARKS                                           */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/
STATUS PQUICC_Update_Hash_Table(DV_DEVICE_ENTRY *device)
{

    NET_MULTI          *em;
    uchar              temp; 
    uchar              *endp;
    uchar              *swap;
    int                i;
    uchar              local[6];
    uchar              *fix;

    
    if ( device->dev_ethermulti )
    {
        for ( em = device->dev_ethermulti;
              em != NU_NULL;
              em = em->nm_next )
          {
           

             memcpy ((void *) local, (void *)em, 6); 

             swap = local;

             endp = swap + 5;

             while (swap < endp)
              {
                temp = *swap;
                *swap++ = *endp;
                *endp-- = temp;
              }

              fix = (uchar *)&pquicc->pram[0].enet_scc.taddr_l;

              fix [0] = local[5];
              fix [1] = local[4];
              fix [2] = local[3];
              fix [3] = local[2];
              fix [4] = local[1];
              fix [5] = local[0];


              issue_cmd(0x1000); 

          }

    }


} /* PQUICC_Update_Hash_Table */

/****************************************************************************/
/* FUNCTION                                                                 */
/*                                                                          */
/*    PQUICC_Xmit_Packet                                                    */
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*    Transmit the buffer - copies buffer from NET to CPM buffer and        */
/*    sets bits to send data.  Checks for transmission error after each     */
/*    transmission.                                                         */
/*                                                                          */
/* AUTHOR                                                                   */
/*                                                                          */
/*    Bill Haggerty                                                         */
/*                                                                          */
/* CALLED BY                                                                */
/*                                                                          */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*    issue_cmd                                                             */
/*    memcpy                                                                */
/*    NU_Local_Control_Interrupts                                           */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*    device pointer  :  device to use                                      */
/*    buf_ptr pointer :  buffer to transmit                                 */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*        NAME            DATE      REMARKS                                 */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/
STATUS PQUICC_Xmit_Packet(DV_DEVICE_ENTRY *device, NET_BUFFER *buf_ptr)
{

    int               counter;
    int               error;
    int               old_level;
    int               waiting;
    int               errortrans = 0;

    old_level = NU_Local_Control_Interrupts(NU_DISABLE_INTERRUPTS);


    while (buf_ptr)
    {
        
        memcpy((void *)tx_bd->data_ptr,
               (void *)buf_ptr->data_ptr,
               buf_ptr->data_len);
        tx_bd->data_len        =  buf_ptr->data_len;
        tx_bd->status          &= TX_BD_Wrap;
        tx_bd->status          |= TX_BD_Ready;
 
        while ( buf_ptr->next_buffer )
         { 

           if ( (tx_bd->status & TX_BD_Wrap ) == 0 )
             tx_bd++;
           else
             { 
              tx_bd->status |= TX_BD_Wrap;
              tx_bd = (struct  _tx_bd *)First_TX_BD; 
             }

          buf_ptr = buf_ptr->next_buffer;

⌨️ 快捷键说明

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