📄 cfg_utility.c
字号:
}
printf("%s (0xXXXXXXXXXXXX): 0x", msg);
gets(str_mac, 13, 0);
if(*str_mac == '\0')
{
if(!user)
return ERROR;
for(i = 0; i < 6; i++)
{
mac[i] = curr_mac[i];
}
}
else
{
for(i = 0; i < 12; i++)
{
if(!_is_hex(str_mac[i]))
{
printf("Mac addrs should be a hex number\n");
return ERROR;
}
}
mac_vid = from_hex(str_mac, 6);
mac[2] = mac_vid;
mac[1] = mac_vid >> 8;
mac[0] = mac_vid >> 16;
if(mac_vid != MAC_VENDOR_ID)
{
printf("Vendor ID incorrect !!!\n");
return ERROR;
}
mac_sno = from_hex(&str_mac[6], 6);
if(mac_sno > 0xfffffe)
{
printf("MAC address serial number should be less than 0xffffff !!!\n");
return ERROR;
}
mac[5] = mac_sno;
mac[4] = mac_sno >> 8;
mac[3] = mac_sno >> 16;
}
return OK;
}
int get_nxt_mac_addr(unsigned char *mac, unsigned char *nxt_mac)
{
int i;
for(i = 0; i < 5; i++)
nxt_mac[i] = mac[i];
nxt_mac[5] = mac[5] + 1;
if(nxt_mac[5] < mac[5])
{
nxt_mac[4] += 1;
if(nxt_mac[4] < mac[4])
{
nxt_mac[3] += 1;
if(nxt_mac[3] < mac[3])
{
printf("Ran out of MAC Address\n");
return ERROR;
}
}
}
return OK;
}
void display_config_data(char *in_cfg_data, int id)
{
unsigned int temp;
unsigned char temp_array[14];
struct COMMON_CFG_CONTENT *common_data = (struct COMMON_CFG_CONTENT *)in_cfg_data;
printf("\nConfiguration DATA\n\n");
printf("Device ID : %d\n", common_data->dev_id);
memset(temp_array, '\0', 13);
memcpy(temp_array, common_data->man_id, CFG_MAN_ID_LEN);
printf("Manufacturer's ID : %s\n", temp_array);
memset(temp_array, '\0', 13);
memcpy(temp_array, common_data->model_id, CFG_MODEL_ID_LEN);
printf("Model ID : %s\n", temp_array);
memset(temp_array, '\0', 13);
memcpy(temp_array, common_data->part_num, CFG_PARTNUM_LEN);
printf("Part Number : %s\n", temp_array);
printf("Part Revision : %c%c\n", common_data->part_rev[0], common_data->part_rev[1]);
memset(temp_array, '\0', 13);
memcpy(temp_array, common_data->serial_num, CFG_SERIAL_NUM_LEN);
printf("Serial Number : %s\n", temp_array);
if(id == KI_DEV_ID)
{
struct KI_EEPROM_CONTENT *ki_data = (struct KI_EEPROM_CONTENT *)in_cfg_data;
printf("Master NPU's MAC Address : 0x%02x%02x%02x%02x%02x%02x\n",
ki_data->M_ether_mac_addr[0], ki_data->M_ether_mac_addr[1],
ki_data->M_ether_mac_addr[2], ki_data->M_ether_mac_addr[3],
ki_data->M_ether_mac_addr[4], ki_data->M_ether_mac_addr[5]);
printf("Slave NPU's MAC Address : 0x%02x%02x%02x%02x%02x%02x\n",
ki_data->S_ether_mac_addr[0], ki_data->S_ether_mac_addr[1],
ki_data->S_ether_mac_addr[2], ki_data->S_ether_mac_addr[3],
ki_data->S_ether_mac_addr[4], ki_data->S_ether_mac_addr[5]);
}
if(id == PL_DEV_ID)
{
struct PL_EEPROM_CONTENT *pl_data = (struct PL_EEPROM_CONTENT *)in_cfg_data;
printf("MAC Address for Port 0 : 0x%02x%02x%02x%02x%02x%02x\n",
pl_data->mac_addr0[0], pl_data->mac_addr0[1],
pl_data->mac_addr0[2], pl_data->mac_addr0[3],
pl_data->mac_addr0[4], pl_data->mac_addr0[5]);
printf("MAC Address for Port 1 : 0x%02x%02x%02x%02x%02x%02x\n",
pl_data->mac_addr1[0], pl_data->mac_addr1[1],
pl_data->mac_addr1[2], pl_data->mac_addr1[3],
pl_data->mac_addr1[4], pl_data->mac_addr1[5]);
printf("MAC Address for Port 2 : 0x%02x%02x%02x%02x%02x%02x\n",
pl_data->mac_addr2[0], pl_data->mac_addr2[1],
pl_data->mac_addr2[2], pl_data->mac_addr2[3],
pl_data->mac_addr2[4], pl_data->mac_addr2[5]);
printf("MAC Address for Port 3 : 0x%02x%02x%02x%02x%02x%02x\n",
pl_data->mac_addr3[0], pl_data->mac_addr3[1],
pl_data->mac_addr3[2], pl_data->mac_addr3[3],
pl_data->mac_addr3[4], pl_data->mac_addr3[5]);
}
if(id == MI_DEV_ID)
{
struct MI_EEPROM_CONTENT *mi_data = (struct MI_EEPROM_CONTENT *)in_cfg_data;
printf("Operating frequency : %d MHZ\n", mi_data->ch_freq);
}
if(id == KI_DEV_ID)
{
switch(common_data->test_status)
{
case SKU1_PASS:
printf("Test Status : SKU1_PASS\n");
break;
case SKU1_FAIL:
printf("Test Status : SKU1_FAIL\n");
break;
case SKU2_PASS:
printf("Test Status : SKU2_PASS\n");
break;
case SKU2_FAIL:
printf("Test Status : SKU2_FAIL\n");
break;
default:
printf("Test Status : Not Tested\n");
}
}
else
{
switch(common_data->test_status)
{
case PASS:
printf("Test Status : PASS\n");
break;
case FAIL:
printf("Test Status : FAIL\n");
break;
default:
printf("Test Status : Not Tested\n");
}
}
memset(temp_array, '\0', 13);
memcpy(temp_array, common_data->date, CFG_DATE_LEN);
printf("Date : %s\n", temp_array);
temp = 0;
temp = common_data->chksum[0];
temp = temp | (common_data->chksum[1] << 8);
temp = temp | (common_data->chksum[2] << 16);
temp = temp | (common_data->chksum[3] << 24);
printf("CheckSum : %x\n", temp);
}
void read_config_data(char *buf, int id)
{
int i, chksum_addr;
unsigned int checksum = 0;
unsigned int read_chksum = 0, cfg_data_sz;
unsigned char slave_addr;
switch(id)
{
case PL_DEV_ID:
slave_addr = SLAVE_ADDR_2;
cfg_data_sz = sizeof(struct PL_EEPROM_CONTENT);
break;
case BW_DEV_ID:
case BD_DEV_ID:
slave_addr = SLAVE_ADDR_2;
cfg_data_sz = sizeof(struct COMMON_CFG_CONTENT);
break;
case MI_DEV_ID:
slave_addr = SLAVE_ADDR_4;
cfg_data_sz = sizeof(struct MI_EEPROM_CONTENT);
break;
case BI_DEV_ID:
slave_addr = SLAVE_ADDR_3;
cfg_data_sz = sizeof(struct COMMON_CFG_CONTENT);
break;
case KI_DEV_ID:
slave_addr = SLAVE_ADDR_1;
cfg_data_sz = sizeof(struct KI_EEPROM_CONTENT);
break;
default:
return;
}
if(i2c_seq_read(slave_addr,0x0, buf, cfg_data_sz))
{
printf("Encountered problem in reading EPROM\n");
return;
}
/* r will be used by calculate_checksum() */
r = 55665;
chksum_addr = (PAGESZ*4) + 9;
/*calculate the checksum of the read data excluding the checksum field*/
for(i = 0; i < chksum_addr; i++)
{
checksum += calculate_chksum(buf[i]);
}
i += 4;
for(; i < cfg_data_sz; i++)
{
checksum += calculate_chksum(buf[i]);
}
/*covert the stored checksum in to integer*/
read_chksum = 0;
read_chksum = buf[chksum_addr];
read_chksum = read_chksum | (buf[(chksum_addr + 1)] << 8);
read_chksum = read_chksum | (buf[(chksum_addr + 2)] << 16);
read_chksum = read_chksum | (buf[(chksum_addr + 3)] << 24);
if(read_chksum != checksum)
{
printf("Warning - checksum error!!!\n");
printf("read checksum = %x, computed checksum = %x\n",
read_chksum,checksum);
}
}
int get_data(char *data, int user, int id)
{
unsigned char passwd[9];
char data_buf[MAX_CFG_DATA_SZ];
struct COMMON_CFG_CONTENT *common_data = (struct COMMON_CFG_CONTENT *)data;
struct COMMON_CFG_CONTENT *curr_content = (struct COMMON_CFG_CONTENT *)data_buf;
memset(data_buf, 0, MAX_CFG_DATA_SZ);
if(user)
{
printf("Enter Password: ");
passwd_input = 1;
gets(passwd, (CFG_PASSWD_LEN + 1), 0);
passwd_input = 0;
if(strcmp((char*)passwd, "ixdp2400"))
{
printf("Invalid Password!\n");
return ERROR;
}
read_config_data(data_buf, id);
}
common_data->prom_fmt = '0';
get_dev_id(&common_data->dev_id, &curr_content->dev_id, user, id);
get_man_id(common_data->man_id, curr_content->man_id, user);
get_part_rev(common_data->part_rev, curr_content->part_rev, user);
get_part_num(common_data->part_num, curr_content->part_num, user);
get_serial_num(common_data->serial_num, curr_content->serial_num, user);
get_model_id(common_data->model_id, curr_content->model_id, user, id);
if(!user)
memcpy((char *)common_data->passwd, "ixdp2400", CFG_PASSWD_LEN);
if(id == KI_DEV_ID)
{
struct KI_EEPROM_CONTENT *ki_cfg_data = (struct KI_EEPROM_CONTENT *)data;
struct KI_EEPROM_CONTENT *ki_curr_content = (struct KI_EEPROM_CONTENT *)data_buf;
if(!get_mac_addr(ki_cfg_data->M_ether_mac_addr, ki_curr_content->M_ether_mac_addr, user,
"Enter Master NPU's Ethernet MAC Address"))
return ERROR;
if(!get_nxt_mac_addr(ki_cfg_data->M_ether_mac_addr, ki_cfg_data->S_ether_mac_addr))
return ERROR;
printf("Slave NPU Ethernet MAC Addr : 0x%02x%02x%02x%02x%02x%02x\n",
ki_cfg_data->S_ether_mac_addr[0], ki_cfg_data->S_ether_mac_addr[1],
ki_cfg_data->S_ether_mac_addr[2], ki_cfg_data->S_ether_mac_addr[3],
ki_cfg_data->S_ether_mac_addr[4], ki_cfg_data->S_ether_mac_addr[5]);
}
if(id == PL_DEV_ID)
{
struct PL_EEPROM_CONTENT *pl_cfg_data = (struct PL_EEPROM_CONTENT *)data;
struct PL_EEPROM_CONTENT *pl_curr_content = (struct PL_EEPROM_CONTENT *)data_buf;
if(!get_mac_addr(pl_cfg_data->mac_addr0, pl_curr_content->mac_addr0, user,
"Enter MAC Address for Port 0"))
return ERROR;
if(!get_nxt_mac_addr(pl_cfg_data->mac_addr0, pl_cfg_data->mac_addr1))
return ERROR;
if(!get_nxt_mac_addr(pl_cfg_data->mac_addr1, pl_cfg_data->mac_addr2))
return ERROR;
if(!get_nxt_mac_addr(pl_cfg_data->mac_addr2, pl_cfg_data->mac_addr3))
return ERROR;
printf("MAC Address for Port 1 : 0x%02x%02x%02x%02x%02x%02x\n",
pl_cfg_data->mac_addr1[0], pl_cfg_data->mac_addr1[1],
pl_cfg_data->mac_addr1[2], pl_cfg_data->mac_addr1[3],
pl_cfg_data->mac_addr1[4], pl_cfg_data->mac_addr1[5]);
printf("MAC Address for Port 2 : 0x%02x%02x%02x%02x%02x%02x\n",
pl_cfg_data->mac_addr2[0], pl_cfg_data->mac_addr2[1],
pl_cfg_data->mac_addr2[2], pl_cfg_data->mac_addr2[3],
pl_cfg_data->mac_addr2[4], pl_cfg_data->mac_addr2[5]);
printf("MAC Address for Port 3 : 0x%02x%02x%02x%02x%02x%02x\n",
pl_cfg_data->mac_addr3[0], pl_cfg_data->mac_addr3[1],
pl_cfg_data->mac_addr3[2], pl_cfg_data->mac_addr3[3],
pl_cfg_data->mac_addr3[4], pl_cfg_data->mac_addr3[5]);
}
if(id == MI_DEV_ID)
{
struct MI_EEPROM_CONTENT *mi_cfg_data = (struct MI_EEPROM_CONTENT *)data;
struct MI_EEPROM_CONTENT *mi_curr_content = (struct MI_EEPROM_CONTENT *)data_buf;
get_op_freq(&(mi_cfg_data->ch_freq), &(mi_curr_content->ch_freq), user);
}
return OK;
}
static int write_config_data(char *databuf, int user, int id)
{
unsigned int checksum=0;
int i;
unsigned char slave_addr, chksum_addr;
int cfg_data_sz;
struct COMMON_CFG_CONTENT *data = (struct COMMON_CFG_CONTENT *)databuf;
switch(id)
{
case PL_DEV_ID:
slave_addr = SLAVE_ADDR_2;
cfg_data_sz = sizeof(struct PL_EEPROM_CONTENT);
break;
case BW_DEV_ID:
case BD_DEV_ID:
slave_addr = SLAVE_ADDR_2;
cfg_data_sz = sizeof(struct COMMON_CFG_CONTENT);
break;
case MI_DEV_ID:
slave_addr = SLAVE_ADDR_4;
cfg_data_sz = sizeof(struct MI_EEPROM_CONTENT);
break;
case BI_DEV_ID:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -