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

📄 syscon.c

📁 MIPS下的boottloader yamon 的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
 */

UINT32
syscon_true_read(
    void *param,
    void *data )
{
    *(bool *)param = TRUE;
    return OK;
}

UINT32
syscon_false_read(
    void *param,
    void *data )
{
    *(bool *)param = FALSE;
    return OK;
}

UINT32
syscon_endian_big_read(
    void *param,
    void *data )
{
    *(UINT32 *)param = ((*(UINT8 *)(&endian_test) == 0x12) ? TRUE : FALSE );
    return OK;
}

UINT32
syscon_uint8_read(
    void *param,
    void *data )
{
    *(UINT8 *)param = *(UINT8 *)data;
    return OK;
}

UINT32
syscon_uint32_read(
    void *param,
    void *data )
{
    *(UINT32 *)param = *(UINT32 *)data;
    return OK;
}

UINT32
syscon_bool_read(
    void *param,
    void *data )
{
    *(bool *)param = *(bool *)data;
    return OK;
}

UINT32
syscon_bool_write(
    void *param,
    void *data )
{
    *(bool *)data = *(bool *)param;
    return OK;
}


/************************************************************************
 *
 *
 *                          SYSCON_init
 *  Description :
 *  -------------
 *
 *  Initializes the 'syscon' module.
 *  
 *  Parameters :
 *  ------------
 *
 *  None
 *
 *  Return values :
 *  ---------------
 *
 *  'OK'(=0), successfull initialization
 *
 ************************************************************************/
