INT debug_mem_fatal_error(INT bugId, VOID *ptr) { ChipInfo *info; MemBugInfo bugInfo; ULONG size, start; ULONG addr = (ULONG)ptr; if((CORRUPTED_CHIP != bugId) && (CORRUPTED_MEM != bugId) && (SELF_OVERWRITE != bugId)) return bugId; bugInfo.bugID = bugId; info = &(bugInfo.suspect); get_chip_info(addr, info); if(SELF_OVERWRITE == bugId) { addr += info->chipSize; get_chip_info(addr, &(bugInfo.victim)); goto USR_ERR_HANDLER; } get_chip_info(addr, &(bugInfo.victim)); do{ size = info->chipSize; start = info->pageAddr; for(addr -= size; start <= addr; addr -= size) { if(!mem_corrupted(info->heapId, (VOID*)addr)) { info->ptr = (VOID*)addr; break; } } if(start <= addr) break; get_chip_info(start - PAGE_SIZE, info); addr = info->pageAddr; addr += (info->chipSize * info->pageChips); }while(addr); USR_ERR_HANDLER: find_maps((ULONG)ptr, &(bugInfo.mapStart), &(bugInfo.mapEnd)); return record_mem_fatal_error(&bugInfo); }
void ebox_init(void) { get_system_clock(&cpu.clock); get_chip_info(); cpu.company[0] = 'S'; cpu.company[1] = 'T'; cpu.company[2] = '\0'; SysTick_Config(cpu.clock.core/1000);// 每隔 1ms产生一次中断 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//systemticks clock; micro_para = cpu.clock.core/1000000;//减少micros函数计算量 //统计cpu计算能力////////////////// cpu.ability = 0; millis_seconds = 0; do { cpu.ability++;//统计cpu计算能力 } while(millis_seconds < 100); cpu.ability = cpu.ability * 10; //////////////////////////////// ADC1_init(); NVIC_PriorityGroupConfig(NVIC_GROUP_CONFIG); //将pb4默认设置为IO口,禁用jtag RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); set_systick_user_event_per_sec(1000); random_seed(AD_value[0]);//初始化随机数种子 }
static int mxl111sf_init(struct dvb_usb_device *d) { struct mxl111sf_state *state = d_to_priv(d); int ret; static u8 eeprom[256]; struct i2c_client c; ret = get_chip_info(state); if (mxl_fail(ret)) err("failed to get chip info during probe"); mutex_init(&state->fe_lock); if (state->chip_rev > MXL111SF_V6) mxl111sf_config_pin_mux_modes(state, PIN_MUX_TS_SPI_IN_MODE_1); c.adapter = &d->i2c_adap; c.addr = 0xa0 >> 1; ret = tveeprom_read(&c, eeprom, sizeof(eeprom)); if (mxl_fail(ret)) return 0; tveeprom_hauppauge_analog(&c, &state->tv, (0x84 == eeprom[0xa0]) ? eeprom + 0xa0 : eeprom + 0x80); #if 0 switch (state->tv.model) { case 117001: case 126001: case 138001: break; default: printk(KERN_WARNING "%s: warning: " "unknown hauppauge model #%d\n", __func__, state->tv.model); } #endif return 0; }
static int mxl111sf_lg2161_ep6_frontend_attach(struct dvb_usb_adapter *adap, u8 fe_id) { struct dvb_usb_device *d = adap_to_d(adap); struct mxl111sf_state *state = d_to_priv(d); struct mxl111sf_adap_state *adap_state = &state->adap_state[fe_id]; int ret; deb_adv("%s()\n", __func__); /* save a pointer to the dvb_usb_device in device state */ state->d = d; adap_state->alt_mode = (dvb_usb_mxl111sf_isoc) ? 2 : 1; state->alt_mode = adap_state->alt_mode; if (usb_set_interface(d->udev, 0, state->alt_mode) < 0) err("set interface failed"); state->gpio_mode = MXL111SF_GPIO_MOD_MH; adap_state->gpio_mode = state->gpio_mode; adap_state->device_mode = MXL_TUNER_MODE; adap_state->ep6_clockphase = 0; ret = mxl1x1sf_soft_reset(state); if (mxl_fail(ret)) goto fail; ret = mxl111sf_init_tuner_demod(state); if (mxl_fail(ret)) goto fail; ret = mxl1x1sf_set_device_mode(state, adap_state->device_mode); if (mxl_fail(ret)) goto fail; ret = mxl111sf_enable_usb_output(state); if (mxl_fail(ret)) goto fail; ret = mxl1x1sf_top_master_ctrl(state, 1); if (mxl_fail(ret)) goto fail; ret = mxl111sf_init_port_expander(state); if (mxl_fail(ret)) goto fail; ret = mxl111sf_gpio_mode_switch(state, state->gpio_mode); if (mxl_fail(ret)) goto fail; ret = get_chip_info(state); if (mxl_fail(ret)) goto fail; adap->fe[fe_id] = dvb_attach(lg2160_attach, (MXL111SF_V8_200 == state->chip_rev) ? &hauppauge_lg2161_1040_ep6_config : &hauppauge_lg2161_1019_ep6_config, &d->i2c_adap); if (adap->fe[fe_id]) { state->num_frontends++; adap_state->fe_init = adap->fe[fe_id]->ops.init; adap->fe[fe_id]->ops.init = mxl111sf_adap_fe_init; adap_state->fe_sleep = adap->fe[fe_id]->ops.sleep; adap->fe[fe_id]->ops.sleep = mxl111sf_adap_fe_sleep; return 0; } ret = -EIO; fail: return ret; }
static int mxl111sf_init(struct dvb_usb_device *d) { struct mxl111sf_state *state = d_to_priv(d); int ret; static u8 eeprom[256]; u8 reg = 0; struct i2c_msg msg[2] = { { .addr = 0xa0 >> 1, .len = 1, .buf = ® }, { .addr = 0xa0 >> 1, .flags = I2C_M_RD, .len = sizeof(eeprom), .buf = eeprom }, }; mutex_init(&state->msg_lock); ret = get_chip_info(state); if (mxl_fail(ret)) pr_err("failed to get chip info during probe"); mutex_init(&state->fe_lock); if (state->chip_rev > MXL111SF_V6) mxl111sf_config_pin_mux_modes(state, PIN_MUX_TS_SPI_IN_MODE_1); ret = i2c_transfer(&d->i2c_adap, msg, 2); if (mxl_fail(ret)) return 0; tveeprom_hauppauge_analog(&state->tv, (0x84 == eeprom[0xa0]) ? eeprom + 0xa0 : eeprom + 0x80); #if 0 switch (state->tv.model) {