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

📄 syscon_platform.c

📁 This product may be controlled for export purposes. You may not export, or transfer for the purpos
💻 C
📖 第 1 页 / 共 5 页
字号:
 ************************************************************************/static UINT32com_iic_baudrate_atlas_read(    void   *param,    void   *data,    UINT32 size ){    *(UINT8*)param = ATLAS_IICFREQ_103125HZ;    return OK;}/************************************************************************ *  board_eeprom_def_generic_read ************************************************************************/static UINT32board_eeprom_def_generic_read(    void   *param,    void   *data,    UINT32 size ){    *(t_syscon_eeprom_def **)param = eeprom_def;    return OK;}/************************************************************************ * *                          eeprom_read *  Description : *  ------------- * *  Read eeprom data by calling EEPROM driver * *  Return values : *  --------------- * *  Driver return value (OK in case of no error) * ************************************************************************/static INT32 eeprom_read(     UINT32  minor,		/* Minor device number			*/    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;    return IO_read( SYS_MAJOR_EEPROM_IIC, minor, &readbuf );}/************************************************************************ *  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 * ************************************************************************/voidsyscon_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;    switch( sys_platform )    {      case PRODUCT_MALTA_ID :      case PRODUCT_ATLASA_ID :	/*  Core card specifics */	if( sys_platform == PRODUCT_MALTA_ID )	{	    syscon_arch_core_init( objects,			           /* RAM size */				   MALTA_SYSTEMRAM_SIZE,				   /* PCI memory space (transparent) */				   MALTA_PCI_MEM_BASE,				   MALTA_PCI_MEM_SIZE,				   0,				   /* PCI IO space (non-transparent) */				   0,				   MALTA_PCI_IO_SIZE,				   MALTA_PCI_IO_BASE );        }	else	{	    syscon_arch_core_init( objects,			           /* RAM size */			           ATLAS_SYSTEMRAM_SIZE,			           /* PCI Memory space (transparent) */			           ATLAS_PCI_MEM_BASE,			           ATLAS_PCI_MEM_SIZE,			           0,			           /* PCI IO space (transparent) */			           ATLAS_PCI_IO_BASE,			           ATLAS_PCI_IO_SIZE,			           0 );        }	        /*  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);	/* Setup EEPROM data */	eeprom_count = 2;	eeprom_def[0].minor = EEPROM_MINOR_NM24C09;	eeprom_def[0].name  = eeprom_system_name;	eeprom_def[0].descr = eeprom_system_descr;	eeprom_def[1].minor = EEPROM_MINOR_SPD000;	eeprom_def[1].name  = eeprom_spd0_name;	eeprom_def[1].descr = eeprom_spd0_descr;        break;      case PRODUCT_SEAD_ID  :      case PRODUCT_SEAD2_ID :	if (sys_corecard == MIPS_REVISION_CORID_SEAD_MSC01)	{	    sys_nb_base = KSEG1(SEAD_MSC01_REG_BASE);	    syscon_arch_core_init( objects, 0, 0, 0, 0, 0, 0, 0 );        }        /*  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);	/* Setup EEPROM data */	eeprom_count = 1;	eeprom_def[0].minor = EEPROM_MINOR_SPD000;	eeprom_def[0].name  = eeprom_spd0_name;	eeprom_def[0].descr = eeprom_spd0_descr;	/*  The objects below are usually registered by	 *  syscon_arch_core_init(), but this function is not called	 *  for SEAD and SEAD-2 cards, since they don't have a core	 *  card.	 */        syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_BASE_ID,            board_systemram_base_sead_read, NULL,	    NULL,			    NULL );	syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_SIZE_ID,            board_systemram_size_sead_read, NULL,	    NULL,			    NULL );	if (sys_corecard == MIPS_REVISION_CORID_SEAD_MSC01)	    break;        syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_REFRESH_NS_CFG_ID,	     board_systemram_refresh_ns_sead_read,  NULL,	     board_systemram_refresh_ns_sead_write, NULL );        syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_SRASPRCHG_CYCLES_CFG_ID,	     board_systemram_srasprchg_cycles_sead_read,  NULL,	     board_systemram_srasprchg_cycles_sead_write, NULL );        syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_SRAS2SCAS_CYCLES_CFG_ID,	     board_systemram_sras2scas_cycles_sead_read,  NULL,	     board_systemram_sras2scas_cycles_sead_write, NULL );        syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_CASLAT_CYCLES_CFG_ID,	     board_systemram_caslat_cycles_sead_read, NULL,	     NULL,				      NULL );        syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_READ_BURSTLEN_CFG_ID,	     board_systemram_read_burstlen_sead_read, NULL,	     NULL,				      NULL );        syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_WRITE_BURSTLEN_CFG_ID,	     board_systemram_write_burstlen_sead_read, NULL,	     NULL,				       NULL );        break;      default :        break;    }    /* Register objects */    syscon_register_generic( SYSCON_BOARD_PRODUCTID_ID,			     board_productid_generic_read, NULL,			     NULL,			   NULL );    syscon_register_generic( SYSCON_BOARD_PRODUCTREV_ID,			     board_productrev_generic_read, NULL,			     NULL,			    NULL );    syscon_register_generic( SYSCON_BOARD_REVISION_ID,			     board_revision_generic_read, NULL,			     NULL,			  NULL );    syscon_register_generic( SYSCON_BOARD_NMI_STATUS_ID,			      board_nmi_status_generic_read, 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 );    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 );    syscon_register_id_board( SYSCON_BOARD_NMI_ACK_ID,			      /* Atlas */			      NULL,			       NULL,			      board_nmi_ack_atlas_malta_write, NULL,			      /* SEAD */			      NULL,			       NULL,			      board_nmi_ack_sead_write,	       NULL,			      /* Malta */			      NULL,			       NULL,			      board_nmi_ack_atlas_malta_write, 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 );    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 );    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 );    syscon_register_id

⌨️ 快捷键说明

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