INT32 
SYSCON_init( void )
{
    t_sys_error_lookup_registration registration;

    /* initialize free and last pointer for dynamic memory allocation */
    SYSCON_free = &SYSCON_dynamic_memory[0] ;
    SYSCON_last = &SYSCON_dynamic_memory[SYS_MALLOC_DYNAMIC_MEMORY_SIZE-1];

    /* Store initial setting of CP0 CONFIG register */
    config_init  = CP0_config_read();

    /* Generic TTY */
    syscon_generic_tty_init();

    /* Platform specific, except TTY */
    syscon_arch_board_init(syscon_objects);

    /* Platform specific TTY */
    syscon_arch_tty_init();

    /* Core card specific */
    syscon_arch_core_init(syscon_objects);

    /* CPU specifics */
    syscon_arch_cpu_init(syscon_objects);

    /* Register objects */

    syscon_register_generic( SYSCON_BOARD_STACK_SIZE_ID, 
			     board_stack_size_generic_read, NULL,
			     NULL,			    NULL );

    syscon_register_generic( SYSCON_BOARD_APPL_STACK_SIZE_ID,
			     board_appl_stack_size_generic_read, NULL,
			     NULL,				 NULL );

    syscon_register_generic( SYSCON_BOARD_FREE_MEM_ID,
			     board_free_mem_generic_read, NULL,
			     NULL,			  NULL );

    syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_ACTUAL_SIZE_ID,
			     board_systemram_actual_size_generic_read, NULL,
			     NULL,				       NULL );

    syscon_register_generic( SYSCON_CPU_ENDIAN_BIG_ID,
			     syscon_endian_big_read, NULL,
			     NULL,		     NULL );

    syscon_register_generic( SYSCON_DISK_ENVIRONMENT_ID,
			     disk_environment_generic_read,  NULL,
			     disk_environment_generic_write, NULL );

    syscon_register_generic( SYSCON_ERROR_REGISTER_LOOKUP_ID,
			     NULL,				  NULL,
			     error_register_lookup_generic_write, NULL );

    syscon_register_generic( SYSCON_ERROR_LOOKUP_ID,
			     error_lookup_generic_read, NULL,
			     NULL,			NULL );

    syscon_register_generic( SYSCON_BOARD_SN_ID,
			     board_sn_generic_read, NULL,
			     NULL,		    NULL );

    syscon_register_generic( SYSCON_COM_EN0_MAC_ADDR_ID,
			     com_en0_mac_addr_generic_read, NULL,
			     NULL,			    NULL );

    syscon_register_generic( SYSCON_BOARD_MALLOC_ID,
			     board_malloc_generic_read, NULL,
			     NULL,			NULL );

    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_CPU_CLOCK_FREQ_ID,
			     board_cpu_clock_freq_generic_read, NULL,
			     board_cpu_clock_freq_generic_write,	NULL );

    syscon_register_generic( SYSCON_BOARD_BUS_CLOCK_FREQ_ID,
			     board_bus_clock_freq_generic_read, NULL,
			     board_bus_clock_freq_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_ICACHE_SIZE_ID,
			     cpu_icache_size_generic_read, NULL,
			     NULL,			   NULL );

    syscon_register_generic( SYSCON_CPU_ICACHE_LINESIZE_ID,
			     cpu_icache_linesize_generic_read, NULL,
			     NULL,			       NULL );

    syscon_register_generic( SYSCON_CPU_ICACHE_ASSOC_ID,
			     cpu_icache_assoc_generic_read, NULL,
			     NULL,			    NULL );

    syscon_register_generic( SYSCON_CPU_DCACHE_SIZE_ID,
			     cpu_dcache_size_generic_read, NULL,
			     NULL,			   NULL );

    syscon_register_generic( SYSCON_CPU_DCACHE_LINESIZE_ID,
			     cpu_dcache_linesize_generic_read, NULL,
			     NULL,			       NULL );

    syscon_register_generic( SYSCON_CPU_DCACHE_ASSOC_ID,
			     cpu_dcache_assoc_generic_read, NULL,
			     NULL,			    NULL );

    syscon_register_generic( SYSCON_CPU_ICACHE_SIZE_CURRENT_ID,
			     cpu_icache_size_current_generic_read, NULL,
			     NULL,				   NULL );

    syscon_register_generic( SYSCON_CPU_ICACHE_LINESIZE_CURRENT_ID,
			     cpu_icache_linesize_current_generic_read, NULL,
			     NULL,				       NULL );

    syscon_register_generic( SYSCON_CPU_ICACHE_ASSOC_CURRENT_ID,
			     cpu_icache_assoc_current_generic_read, NULL,
			     NULL,				    NULL );

    syscon_register_generic( SYSCON_CPU_DCACHE_SIZE_CURRENT_ID,
			     cpu_dcache_size_current_generic_read, NULL,
			     NULL,				   NULL );

    syscon_register_generic( SYSCON_CPU_DCACHE_LINESIZE_CURRENT_ID,
			     cpu_dcache_linesize_current_generic_read, NULL,
			     NULL,				       NULL );

    syscon_register_generic( SYSCON_CPU_DCACHE_ASSOC_CURRENT_ID,
			     cpu_dcache_assoc_current_generic_read, NULL,
			     NULL,				    NULL );

    syscon_register_generic( SYSCON_CPU_CP0_INDEX_ID,
			     cpu_cp0_index_generic_read,  NULL,
			     cpu_cp0_index_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_ECC_ID,
			     cpu_cp0_ecc_generic_read,  NULL,
			     cpu_cp0_ecc_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_RANDOM_ID,
			     cpu_cp0_random_generic_read, NULL, 
			     NULL,			  NULL );

    syscon_register_generic( SYSCON_CPU_CP0_ENTRYLO0_ID,
			     cpu_cp0_entrylo0_generic_read,  NULL,
			     cpu_cp0_entrylo0_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_ENTRYLO1_ID,
			     cpu_cp0_entrylo1_generic_read,  NULL,
			     cpu_cp0_entrylo1_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_CONTEXT_ID,
			     cpu_cp0_context_generic_read,  NULL,
			     cpu_cp0_context_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_PAGEMASK_ID,
			     cpu_cp0_pagemask_generic_read,  NULL,
			     cpu_cp0_pagemask_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_WIRED_ID,
			     cpu_cp0_wired_generic_read,  NULL,
			     cpu_cp0_wired_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_BADVADDR_ID,
			     cpu_cp0_badvaddr_generic_read, NULL,
			     NULL,			    NULL );

    syscon_register_generic( SYSCON_CPU_CP0_COUNT_ID,
			     cpu_cp0_count_generic_read,  NULL, 
			     cpu_cp0_count_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_ENTRYHI_ID,
			     cpu_cp0_entryhi_generic_read,  NULL,
			     cpu_cp0_entryhi_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_COMPARE_ID,
			     cpu_cp0_compare_generic_read,  NULL,
			     cpu_cp0_compare_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_STATUS_ID,
			     cpu_cp0_status_generic_read,  NULL,
			     cpu_cp0_status_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_CAUSE_ID,
			     cpu_cp0_cause_generic_read,  NULL,
			     cpu_cp0_cause_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_EPC_ID,
			     cpu_cp0_epc_generic_read,  NULL,
			     cpu_cp0_epc_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_PRID_ID,
			     cpu_cp0_prid_generic_read, NULL,
			     NULL,			NULL );

    syscon_register_generic( SYSCON_CPU_CP0_CONFIG_ID,
			     cpu_cp0_config_generic_read,  NULL,
			     cpu_cp0_config_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_LLADDR_ID,
			     cpu_cp0_lladdr_generic_read, NULL,
			     NULL,			  NULL );

    syscon_register_generic( SYSCON_CPU_CP0_WATCHLO_ID,
			     cpu_cp0_watchlo_generic_read,  NULL,
			     cpu_cp0_watchlo_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_WATCHHI_ID,
			     cpu_cp0_watchhi_generic_read,  NULL,
			     cpu_cp0_watchhi_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_CACHEERR_ID,
			     cpu_cp0_cacheerr_generic_read, NULL,
			     NULL,			    NULL );

    syscon_register_generic( SYSCON_CPU_CP0_TAGLO0_ID,
			     cpu_cp0_taglo0_generic_read,  NULL,
			     cpu_cp0_taglo0_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_TAGHI0_ID,
			     cpu_cp0_taghi0_generic_read,  NULL,
			     cpu_cp0_taghi0_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_DATALO1_ID,
			     cpu_cp0_datalo1_generic_read, NULL,
			     NULL,			   NULL );

    syscon_register_generic( SYSCON_CPU_CP0_DATAHI1_ID,
			     cpu_cp0_datahi1_generic_read, NULL,
			     NULL,			   NULL );

    syscon_register_generic( SYSCON_CPU_CP0_ERROREPC_ID,
			     cpu_cp0_errorepc_generic_read,  NULL,
			     cpu_cp0_errorepc_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_DESAVE_ID,
			     cpu_cp0_desave_generic_read,  NULL,
			     cpu_cp0_desave_generic_write, NULL );

    syscon_register_generic( SYSCON_CPU_CP0_CONFIG_RESET_ID,
			     cpu_cp0_config_reset_generic_read, NULL,
			     NULL,				NULL );

    syscon_register_generic( SYSCON_COM_EN0_IP_ADDR_ID,
			     com_en0_ip_addr_generic_read, NULL,
			     NULL,			   NULL );

    syscon_register_generic( SYSCON_COM_EN0_IP_SUBNETMASK_ID,
			     com_en0_ip_subnetmask_generic_read, NULL,
			     NULL,				 NULL );

    syscon_register_generic( SYSCON_COM_EN0_IP_GATEWAYADDR_ID,
			     com_en0_ip_gatewayaddr_generic_read, NULL,
			     NULL,				  NULL );

    syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_REFRESH_NS_ID,
			     board_systemram_refresh_ns_read, NULL,
			     NULL,			      NULL );

    syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_SRASPRCHG_NS_ID,
			     board_systemram_srasprchg_ns_read, NULL,
			     NULL,			        NULL );

    syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_SRAS2SCAS_NS_ID,
			     board_systemram_sras2scas_ns_read, NULL,
			     NULL,			        NULL );

    syscon_register_generic( SYSCON_COM_EN0_ENABLE_ID,
                             com_en0_enable, NULL,
                             NULL,                                NULL );

    syscon_register_generic( SYSCON_COM_EN0_DISABLE_ID,
                             com_en0_disable, NULL,
                             NULL,                                NULL );

    syscon_register_generic( SYSCON_FILE_BATCH_ACCESS_ID,
                             file_batch_access_generic_read, NULL,
                             NULL,                                NULL );

    syscon_register_generic( SYSCON_FILE_BOOTSERVER_ID,
                             file_bootserver_generic_read, NULL,
                             NULL,                                NULL );

    /* reset lookup array */
    memset( (void*)&registered_lookup[0], 0, sizeof(registered_lookup) );

    /* register lookup syserror */
    registration.prefix = SYSERROR_DOMAIN( ERROR_SYSCON );
    registration.lookup = SYSCON_error_lookup;

    SYSCON_write( SYSCON_ERROR_REGISTER_LOOKUP_ID,
                  &registration,
                  sizeof( registration ) );
}


