static NDIS_STATUS rtmp_ee_flash_init(PRTMP_ADAPTER pAd, PUCHAR start) { init_flag = 1; nv_ee_start = start; if (validFlashEepromID(pAd) == FALSE) { if (rtmp_ee_flash_reset(pAd, start) != NDIS_STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_ERROR, ("rtmp_ee_init(): rtmp_ee_flash_init() failed\n")); return NDIS_STATUS_FAILURE; } /* Random number for the last bytes of MAC address*/ { USHORT Addr45; rtmp_ee_flash_read(pAd, 0x08, &Addr45); Addr45 = Addr45 & 0xff; Addr45 = Addr45 | (RandomByte(pAd)&0xf8) << 8; rtmp_ee_flash_write(pAd, 0x08, Addr45); DBGPRINT(RT_DEBUG_ERROR, ("The EEPROM in Flash is wrong, use default\n")); } if (validFlashEepromID(pAd) == FALSE) { DBGPRINT(RT_DEBUG_ERROR, ("rtmp_ee_flash_init(): invalid eeprom\n")); return NDIS_STATUS_FAILURE; } } return NDIS_STATUS_SUCCESS; }
static BOOLEAN validFlashEepromID(RTMP_ADAPTER *pAd) { USHORT eeFlashId; int listIdx; rtmp_ee_flash_read(pAd, 0, &eeFlashId); for(listIdx =0 ; listIdx < EE_FLASH_ID_NUM; listIdx++) { if (eeFlashId == EE_FLASH_ID_LIST[listIdx]) return TRUE; } return FALSE; }
static void mt7628_switch_channel(RTMP_ADAPTER *pAd, UCHAR channel, BOOLEAN scan) { #ifdef RTMP_FLASH_SUPPORT USHORT doCal1 = 0, doReload = 0; #endif /*RTMP_FLASH_SUPPORT*/ if (pAd->CommonCfg.BBPCurrentBW == BW_20) CmdChannelSwitch(pAd, channel, channel, BW_20, pAd->CommonCfg.TxStream, pAd->CommonCfg.RxStream, scan); else CmdChannelSwitch(pAd, pAd->CommonCfg.Channel, channel, pAd->CommonCfg.BBPCurrentBW, pAd->CommonCfg.TxStream, pAd->CommonCfg.RxStream, scan); CmdSetTxPowerCtrl(pAd, channel); /* Channel latch */ pAd->LatchRfRegs.Channel = channel; #ifdef RTMP_FLASH_SUPPORT rtmp_ee_flash_read(pAd, 0x9F, &doCal1); doReload = (doCal1 & (0x1 << 7)) >> 7; if (scan == FALSE) { MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_ERROR, ("reload DPD from flash , 0x9F = [%04x] doReload bit7[%x]\n", doCal1, doReload)); /* reload DPD cal data from flash , follow primary channel -by CSD */ CmdLoadDPDDataFromFlash(pAd, pAd->CommonCfg.Channel, doReload); } #endif /* RTMP_FLASH_SUPPORT */ MTWF_LOG(DBG_CAT_ALL, DBG_CAT_HW, DBG_LVL_TRACE, ("%s(): Switch to Ch#%d(%dT%dR), BBP_BW=%d\n", __FUNCTION__, channel, pAd->CommonCfg.TxStream, pAd->CommonCfg.RxStream, pAd->CommonCfg.BBPCurrentBW)); }
/* 2 -- Change ee settings */ int Set_EECMD_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg) { USHORT i; i = simple_strtol(arg, 0, 10); switch(i) { case 0: { USHORT value, k; for (k = 0; k < EEPROM_SIZE; k+=2) { RT28xx_EEPROM_READ16(pAd, k, value); DBGPRINT(RT_DEBUG_OFF, ("%4.4x ", value)); if (((k+2) % 0x20) == 0) DBGPRINT(RT_DEBUG_OFF,("\n")); } } break; case 1: if (pAd->infType == RTMP_DEV_INF_RBUS) { DBGPRINT(RT_DEBUG_OFF, ("EEPROM reset to default......\n")); DBGPRINT(RT_DEBUG_OFF, ("The last byte of MAC address will be re-generated...\n")); if (rtmp_ee_flash_reset(pAd, nv_ee_start) != NDIS_STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_ERROR, ("Set_EECMD_Proc: rtmp_ee_flash_reset() failed\n")); return FALSE; } /* Random number for the last bytes of MAC address*/ { USHORT Addr45; rtmp_ee_flash_read(pAd, 0x08, &Addr45); Addr45 = Addr45 & 0xff; Addr45 = Addr45 | (RandomByte(pAd)&0xf8) << 8; DBGPRINT(RT_DEBUG_OFF, ("Addr45 = %4x\n", Addr45)); rtmp_ee_flash_write(pAd, 0x08, Addr45); } if ((rtmp_ee_flash_read(pAd, 0, &i) != 0x2880) && (rtmp_ee_flash_read(pAd, 0, &i) != 0x2860)) { DBGPRINT(RT_DEBUG_ERROR, ("Set_EECMD_Proc: invalid eeprom\n")); return FALSE; } } break; case 2: { USHORT offset, value = 0; PUCHAR p; p = arg+2; offset = simple_strtol(p, 0, 10); p+=2; while (*p != '\0') { if (*p >= '0' && *p <= '9') value = (value << 4) + (*p - 0x30); else if (*p >= 'a' && *p <= 'f') value = (value << 4) + (*p - 0x57); else if (*p >= 'A' && *p <= 'F') value = (value << 4) + (*p - 0x37); p++; } RT28xx_EEPROM_WRITE16(pAd, offset, value); } break; default: break; } return TRUE; }