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

📄 syscon_platform.c

📁 yamon2.27.tar.gz bootloader 在au1200上完全通过
💻 C
📖 第 1 页 / 共 5 页
字号:
			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 + -