📄 syscon.c
字号:
*/
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*)®istered_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,
®istration,
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 + -