/************************************************************************
 *
 *                          SYSCON_read
 *  Description :
 *  -------------
 *
 *  Read the value of system configuration object given by 'id'.
 *
 *  Parameters :
 *  ------------
 *
 *  'id',           IN,    Object id.
 *  'param',        INOUT, Buffer for object value.
 *  'param_size',   IN,    Size of buffer (must match size of object).
 *
 *  Return values :
 *  ---------------
 *
 *  'OK'(=0), returned parameter value and size are valid.
 *  'ERROR_SYSCON_UNKNOWN_PARAM': parameter not available on this board
 *  'ERROR_SYSCON_SIZE_MISMATCH': parameter size check failed
 *
 ************************************************************************/
INT32 
SYSCON_read(
    t_syscon_ids  id,		/* IN: object ID			*/
    void          *param,       /* IN: Buffer for object value		*/
    UINT32	  param_size)   /* IN: Buffer size (bytes)		*/
{
    t_syscon_obj *obj;

    if( id >= SYSCON_OBJ_COUNT )
        return ERROR_SYSCON_UNKNOWN_PARAM;
    else
    {
        obj = &syscon_objects[id];

        if( obj->read )
	    return obj->read( param, obj->read_data );
	else
	    return ERROR_SYSCON_WRITE_ONLY_ID;
    }
}


