Lines Matching refs:nvp

87 static enum nvram_parser_state brcmf_nvram_handle_idle(struct nvram_parser *nvp)  in brcmf_nvram_handle_idle()  argument
91 c = nvp->data[nvp->pos]; in brcmf_nvram_handle_idle()
99 nvp->entry = nvp->pos; in brcmf_nvram_handle_idle()
103 nvp->line, nvp->column); in brcmf_nvram_handle_idle()
105 nvp->column++; in brcmf_nvram_handle_idle()
106 nvp->pos++; in brcmf_nvram_handle_idle()
110 static enum nvram_parser_state brcmf_nvram_handle_key(struct nvram_parser *nvp) in brcmf_nvram_handle_key() argument
112 enum nvram_parser_state st = nvp->state; in brcmf_nvram_handle_key()
115 c = nvp->data[nvp->pos]; in brcmf_nvram_handle_key()
118 if (strncmp(&nvp->data[nvp->entry], "RAW1", 4) == 0) in brcmf_nvram_handle_key()
122 if (strncmp(&nvp->data[nvp->entry], "devpath", 7) == 0) in brcmf_nvram_handle_key()
123 nvp->multi_dev_v1 = true; in brcmf_nvram_handle_key()
124 if (strncmp(&nvp->data[nvp->entry], "pcie/", 5) == 0) in brcmf_nvram_handle_key()
125 nvp->multi_dev_v2 = true; in brcmf_nvram_handle_key()
126 if (strncmp(&nvp->data[nvp->entry], "boardrev", 8) == 0) in brcmf_nvram_handle_key()
127 nvp->boardrev_found = true; in brcmf_nvram_handle_key()
129 if (nvp->strip_mac && in brcmf_nvram_handle_key()
130 strncmp(&nvp->data[nvp->entry], "macaddr", 7) == 0) in brcmf_nvram_handle_key()
134 nvp->line, nvp->column); in brcmf_nvram_handle_key()
138 nvp->column++; in brcmf_nvram_handle_key()
139 nvp->pos++; in brcmf_nvram_handle_key()
144 brcmf_nvram_handle_value(struct nvram_parser *nvp) in brcmf_nvram_handle_value() argument
151 c = nvp->data[nvp->pos]; in brcmf_nvram_handle_value()
154 ekv = (u8 *)&nvp->data[nvp->pos]; in brcmf_nvram_handle_value()
155 skv = (u8 *)&nvp->data[nvp->entry]; in brcmf_nvram_handle_value()
157 if (nvp->nvram_len + cplen + 1 >= BRCMF_FW_MAX_NVRAM_SIZE) in brcmf_nvram_handle_value()
160 memcpy(&nvp->nvram[nvp->nvram_len], skv, cplen); in brcmf_nvram_handle_value()
161 nvp->nvram_len += cplen; in brcmf_nvram_handle_value()
162 nvp->nvram[nvp->nvram_len] = '\0'; in brcmf_nvram_handle_value()
163 nvp->nvram_len++; in brcmf_nvram_handle_value()
166 nvp->pos++; in brcmf_nvram_handle_value()
167 nvp->column++; in brcmf_nvram_handle_value()
172 brcmf_nvram_handle_comment(struct nvram_parser *nvp) in brcmf_nvram_handle_comment() argument
176 sol = (char *)&nvp->data[nvp->pos]; in brcmf_nvram_handle_comment()
185 nvp->line++; in brcmf_nvram_handle_comment()
186 nvp->column = 1; in brcmf_nvram_handle_comment()
187 nvp->pos += (eoc - sol) + 1; in brcmf_nvram_handle_comment()
191 static enum nvram_parser_state brcmf_nvram_handle_end(struct nvram_parser *nvp) in brcmf_nvram_handle_end() argument
198 (*nv_parser_states[])(struct nvram_parser *nvp) = {
206 static int brcmf_init_nvram_parser(struct nvram_parser *nvp, in brcmf_init_nvram_parser() argument
211 memset(nvp, 0, sizeof(*nvp)); in brcmf_init_nvram_parser()
212 nvp->data = data; in brcmf_init_nvram_parser()
223 nvp->nvram = kzalloc(size, GFP_KERNEL); in brcmf_init_nvram_parser()
224 if (!nvp->nvram) in brcmf_init_nvram_parser()
227 nvp->line = 1; in brcmf_init_nvram_parser()
228 nvp->column = 1; in brcmf_init_nvram_parser()
237 static void brcmf_fw_strip_multi_v1(struct nvram_parser *nvp, u16 domain_nr, in brcmf_fw_strip_multi_v1() argument
251 nvram = kzalloc(nvp->nvram_len + 1 + 3 + sizeof(u32), GFP_KERNEL); in brcmf_fw_strip_multi_v1()
256 if (nvp->nvram_len < BRCMF_FW_NVRAM_DEVPATH_LEN + 6) in brcmf_fw_strip_multi_v1()
270 while (i < nvp->nvram_len - BRCMF_FW_NVRAM_DEVPATH_LEN) { in brcmf_fw_strip_multi_v1()
274 if (strncmp(&nvp->nvram[i], "devpath", 7) == 0 && in brcmf_fw_strip_multi_v1()
275 (!strncmp(&nvp->nvram[i + 8], pci_path, pci_len) || in brcmf_fw_strip_multi_v1()
276 !strncmp(&nvp->nvram[i + 8], pcie_path, pcie_len))) { in brcmf_fw_strip_multi_v1()
277 id = nvp->nvram[i + 7] - '0'; in brcmf_fw_strip_multi_v1()
281 while (nvp->nvram[i] != 0) in brcmf_fw_strip_multi_v1()
291 while (i < nvp->nvram_len) { in brcmf_fw_strip_multi_v1()
292 if ((nvp->nvram[i] - '0' == id) && (nvp->nvram[i + 1] == ':')) { in brcmf_fw_strip_multi_v1()
294 if (strncmp(&nvp->nvram[i], "boardrev", 8) == 0) in brcmf_fw_strip_multi_v1()
295 nvp->boardrev_found = true; in brcmf_fw_strip_multi_v1()
296 while (nvp->nvram[i] != 0) { in brcmf_fw_strip_multi_v1()
297 nvram[j] = nvp->nvram[i]; in brcmf_fw_strip_multi_v1()
304 while (nvp->nvram[i] != 0) in brcmf_fw_strip_multi_v1()
308 kfree(nvp->nvram); in brcmf_fw_strip_multi_v1()
309 nvp->nvram = nvram; in brcmf_fw_strip_multi_v1()
310 nvp->nvram_len = j; in brcmf_fw_strip_multi_v1()
315 nvp->nvram_len = 0; in brcmf_fw_strip_multi_v1()
324 static void brcmf_fw_strip_multi_v2(struct nvram_parser *nvp, u16 domain_nr, in brcmf_fw_strip_multi_v2() argument
332 nvram = kzalloc(nvp->nvram_len + 1 + 3 + sizeof(u32), GFP_KERNEL); in brcmf_fw_strip_multi_v2()
334 nvp->nvram_len = 0; in brcmf_fw_strip_multi_v2()
346 while (i < nvp->nvram_len - len) { in brcmf_fw_strip_multi_v2()
347 if (strncmp(&nvp->nvram[i], prefix, len) == 0) { in brcmf_fw_strip_multi_v2()
349 if (strncmp(&nvp->nvram[i], "boardrev", 8) == 0) in brcmf_fw_strip_multi_v2()
350 nvp->boardrev_found = true; in brcmf_fw_strip_multi_v2()
351 while (nvp->nvram[i] != 0) { in brcmf_fw_strip_multi_v2()
352 nvram[j] = nvp->nvram[i]; in brcmf_fw_strip_multi_v2()
359 while (nvp->nvram[i] != 0) in brcmf_fw_strip_multi_v2()
363 kfree(nvp->nvram); in brcmf_fw_strip_multi_v2()
364 nvp->nvram = nvram; in brcmf_fw_strip_multi_v2()
365 nvp->nvram_len = j; in brcmf_fw_strip_multi_v2()
368 static void brcmf_fw_add_defaults(struct nvram_parser *nvp) in brcmf_fw_add_defaults() argument
370 if (nvp->boardrev_found) in brcmf_fw_add_defaults()
373 memcpy(&nvp->nvram[nvp->nvram_len], &BRCMF_FW_DEFAULT_BOARDREV, in brcmf_fw_add_defaults()
375 nvp->nvram_len += strlen(BRCMF_FW_DEFAULT_BOARDREV); in brcmf_fw_add_defaults()
376 nvp->nvram[nvp->nvram_len] = '\0'; in brcmf_fw_add_defaults()
377 nvp->nvram_len++; in brcmf_fw_add_defaults()
380 static void brcmf_fw_add_macaddr(struct nvram_parser *nvp, u8 *mac) in brcmf_fw_add_macaddr() argument
384 len = scnprintf(&nvp->nvram[nvp->nvram_len], BRCMF_FW_MACADDR_LEN + 1, in brcmf_fw_add_macaddr()
387 nvp->nvram_len += len + 1; in brcmf_fw_add_macaddr()
399 struct nvram_parser nvp; in brcmf_fw_nvram_strip() local
405 if (brcmf_init_nvram_parser(&nvp, data, data_len) < 0) in brcmf_fw_nvram_strip()
409 nvp.strip_mac = true; in brcmf_fw_nvram_strip()
411 while (nvp.pos < data_len) { in brcmf_fw_nvram_strip()
412 nvp.state = nv_parser_states[nvp.state](&nvp); in brcmf_fw_nvram_strip()
413 if (nvp.state == END) in brcmf_fw_nvram_strip()
416 if (nvp.multi_dev_v1) { in brcmf_fw_nvram_strip()
417 nvp.boardrev_found = false; in brcmf_fw_nvram_strip()
418 brcmf_fw_strip_multi_v1(&nvp, domain_nr, bus_nr); in brcmf_fw_nvram_strip()
419 } else if (nvp.multi_dev_v2) { in brcmf_fw_nvram_strip()
420 nvp.boardrev_found = false; in brcmf_fw_nvram_strip()
421 brcmf_fw_strip_multi_v2(&nvp, domain_nr, bus_nr); in brcmf_fw_nvram_strip()
424 if (nvp.nvram_len == 0) { in brcmf_fw_nvram_strip()
425 kfree(nvp.nvram); in brcmf_fw_nvram_strip()
429 brcmf_fw_add_defaults(&nvp); in brcmf_fw_nvram_strip()
431 if (nvp.strip_mac) in brcmf_fw_nvram_strip()
432 brcmf_fw_add_macaddr(&nvp, mac); in brcmf_fw_nvram_strip()
434 pad = nvp.nvram_len; in brcmf_fw_nvram_strip()
435 *new_length = roundup(nvp.nvram_len + 1, 4); in brcmf_fw_nvram_strip()
437 nvp.nvram[pad] = 0; in brcmf_fw_nvram_strip()
445 memcpy(&nvp.nvram[*new_length], &token_le, sizeof(token_le)); in brcmf_fw_nvram_strip()
448 return nvp.nvram; in brcmf_fw_nvram_strip()