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

📄 pquicc.c

📁 文件内包含了nuclues的内核代码和针对Power PC的编译器。需要用VirtNet生成一个虚拟网卡才可使用
💻 C
📖 第 1 页 / 共 5 页
字号:
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*    This function will handle interrupt service for PQUICC                */
/*                                                                          */
/* AUTHOR                                                                   */
/*                                                                          */
/*    Bill Haggerty            Accelerated Technology Inc.                  */
/*                                                                          */
/* CALLED BY                                                                */
/*                                                                          */
/*    No functions call this function                                       */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*    DEV_Get_Dev_For_Vector                                                */
/*    PQUICC_Recv_Frame                                                     */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*    int  :  interrupt vector                                              */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*    NAME                DATE        REMARKS                               */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/
VOID PQUICC_LISR(INT vector)
{

    DV_DEVICE_ENTRY      *device;
    unsigned long        event,temp;


    device = DEV_Get_Dev_For_Vector(vector);

    event =     pquicc->scc_regs[0].scc_scce;
    event &=    pquicc->scc_regs[0].scc_sccm;

    temp = event;
    pquicc->scc_regs[0].scc_scce = temp; 

        if ( (event & ETHERNET_RXF) )
            {
               PQUICC_Recv_Frame(device);
            }
        if ( (event & ETHERNET_BSY) ) 
            {
               pquicc->scc_regs[0].scc_scce = 0x0004;
            }
        if ( (event & ETHERNET_RXB) )
            {
               PQUICC_Recv_Frame(device);
            }
        if ( (event & ETHERNET_TXB) )
            {
               pquicc->scc_regs[0].scc_scce = 0x0002;
            }
        if ( (event & ETHERNET_TXE) )
            {
               pquicc->scc_regs[0].scc_scce = 0x0010;
            }

}    /*PQUICC_LISR */

/****************************************************************************/
/* FUNCTION                                                                 */
/*                                                                          */
/*   PQUICC_Recv_HISR                                                       */
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*    This function will handle sending the Buffers_Available event to wake */
/*    up the timer_task to demux input packets.                             */
/*                                                                          */
/* AUTHOR                                                                   */
/*                                                                          */
/*    Bill Haggerty                                                         */
/*                                                                          */
/* CALLED BY                                                                */
/*                                                                          */
/*    PQUICC_Recv_Frame                                                     */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*    NU_Set_Events                                                         */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*    NAME                DATE        REMARKS                               */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/
VOID PQUICC_Recv_HISR (VOID)
{
   NU_Set_Events(&Buffers_Available, (UNSIGNED)2, NU_OR);
   Hisr_Activated = 0;
}

/****************************************************************************/
/* FUNCTION                                                                 */
/*                                                                          */
/*   PQUICC_BD_Init                                                         */
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*     Initialize RX and TX Buffer Descriptor rings.                        */
/*     The buffers are in IMMR + 0x2000.                                    */
/*     The TX buffers are after the RX buffers.                             */
/*                                                                          */
/*                                                                          */
/*                                                                          */
/* AUTHOR                                                                   */
/*                                                                          */
/*     Bill Haggerty                                                        */
/*                                                                          */
/* CALLED BY                                                                */
/*                                                                          */
/*     PQUICC_Open                                                          */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*     get_IMMR                                                             */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*     int  :  Num_of_Buffers  - Number of buffers                          */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*     None                                                                 */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*    NAME                DATE        REMARKS                               */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/
STATUS PQUICC_BD_Init(INT Num_of_Buffers)
{

    unsigned long        *Buffer_Base_Addr;
    int                  BD_RX_Counter,BD_TX_Counter;
    unsigned long        RX_BD_Size;

    Buffer_Base_Addr = (unsigned long *) ((get_IMMR() & 0xffff0000) + 0x2000);

    First_RX_BD = (struct _rx_bd *)Buffer_Base_Addr;
    First_TX_BD = (struct _tx_bd *)Buffer_Base_Addr;
    First_TX_BD = First_TX_BD + Num_of_Buffers;

    pquicc->pram[0].enet_scc.rbase = (ushort)First_RX_BD;
    pquicc->pram[0].enet_scc.tbase = (ushort)First_TX_BD;

    rx_bd = First_RX_BD;
    
    for ( BD_RX_Counter = 0;
          BD_RX_Counter < Num_of_Buffers;
          BD_RX_Counter++)
        {
            rx_bd->status = 0;
            rx_bd->data_len = 0;
            rx_bd->status |= RX_BD_Interrupt;
            rx_bd->status |= RX_BD_Empty;
            rx_bd->data_ptr = (ulong)RX_Buff_Mem[BD_RX_Counter];
            rx_bd++;
        }
        rx_bd--;

        rx_bd->status |= RX_BD_Interrupt | RX_BD_Wrap;
        rx_bd->status |= RX_BD_Empty;

        rx_bd = First_RX_BD;



    tx_bd = (struct _tx_bd *)First_TX_BD;

    for ( BD_TX_Counter = 0;
          BD_TX_Counter < Num_of_Buffers;
          BD_TX_Counter++)

        {
            tx_bd->status = 0;
            tx_bd->data_len = 0;
            tx_bd->data_ptr = (ulong)TX_Buff_Mem[BD_TX_Counter];
            tx_bd++;
        } 

    tx_bd--;
    tx_bd->status = TX_BD_Wrap; 
    tx_bd = (struct _tx_bd *)First_TX_BD;


    return NU_SUCCESS;
}

/****************************************************************************/
/* FUNCTION                                                                 */
/*                                                                          */
/*    PQUICC_Open                                                           */
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*    This function initializes the PQUICC SCC1 as an Ethernet controller.  */
/*                                                                          */
/* AUTHOR                                                                   */
/*                                                                          */
/*    Bill Haggerty                                                         */
/*                                                                          */
/* CALLED BY                                                                */
/*                                                                          */
/*    PQUICC_Init                                                           */
/*                                                                          */
/* CALLS                                                                    */
/*                                                                          */
/*    NU_Register_LISR                                                      */
/*    NU_Allocate_Memory                                                    */
/*    NU_Create_HISR                                                        */
/*    get_IMMR                                                              */
/*    PQUICC_BD_Init                                                        */
/*                                                                          */
/* INPUTS                                                                   */
/*                                                                          */
/*    uchar ether_addr pointer  :  MAC address of device                    */
/*    device pointer            :  device to initialize                     */
/*                                                                          */
/* OUTPUTS                                                                  */
/*                                                                          */
/*    None                                                                  */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*  NAME        DATE      REMARKS                                           */
/*                                                                          */
/*     B. Haggerty            05-07-1998          Created version 1.0       */
/*                                                                          */
/****************************************************************************/
STATUS PQUICC_Open (uchar *ether_addr, DV_DEVICE_ENTRY *device)
{

    STATUS               status;
    VOID                 *pointer;
    struct scc_regs      *regs;
    int                  i,scc_num, shift=0;
    unsigned short       base;
    VOID                 (*old_lisr) (INT);
    unsigned long        *bcsr1, *simask;
    int                  delay;

    /* make sure scc_num is zero */
    scc_num = 0;

    /* Register the ethernet LISR */
    NU_Register_LISR(94, PQUICC_LISR, &old_lisr);

    /* Set the Nucleus PLUS High Level Interrupt Service Routines. */
    Hisr_Activated = 0;

    /* create the HISR for handling the interrupt from the Ethernet card */

⌨️ 快捷键说明

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