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

📄 info.c

📁 MIPS下的boottloader yamon 的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    /* Company */
    if(SHELL_PUTS( "\n\n**** Company ****\n" )) return;
    if(SHELL_PUTS( MIPS_NAME )) return;

    /* Support */
    if(SHELL_PUTS( "\n\n**** Support ****\n" )) return;
    if(SHELL_PUTS( SUPPORT )) return;

    /* SDB Board version */
    determine_sdbrevision( msg );
    if(SHELL_PUTS( "\n\n**** SDB Board Version ****\n" )) return;
    if(SHELL_PUTS( msg )) return;

    /* Boot Monitor Revision Date */
    if(SHELL_PUTS( "\n\n**** Boot Monitor Revision Date ****\n" )) return;
    if(SHELL_PUTS( _shell_date )) return;         /* TBD MM/DD/YYYY */

    if(SYSCON_read( SYSCON_CPU_CP0_PRID_ID, &wdata, sizeof(wdata)) == OK)
    {
        if(SHELL_PUTS( "\n\n**** Processor ID/Version ****\n" )) return;

        /* ProcessorID */
	if( disp_prid( wdata ) )
	    return;
    }

    /* Upgrade Info */
    if(SHELL_PUTS( "\n\n**** Upgrade Info ****\n" )) return;
    if(SHELL_PUTS( UPGRADE )) return;

    /* Configuration Info */
    if(SHELL_PUTS( "\n\n**** Configuration Info ****\n" )) return;
    if(SHELL_PUTS( CONFIGURATION )) return;

    /**** Memory ****/

    if(SHELL_PUTS( "\n\n**** Memory Footprint ****\n" )) return;
 
    if(SYSCON_read( SYSCON_BOARD_SYSTEMRAM_ACTUAL_SIZE_ID, 
		    &wdata, sizeof(wdata)) == OK)
    {
        if(SHELL_PUTS( "SDRAM size =" )) return;
        sprintf( msg, "%d MB\n", wdata/(1024*1024) );
        if(SHELL_PUTS_INDENT( msg, INDENT )) return;
    }

    flash_size = determine_total_flash();
    if(SHELL_PUTS( "Flash memory size =" )) return;
    sprintf( msg, "%d MB\n", flash_size/(1024*1024) );
    if(SHELL_PUTS_INDENT( msg, INDENT )) return;
}

static void
determine_sdbrevision( 
    char *msg )
{
    UINT32 brev, ctype, crev, frev;
  
    strcpy( msg, SDBREV );

    /*  We can assume this is an Atlas board since info_sdb is only
     *  registered in that case.
     */

    SYSCON_read(SYSCON_BOARD_PRODUCTREV_ID,  &brev,  sizeof(UINT32));
    SYSCON_read(SYSCON_BOARD_CORECARDID_ID,  &ctype, sizeof(UINT32));
    SYSCON_read(SYSCON_BOARD_CORECARDREV_ID, &crev,  sizeof(UINT32));
    SYSCON_read(SYSCON_BOARD_FPGAREV_ID,     &frev,  sizeof(UINT32));

    if(      (brev   == 0)	 &&
	     (ctype  == 0)	 &&
	     (crev   == 0)	 &&
	     (frev   <= 6) )
    {
 	strcat( msg, "1.0" );
    }
    else if( (brev   == 0)	 &&
	     (ctype  == 0)	 &&
	     (crev   == 0)	 &&
	     (frev   == 7) )
    {
 	strcat( msg, "1.1" );
    }
    else
    {
	strcpy( msg, SDBREV_UNKNOWN );
    }
}

/************************************************************************
 *                          info_uart
 ************************************************************************/

static bool
info_uart( void )
{
    char   msg[80];
    UINT32 myport;
    UINT32 mymajor;
    UINT32 myminor;
    t_SERIAL_ctrl_descriptor my_ioctl;

    my_ioctl.sc_command = SERIAL_CTRL_GET_STATISTICS;

    for ( myport = PORT_TTY0; myport <= PORT_TTY1; myport++ )
    {
	SYSCON_read( (myport == PORT_TTY0) ? SYSCON_COM_TTY0_MAJOR : SYSCON_COM_TTY1_MAJOR,
	             (void *)(&mymajor),
		     sizeof(UINT32) );

	SYSCON_read( (myport == PORT_TTY0) ? SYSCON_COM_TTY0_MINOR : SYSCON_COM_TTY1_MINOR,
	             (void *)(&myminor),
		     sizeof(UINT32) );

        sprintf( msg, "TTY%x:\n", myport );
        if(SHELL_PUTS( msg )) return FALSE;

        if (IO_ctrl(mymajor, myminor, &my_ioctl)) continue;

        if(SHELL_PUTS( " Bytes transmitted:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_tx_bytes);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;

        if(SHELL_PUTS( " Bytes received:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_rx_bytes);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;

        if(SHELL_PUTS( " Receive overruns:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_rx_overrun);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;

        if(SHELL_PUTS( " Receive parity errors:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_rx_parity);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;

        if(SHELL_PUTS( " Receive framing errors:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_rx_framing);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;

        if(SHELL_PUTS( " Receive breaks:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_rx_break);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;

        if(SHELL_PUTS( " Receive Interrupts:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_rx_irqs);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;

        if(SHELL_PUTS( " No of resets:" )) return FALSE;
        sprintf( msg, "%d\n", my_ioctl.sc_arg.sc_statistics.ua_no_of_init);
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }
    
    return TRUE;
}


/************************************************************************
 *                          info_lan
 ************************************************************************/

static bool
info_lan( void )
{
    /* TBD : should be able to break */

    INT32 rcode ;
    UINT32 product ;
    UINT32 en0_major_device, en0_minor_device ;
    t_LAN_CTRL_desc lan_ioctl;

    /* get a EN0 major device number */
    rcode = SYSCON_read( SYSCON_COM_EN0_MAJOR_DEVICE_ID,
                         &(en0_major_device),
                         sizeof(en0_major_device) );
    if (rcode)  return FALSE ;

	rcode = SYSCON_read( SYSCON_COM_EN0_MINOR_DEVICE_ID,
                         &(en0_minor_device),
                         sizeof(en0_minor_device) );
    if (rcode)  return FALSE ;


    /* Display LAN device driver statistics */
    lan_ioctl.command = LAN_CTRL_DISPLAY_STATISTICS ;
    IO_ctrl(  en0_major_device, en0_minor_device, &lan_ioctl ) ;

    return TRUE;
}


/************************************************************************
 *                          info_pci
 ************************************************************************/
static bool
info_pci( void )
{
    /* TBD : should be able to break */

/*    pci_display(); */

    return TRUE;
}


/************************************************************************
 *                          info_isa
 ************************************************************************/
static bool
info_isa( void )
{
    return isa_display();
}


/************************************************************************
 *                          info_cpu
 ************************************************************************/
static bool
info_cpu( void )
{
    char   msg[80];
    UINT32 wdata, wdata_cur;
    UINT8  bdata, bdata_cur;
    bool   tlb_avail;
    
    if( !info_cpu_boot() )
        return FALSE;

    /* ICACHE SIZE */
    if( (SYSCON_read( SYSCON_CPU_ICACHE_SIZE_ID, 
		     &wdata, 
		     sizeof(wdata)) == OK)	&&
        (SYSCON_read( SYSCON_CPU_ICACHE_SIZE_CURRENT_ID, 
		     &wdata_cur, 
		     sizeof(wdata_cur)) == OK) )
    {
        if(SHELL_PUTS( "ICACHE size =" )) return FALSE;

	if( wdata == wdata_cur )
	    sprintf( msg, "%d bytes\n", wdata_cur );
	else
	    sprintf( msg, "%d (%d) bytes\n", wdata_cur, wdata );

	if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* ICACHE LINESIZE */
    if( (SYSCON_read( SYSCON_CPU_ICACHE_LINESIZE_ID, 
		      &wdata, 
		      sizeof(wdata)) == OK)	&&
	(SYSCON_read( SYSCON_CPU_ICACHE_LINESIZE_CURRENT_ID, 
		      &wdata_cur, 
		      sizeof(wdata_cur)) == OK) )
    {
        if(SHELL_PUTS( "ICACHE line size =" )) return FALSE;

	if( wdata == wdata_cur )
            sprintf( msg, "%d bytes\n", wdata_cur );
	else
	    sprintf( msg, "%d (%d) bytes\n", wdata_cur, wdata );	

        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* ICACHE ASSOC */
    if( (SYSCON_read( SYSCON_CPU_ICACHE_ASSOC_ID, 
		     &wdata, 
		     sizeof(wdata)) == OK)	&&
	(SYSCON_read( SYSCON_CPU_ICACHE_ASSOC_CURRENT_ID, 
		     &wdata_cur, 
		     sizeof(wdata_cur)) == OK) )
    {
        if(SHELL_PUTS( "ICACHE associativity =" )) return FALSE;

        if (wdata_cur == 1)
	    sprintf( msg, "direct mapped" );
	else
   	    sprintf( msg, "%d-way", wdata_cur );

	if( wdata != wdata_cur )
	{
	    if( wdata == 1 )
	        sprintf( &msg[strlen(msg)], " (direct mapped)\n" );
	    else
	        sprintf( &msg[strlen(msg)], " (%d-way)\n", wdata );
	}
	else
	    sprintf( &msg[strlen(msg)], "\n" );

        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* DCACHE SIZE */
    if( (SYSCON_read( SYSCON_CPU_DCACHE_SIZE_ID, 
		     &wdata, 
		     sizeof(wdata)) == OK)	&&
        (SYSCON_read( SYSCON_CPU_DCACHE_SIZE_CURRENT_ID, 
		     &wdata_cur, 
		     sizeof(wdata_cur)) == OK) )
    {
        if(SHELL_PUTS( "DCACHE size =" )) return FALSE;

	if( wdata == wdata_cur )
	    sprintf( msg, "%d bytes\n", wdata_cur );
	else
	    sprintf( msg, "%d (%d) bytes\n", wdata_cur, wdata );

	if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }
    
    /* DCACHE LINESIZE */
    if( (SYSCON_read( SYSCON_CPU_DCACHE_LINESIZE_ID, 
		      &wdata, 
		      sizeof(wdata)) == OK)	&&
	(SYSCON_read( SYSCON_CPU_DCACHE_LINESIZE_CURRENT_ID, 
		      &wdata_cur, 
		      sizeof(wdata_cur)) == OK) )
    {
        if(SHELL_PUTS( "DCACHE line size =" )) return FALSE;

	if( wdata == wdata_cur )
            sprintf( msg, "%d bytes\n", wdata_cur );
	else
	    sprintf( msg, "%d (%d) bytes\n", wdata_cur, wdata );	

        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* DCACHE ASSOC */
    if( (SYSCON_read( SYSCON_CPU_DCACHE_ASSOC_ID, 
		     &wdata, 
		     sizeof(wdata)) == OK)	&&
	(SYSCON_read( SYSCON_CPU_DCACHE_ASSOC_CURRENT_ID, 
		     &wdata_cur, 
		     sizeof(wdata_cur)) == OK) )
    {
        if(SHELL_PUTS( "DCACHE associativity =" )) return FALSE;

        if (wdata_cur == 1)
	    sprintf( msg, "direct mapped" );
	else
   	    sprintf( msg, "%d-way", wdata_cur );

	if( wdata != wdata_cur )
	{
	    if( wdata == 1 )
	        sprintf( &msg[strlen(msg)], " (direct mapped)\n" );
	    else
	        sprintf( &msg[strlen(msg)], " (%d-way)\n", wdata );
	}
	else
	    sprintf( &msg[strlen(msg)], "\n" );

        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* TLB */
    if( (SYSCON_read( SYSCON_CPU_TLB_AVAIL_ID,
		 (void *)&tlb_avail,
		 sizeof(bool) ) == OK )		&&

        (SYSCON_read( SYSCON_CPU_TLB_COUNT_ID,
		     (void *)&bdata_cur,
		     sizeof(UINT8) ) == OK)     &&

        (SYSCON_read( SYSCON_CPU_TLB_COUNT_RESET_ID,
		     (void *)&bdata,
		     sizeof(UINT8) ) == OK) )
    {
        if(SHELL_PUTS( "TLB entries =" )) return FALSE;

	if( tlb_avail )
	{
	    sprintf( msg, "%d\n", bdata_cur );
	}
	else
	{
	    if( bdata != 0 )
	        sprintf( msg, "None (%d)\n", bdata );
	    else
	        strcpy( msg, "None\n" );
	}

        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    return TRUE;
}

/************************************************************************
 *                          info_cpu_boot
 ************************************************************************/
static bool
info_cpu_boot( void )
{
    char   msg[80];
    UINT32 wdata;
    UINT32 cpu_freq, bus_freq;
    char   *s;

    if(SYSCON_read( SYSCON_CPU_CP0_PRID_ID, &wdata, sizeof(wdata)) == OK)
    {
        if( disp_prid( wdata ) )
	    return FALSE;
    }

    /* Endianess */
    if(SYSCON_read(SYSCON_CPU_ENDIAN_BIG_ID, &wdata, sizeof(wdata)) == OK)
    {
        if(SHELL_PUTS("Endianness =" )) return FALSE;
        if(SHELL_PUTS_INDENT( wdata ? "Big\n" : "Little\n", INDENT )) return FALSE;
    }

    /* CPU and bus frequency */
    if(
        (SYSCON_read( SYSCON_BOARD_CPU_CLOCK_FREQ_ID, 
		      &cpu_freq, sizeof(cpu_freq)) == OK) )

    {
        if(SHELL_PUTS( "CPU = " )) return FALSE;

        if( cpu_freq < 1000*10 )
            sprintf( msg, "%d Hz\n", cpu_freq );
        else if( cpu_freq < 1000000*10 )
            sprintf( msg, "%d kHz\n", (cpu_freq+500)/1000 );
        else
            sprintf( msg, "%d MHz\n", (cpu_freq+500000)/1000000 );


	    if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    return TRUE;
}


/************************************************************************
 *                          info_board
 ************************************************************************/
static bool
info_board( void )
{
    char       msg[80];
    UINT32     wdata;
    t_mac_addr mac;
    t_sn_ascii sn;
    char       *name;

    /* Base board type/revision */

	/**DWP Took out 1-17-02 **/

#if 0
    
	if(SYSCON_read(SYSCON_BOARD_PRODUCTID_ID, &wdata, sizeof(UINT32)) == OK)
    {
        if(SHELL_PUTS( "Board type/revision =" )) return FALSE;

	SYSCON_read( SYSCON_BOARD_PRODUCTNAME_ID, 
		     (void *)(&name),
		     sizeof(char *) );
	
	sprintf( msg, "0x%02x (%s)", wdata, name );
	
        if(SYSCON_read(SYSCON_BOARD_PRODUCTREV_ID, &wdata, sizeof(UINT32)) == OK)
        {
            sprintf( &msg[strlen(msg)], " / 0x%02x\n", wdata );
	}

        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* Board specific decoding of REVISION register */
    if( !shell_arch_info( INDENT ) )
        return FALSE;

#endif

    /* MAC address */
    if(SYSCON_read(SYSCON_COM_EN0_MAC_ADDR_ID, &mac, sizeof(mac)) == OK)
    {
	if(SHELL_PUTS( "MAC address =" )) return FALSE;

        sprintf( msg, "%02x.%02x.%02x.%02x.%02x.%02x\n",
	                 mac[0],
			 mac[1],
			 mac[2],
			 mac[3],
			 mac[4],
			 mac[5] );

        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* Serial number */
    if(SYSCON_read(SYSCON_BOARD_SN_ID, &sn, sizeof(sn)) == OK)
    {
	if(SHELL_PUTS( "Board S/N =" )) return FALSE;
	sprintf( msg, "%s\n", sn  );
        if(SHELL_PUTS_INDENT( msg, INDENT )) return FALSE;
    }

    /* Determine bus frequency */
    if( SYSCON_read(
        SYSCON_BOARD_PCI_FREQ_KHZ_ID,
	(void *)&wdata,
	sizeof(UINT32) ) == OK )
    {
	if(SHELL_PUTS( "PCI bus frequency =" ) ) return;

⌨️ 快捷键说明

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