/************************************************************************
 *
 *                          SYSCON_write
 *  Description :
 *  -------------
 *
 *  Write the system configuration object given by 'id'.
 *
 *  Parameters :
 *  ------------
 *
 *  'id',         IN,    Object id.
 *  'param',      IN,    Buffer containing value to write.
 *  'param_size', IN,    Size of buffer.
 *
 *  Return values :
 *  ---------------
 *
 *  'OK'(=0), parameter value has been set
 *  'ERROR_SYSCON_UNKNOWN_PARAM': parameter not available on this board
 *  'ERROR_SYSCON_SIZE_MISMATCH': parameter size check failed
 *
 ************************************************************************/
INT32 
SYSCON_write(
    t_syscon_ids  id,		/* IN: object ID			*/
    void          *param,       /* IN: Buffer with value		*/
    UINT32	  param_size)   /* IN: Size of buffer  (bytes)		*/
{
    t_syscon_obj *obj;

    if( id >= SYSCON_OBJ_COUNT )
        return ERROR_SYSCON_UNKNOWN_PARAM;
    else
    {
        obj = &syscon_objects[id];

        if( obj->write )
	    return obj->write( param, obj->write_data );
	else
	    return ERROR_SYSCON_READ_ONLY_ID;
    }
}


/************************************************************************
 *
 *                          syscon_register_generic
 *  Description :
 *  -------------
 *
 *  Function used to register generic SYSCON object functions.
 *
 *  A read and/or write function may be registered.
 *  A NULL function pointer indicates that the operation (read or
 *  write) is not allowed.
 *
 *  read_data and write_data pointers are passed to the read and write
 *  function.
 *
 *  Return values :
 *  ---------------
 *
 *  None
 *
 ************************************************************************/
void 
syscon_register_generic(
    t_syscon_ids   id,			/* OBJECT ID from syscon_api.h	*/
    t_syscon_func  read_generic,	/* Generic read function	*/
    void	   *read_data,		/* Registered data		*/
    t_syscon_func  write_generic,	/* Generic write function	*/
    void	   *write_data )	/* Registered data		*/
{
    syscon_objects[id].read       = read_generic;
    syscon_objects[id].read_data  = read_data;
    syscon_objects[id].write      = write_generic;
    syscon_objects[id].write_data = write_data;
}


⌨️ 快捷键说明

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