📄 syscon_platform.c
字号:
UINT32 offset, /* Byte position */
UINT32 length, /* Byte count */
void *user_variable ) /* Buffer for data */
{
t_EEPROM_read_descriptor readbuf;
readbuf.offset = offset + EEPROM_COM_EN0_BASE;
readbuf.length = length;
readbuf.buffer = user_variable;
#if 0
return IO_read( SYS_MAJOR_EEPROM_IIC, minor, &readbuf );
#else
return 0;
#endif
}
/************************************************************************
* Implementation : Public functions
************************************************************************/
/************************************************************************
*
* syscon_get_eeprom_data
* Description :
* -------------
*
* Read data store in EEPROM.
* Data is stored in the format defined in file eeprom_nm24c09_layout.h
*
* Return values :
* ---------------
*
* None
*
************************************************************************/
void
syscon_get_eeprom_data(
t_mac_addr **mac_addr, /* Set to mac addr (NULL if invalid) */
t_sn_bcd **sn ) /* Set to S/N (NULL if invalid) */
{
t_eeprom_layout eeprom;
UINT32 minor = EEPROM_MINOR_NM24C09;
UINT8 csum, csum_read;
UINT32 pos;
UINT8 id, len;
UINT8 value[255];
UINT32 *amd_base;
static bool first = TRUE;
if( (sys_platform != PRODUCT_MALTA_ID) &&
(sys_platform != PRODUCT_ATLASA_ID) )
{
goto eeprom_error;
}
/* Self-initialisation */
if( first )
first = FALSE;
else
{
if( mac_addr )
*mac_addr = mac_addr_read;
if( sn )
*sn = sn_read;
return;
}
/* Initial values */
pos = 0;
mac_addr_read = NULL;
sn_read = NULL;
/* Version */
if( eeprom_read( minor, pos++, 1, &eeprom.version ) != OK )
goto eeprom_error;
csum = eeprom.version;
switch( eeprom.version )
{
case EEPROM_VERSION_1 :
/* Count */
if( eeprom_read( minor, pos++, 1, &eeprom.count ) != OK )
goto eeprom_error;
csum += eeprom.count;
while( eeprom.count-- )
{
/**** Read field ****/
/* ID */
if( eeprom_read( minor, pos++, 1, &id ) != OK )
goto eeprom_error;
csum += id;
/* len */
if( eeprom_read( minor, pos++, 1, &len ) != OK )
goto eeprom_error;
csum += len;
/* Read field */
if( eeprom_read( minor, pos, len, value ) != OK )
goto eeprom_error;
switch( id )
{
case EEPROM_ID_MAC :
/* MAC address */
if( len == SYS_MAC_ADDR_SIZE )
{
mac_addr_read = &mac_addr_buffer;
memcpy( mac_addr_buffer, value, len );
}
else
goto eeprom_error;
break;
case EEPROM_ID_SN :
/* Serial number */
if( len == SYS_SN_BCD_SIZE )
{
sn_read = &sn_buffer;
memcpy( sn_buffer, value, len );
}
else
goto eeprom_error;
break;
default :
/* Ignore */
break;
}
pos += len;
while( len-- )
csum += value[len];
}
/* Read checksum */
if( eeprom_read( minor, pos, 1, &csum_read ) != OK )
goto eeprom_error;
if( csum_read != csum )
goto eeprom_error;
break;
default :
/* Unknown eeprom format */
goto eeprom_error;
}
if( sys_platform == PRODUCT_MALTA_ID )
{
/* Get MAC-address from AMD-EEPROM */
if( SYSCON_read( SYSCON_BOARD_AM79C973_BASE_ID,
&(amd_base),
sizeof(amd_base) ) == OK )
{
amd_base = (void *)KSEG1( amd_base ) ;
REG( &amd_mac_addr, WORD0 ) = LE32_TO_CPU( REG( amd_base, WORD0 ) ) ;
REG( &amd_mac_addr, WORD1 ) = LE32_TO_CPU( REG( amd_base, WORD1 ) ) ;
mac_addr_read = (void*)&amd_mac_addr ;
}
else
{
mac_addr_read = NULL ;
}
}
if( mac_addr )
*mac_addr = mac_addr_read;
if( sn )
*sn = sn_read;
return;
eeprom_error :
mac_addr_read = NULL;
sn_read = NULL;
if( mac_addr )
*mac_addr = NULL;
if( sn )
*sn = NULL;
}
/************************************************************************
*
* syscon_arch_board_init
* Description :
* -------------
*
* Initialize platform specific part of SYSCON (except TTY related parts)
*
* Return values :
* ---------------
*
* None
*
************************************************************************/
void
syscon_arch_board_init(
t_syscon_obj *objects ) /* Array of SYSCON objects */
{
syscon_objects = objects;
#if 0
switch( sys_platform )
{
case PRODUCT_MALTA_ID :
case PRODUCT_ATLASA_ID :
/* Setup LED display addresses.
* Atlas and Malta have same mapping.
*/
alpha_display_size = 8;
alpha_io[0] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS0);
alpha_io[1] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS1);
alpha_io[2] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS2);
alpha_io[3] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS3);
alpha_io[4] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS4);
alpha_io[5] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS5);
alpha_io[6] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS6);
alpha_io[7] = (UINT32 *)(KSEG1BASE + ATLAS_ASCIIPOS7);
break;
case PRODUCT_SEAD_ID :
case PRODUCT_SEAD2_ID :
/* Setup LED display addresses */
alpha_display_size = 8;
alpha_io[0] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS0);
alpha_io[1] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS1);
alpha_io[2] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS2);
alpha_io[3] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS3);
alpha_io[4] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS4);
alpha_io[5] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS5);
alpha_io[6] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS6);
alpha_io[7] = (UINT32 *)(KSEG1BASE + SEAD_ASCIIPOS7);
break;
case PRODUCT_PB1000_ID:
break;
default :
break;
}
#endif
/* Register objects */
syscon_register_id_board( SYSCON_BOARD_NMI_STATUS_ID,
/* Atlas */
board_nmi_status_atlas_read, NULL,
NULL, NULL,
/* SEAD */
board_nmi_status_sead_read, NULL,
NULL, NULL,
/* Malta */
board_nmi_status_malta_read, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_PRODUCTNAME_ID,
/* Atlas */
board_productname_read,
(void *)name_atlas,
NULL,
NULL,
/* SEAD */
board_productname_read,
(sys_platform == PRODUCT_SEAD_ID) ?
(void *)name_sead :
(void *)name_sead2,
NULL,
NULL,
/* Malta */
board_productname_read,
(void *)name_malta,
NULL,
NULL,
/* Pb1000 - Added 10-30-00 - DWP */
board_productname_read,
(void *) name_Pb1500,
NULL,
NULL );
syscon_register_id_board( SYSCON_BOARD_NMI_WERR_ID,
/* Atlas */
board_nmi_werr_atlas_malta_read, NULL,
NULL, NULL,
/* SEAD */
board_nmi_werr_sead_read, NULL,
NULL, NULL,
/* Malta */
board_nmi_werr_atlas_malta_read, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_CORECARDID_ID,
/* Atlas */
board_corecardid_atlas_malta_read, NULL,
NULL, NULL,
/* SEAD */
NULL, NULL,
NULL, NULL,
/* Malta */
board_corecardid_atlas_malta_read, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_CORECARDREV_ID,
/* Atlas */
board_corecardrev_atlas_malta_read, NULL,
NULL, NULL,
/* SEAD */
NULL, NULL,
NULL, NULL,
/* Malta */
board_corecardrev_atlas_malta_read, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_CORECARD_NAME_ID,
/* Atlas */
board_corecard_name_atlas_malta_read, NULL,
NULL, NULL,
/* SEAD */
NULL, NULL,
NULL, NULL,
/* Malta */
board_corecard_name_atlas_malta_read, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_FPGAREV_ID,
/* Atlas */
board_fpgarev_atlas_malta_read, NULL,
NULL, NULL,
/* SEAD */
NULL, NULL,
NULL, NULL,
board_fpgarev_atlas_malta_read, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_RTL_ID,
/* Atlas */
NULL, NULL,
NULL, NULL,
/* SEAD */
board_rtl_sead_read, NULL,
NULL, NULL,
/* Malta */
NULL, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_RTL_NAME_ID,
/* Atlas */
NULL, NULL,
NULL, NULL,
/* SEAD */
board_rtl_name_sead_read, NULL,
NULL, NULL,
/* Malta */
NULL, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_RTLREV_MAJOR_ID,
/* Atlas */
NULL, NULL,
NULL, NULL,
/* SEAD */
board_rtlrev_major_sead_read, NULL,
NULL, NULL,
/* Malta */
NULL, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_RTLREV_MINOR_ID,
/* Atlas */
NULL, NULL,
NULL, NULL,
/* SEAD */
board_rtlrev_minor_sead_read, NULL,
NULL, NULL,
/* Malta */
NULL, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP */
NULL, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_USE_DEFAULT_ID,
/* Atlas */
board_use_default_atlas_malta_read, NULL,
NULL, NULL,
/* SEAD */
board_use_default_sead_read, NULL,
NULL, NULL,
/* Malta */
board_use_default_atlas_malta_read, NULL,
NULL, NULL,
/* Pb1000 - Added 10-30-00 - DWP (no default switch so returns 0) */
board_use_default_pb1000_read, NULL,
NULL, NULL );
syscon_register_id_board( SYSCON_BOARD_INIT_BASED_ON_ENV_ID,
/* Atlas */
syscon_true_read, NULL,
NULL, NULL,
/* SEAD (no default switch) */
syscon_false_re
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -