📄 syscon.c
字号:
switch( REGFIELD( data8, SPD_RFSH_RT_RATE ) ) { case SPD_RFSH_RT_RATE_125 : /* 125 us */ *(UINT32 *)param = 125000; break; case SPD_RFSH_RT_RATE_62_5 : /* 62.5 us */ *(UINT32 *)param = 62500; break; case SPD_RFSH_RT_RATE_31_3 : /* 31.3 us */ *(UINT32 *)param = 31300; break; case SPD_RFSH_RT_RATE_15_625 : /* 15.625 us */ *(UINT32 *)param = 15625; break; case SPD_RFSH_RT_RATE_7_8 : /* 7.8 us */ *(UINT32 *)param = 7800; break; default : /* Assume 3.9us */ *(UINT32 *)param = 3900; break; } return OK;}/************************************************************************ * Implementation : Public functions ************************************************************************//* Functions of the format required for registered SYSCON functions. * Local to SYSCON module. */UINT32syscon_true_read( void *param, void *data, UINT32 size ){ *(bool *)param = TRUE; return OK;}UINT32syscon_false_read( void *param, void *data, UINT32 size ){ *(bool *)param = FALSE; return OK;}UINT32syscon_endian_big_read( void *param, void *data, UINT32 size ){ *(bool *)param = ((*(UINT8 *)(&endian_test) == 0x12) ? TRUE : FALSE ); return OK;}UINT32syscon_string_read( void *param, void *data, UINT32 size ){ *(char **)param = (char *)data; return OK;}UINT32syscon_uint8_read( void *param, void *data, UINT32 size ){ *(UINT8 *)param = *(UINT8 *)data; return OK;}UINT32syscon_uint32_read( void *param, void *data, UINT32 size ){ *(UINT32 *)param = *(UINT32 *)data; return OK;}UINT32syscon_bool_read( void *param, void *data, UINT32 size ){ *(bool *)param = *(bool *)data; return OK;}UINT32syscon_bool_write( void *param, void *data, UINT32 size ){ *(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; UINT32 i; /* 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]; /* 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_CPU_CLOCK_FREQ_ID, board_cpu_clock_freq_generic_read, NULL, NULL, NULL ); syscon_register_generic( SYSCON_BOARD_BUS_CLOCK_FREQ_ID, board_bus_clock_freq_generic_read, NULL, NULL, 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_ICACHE_AVAIL_BPW_ID, cpu_icache_avail_bpw_generic_read, NULL, NULL, NULL ); syscon_register_generic( SYSCON_CPU_ICACHE_AVAIL_ASSOC_ID, cpu_icache_avail_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_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_DCACHE_AVAIL_BPW_ID, cpu_dcache_avail_bpw_generic_read, NULL, NULL, NULL ); syscon_register_generic( SYSCON_CPU_DCACHE_AVAIL_ASSOC_ID, cpu_dcache_avail_assoc_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_SCACHE_SIZE_CURRENT_ID, cpu_scache_size_current_generic_read, NULL, NULL, NULL ); syscon_register_generic( SYSCON_CPU_SCACHE_LINESIZE_CURRENT_ID, cpu_scache_linesize_current_generic_read, NULL, NULL, NULL ); syscon_register_generic( SYSCON_CPU_SCACHE_ASSOC_CURRENT_ID, cpu_scache_assoc_current_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_SPD_ID, board_systemram_refresh_ns_spd_read, NULL, NULL, NULL ); syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_SRASPRCHG_NS_SPD_ID, board_systemram_srasprchg_ns_spd_read, NULL, NULL, NULL ); syscon_register_generic( SYSCON_BOARD_SYSTEMRAM_SRAS2SCAS_NS_SPD_ID, board_systemram_sras2scas_ns_spd_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 value of Config */ syscon_register_generic( SYSCON_CPU_CP0_CONFIG_RESET_ID, cpu_cp0_config_reset_generic_read, NULL, NULL, NULL ); /* Generic TTY */ syscon_generic_tty_init(); /* Platform specific, except TTY */ syscon_arch_board_init(syscon_objects); /* Platform specific TTY */ syscon_arch_tty_init(); /* CPU specifics */ syscon_arch_cpu_init(syscon_objects); /* 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 ) ); /* Store initial setting of CP0 CONFIG register */ SYSCON_read( SYSCON_CPU_CP0_CONFIG_ID, (void *)&config_init, sizeof(UINT32) ); return OK;}/************************************************************************ * * 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, param_size ); 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, param_size ); 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 + -