int CfgFileSetMib(struct net_device *dev, char *buf) { #ifdef NETDEV_NO_PRIV RTL_PRIV *priv = ((RTL_PRIV *)netdev_priv(dev))->wlan_priv; #else RTL_PRIV *priv = dev->priv; #endif unsigned char *line_head, *next_head; unsigned char *cmd_buf, *mibstr, *valstr, *mibstart; //struct mib_cfg_func *tmp_mibcfg; int ret = 0; #ifdef VENDOR_PARAM_COMPATIBLE int arg_num = sizeof(RTL_SUPPORT_MIBCFG)/sizeof(struct mib_cfg_func); #endif //VENDOR_PARAM_COMPATIBLE if((cmd_buf = (unsigned char *)kmalloc(MAX_PARAM_BUF_SIZE, GFP_ATOMIC)) == NULL) { printk("%s(%d): not enough memory\n", __FUNCTION__, __LINE__); return -1; } if((mibstr = (unsigned char *)kmalloc(20, GFP_ATOMIC)) == NULL) { printk("%s(%d): not enough memory\n", __FUNCTION__, __LINE__); return -1; } if((valstr = (unsigned char *)kmalloc(MAX_PARAM_BUF_SIZE, GFP_ATOMIC)) == NULL) { printk("%s(%d): not enough memory\n", __FUNCTION__, __LINE__); return -1; } next_head = buf; do { char *loc; int len = 0, miblen = 0, vallen = 0; //int i=0; memset(cmd_buf, 0, MAX_PARAM_BUF_SIZE); memset(mibstr, 0, 20); memset(valstr, 0, MAX_PARAM_BUF_SIZE); line_head = next_head; next_head = get_line(&line_head); if (line_head == NULL) break; if (line_head[0] == '#') continue; len = rewrite_line(&cmd_buf, &line_head); //printk("%s (%d)\n", cmd_buf, len); #ifdef VENDOR_PARAM_COMPATIBLE /* To compatible with other vendor's parameters, each parameter must have its own process function - chris*/ loc = strchr(mibstart, '='); miblen = (u32)loc - (u32)mibstart; vallen = len - miblen -1; if (vallen>0) { for (i=0; i<arg_num; i++) { if (strcmp(mibstr, RTL_SUPPORT_MIBCFG[i].name) == 0) { if(!RTL_SUPPORT_MIBCFG[i].set_proc(priv, valstr)) { printk("CFGFILE set %s failed \n", mibstr); return -1; } break; } } } #else //printk(">>>>>>>> cmd=%s , %s, %c \n",cmd_buf, dev->name, cmd_buf[strlen(dev->name)]); if (!strncmp(dev->name, cmd_buf, strlen(dev->name))&&(cmd_buf[strlen(dev->name)]!='-')) { mibstart = cmd_buf + strlen(dev->name)+1; } else continue; loc = strchr(mibstart, '='); miblen = (u32)loc - (u32)mibstart; vallen = len - (strlen(dev->name)+1) - (miblen+1); if (vallen>0) { ret = set_mib(priv, mibstart); if (ret < 0) { strncpy(mibstr, mibstart, miblen); strncpy(valstr, (char*)((u32)loc+1), vallen); //printk("(%s) = (%s) (%d)\n", mibstr, valstr, vallen); printk("CFGFILE set_mib \"%s\" failed \n", mibstart); //return -1; } #endif // VENDOR_PARAM_COMPATIBLE } } while (1); kfree(cmd_buf); kfree(mibstr); kfree(valstr); return ret; }
void clear_text_area() { rewrite_line(2); rewrite_line(1); }