📄 info.c
字号:
/* 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 + -