Lines Matching +full:rom +full:- +full:val
1 /*-
2 * SPDX-License-Identifier: BSD-4-Clause
4 * Copyright (c) 2002-2003
66 #define MAX_ROM (1024 - sizeof(uint32_t) * 5)
67 #define CROM_END(cc) ((vm_offset_t)(cc)->stack[0].dir + MAX_ROM - 1)
75 if (hdr->info_len <= 1) { in crom_init_context()
76 /* minimum or invalid ROM */ in crom_init_context()
77 cc->depth = -1; in crom_init_context()
80 p += 1 + hdr->info_len; in crom_init_context()
83 if (((struct csrdirectory *)p)->crc_len == 0) { in crom_init_context()
84 cc->depth = -1; in crom_init_context()
87 cc->depth = 0; in crom_init_context()
88 cc->stack[0].dir = (struct csrdirectory *)p; in crom_init_context()
89 cc->stack[0].index = 0; in crom_init_context()
97 ptr = &cc->stack[cc->depth]; in crom_get()
98 return (&ptr->dir->entry[ptr->index]); in crom_get()
107 if (cc->depth < 0) in crom_next()
110 if ((reg->key & CSRTYPE_MASK) == CSRTYPE_D) { in crom_next()
111 if (cc->depth >= CROM_MAX_DEPTH) { in crom_next()
115 cc->depth++; in crom_next()
117 ptr = &cc->stack[cc->depth]; in crom_next()
118 ptr->dir = (struct csrdirectory *) (reg + reg->val); in crom_next()
119 ptr->index = 0; in crom_next()
123 ptr = &cc->stack[cc->depth]; in crom_next()
124 ptr->index++; in crom_next()
126 if (ptr->index < ptr->dir->crc_len && in crom_next()
130 if (ptr->index < ptr->dir->crc_len) in crom_next()
133 if (cc->depth > 0) { in crom_next()
134 cc->depth--; in crom_next()
138 cc->depth = -1; in crom_next()
147 while (cc->depth >= 0) { in crom_search_key()
149 if (reg->key == key) in crom_search_key()
165 while (cc->depth >= 0) { in crom_has_specver()
168 if (reg->key == CSRKEY_SPEC && reg->val == spec) in crom_has_specver()
173 if (reg->key == CSRKEY_VER && reg->val == ver) in crom_has_specver()
192 if (cc->depth < 0) in crom_parse_text()
196 if (reg->key != CROM_TEXTLEAF || in crom_parse_text()
197 (vm_offset_t)(reg + reg->val) > CROM_END(cc)) { in crom_parse_text()
201 textleaf = (struct csrtext *)(reg + reg->val); in crom_parse_text()
203 if ((vm_offset_t)textleaf + textleaf->crc_len > CROM_END(cc)) { in crom_parse_text()
211 qlen = textleaf->crc_len - 2; in crom_parse_text()
215 *bp++ = ntohl(textleaf->text[i]); in crom_parse_text()
218 buf[len - 1] = 0; in crom_parse_text()
231 for (shift = 28; shift >= 0; shift -= 4) { in crom_crc()
249 s = "SBP-2"; in crom_desc_specver()
303 switch (reg->key & CSRTYPE_MASK) { in crom_desc()
306 len -= snprintf(buf, len, "%d", reg->val); in crom_desc()
313 len -= snprintf(buf, len, "offset=0x%04x(%d)", in crom_desc()
314 reg->val, reg->val); in crom_desc()
320 dir = (struct csrdirectory *)(reg + reg->val); in crom_desc()
321 crc = crom_crc((uint32_t *)&dir->entry[0], dir->crc_len); in crom_desc()
322 len -= snprintf(buf, len, "len=%d crc=0x%04x(%s) ", in crom_desc()
323 dir->crc_len, dir->crc, in crom_desc()
324 (crc == dir->crc) ? "OK" : "NG"); in crom_desc()
327 switch (reg->key) { in crom_desc()
342 crom_desc_specver(0, reg->val, buf, len); in crom_desc()
395 index = chunk->data.crc_len; in crom_add_quad()
396 if (index >= CROM_MAX_CHUNK_LEN - 1) { in crom_add_quad()
398 return (-1); in crom_add_quad()
400 chunk->data.buf[index] = entry; in crom_add_quad()
401 chunk->data.crc_len++; in crom_add_quad()
406 crom_add_entry(struct crom_chunk *chunk, int key, int val) in crom_add_entry() argument
415 foo.reg.val = val; in crom_add_entry()
426 STAILQ_INSERT_TAIL(&src->chunk_list, child, link); in crom_add_chunk()
432 return (-1); in crom_add_chunk()
434 child->ref_chunk = parent; in crom_add_chunk()
435 child->ref_index = index; in crom_add_chunk()
436 STAILQ_INSERT_TAIL(&src->chunk_list, child, link); in crom_add_chunk()
440 #define MAX_TEXT ((CROM_MAX_CHUNK_LEN + 1) * 4 - sizeof(struct csrtext))
456 tl = (struct csrtext *) &chunk->data; in crom_add_simple_text()
457 tl->crc_len = howmany(sizeof(struct csrtext) + len, sizeof(uint32_t)); in crom_add_simple_text()
458 tl->spec_id = 0; in crom_add_simple_text()
459 tl->spec_type = 0; in crom_add_simple_text()
460 tl->lang_id = 0; in crom_add_simple_text()
465 tl->text[i] = ntohl(*p++); in crom_add_simple_text()
473 printf("Config. ROM is too large for the buffer\n"); in crom_copy()
474 return (-1); in crom_copy()
495 STAILQ_FOREACH(chunk, &src->chunk_list, link) { in crom_load()
496 chunk->offset = offset; in crom_load()
498 parent = chunk->ref_chunk; in crom_load()
502 &parent->data.buf[chunk->ref_index]; in crom_load()
503 reg->val = offset - in crom_load()
504 (parent->offset + 1 + chunk->ref_index); in crom_load()
506 offset += 1 + chunk->data.crc_len; in crom_load()
510 len = 1 + src->hdr.info_len; in crom_load()
512 if (crom_copy((uint32_t *)&src->hdr, buf, &count, len, maxlen) < 0) in crom_load()
513 return (-1); in crom_load()
514 STAILQ_FOREACH(chunk, &src->chunk_list, link) { in crom_load()
515 chunk->data.crc = in crom_load()
516 crom_crc(&chunk->data.buf[0], chunk->data.crc_len); in crom_load()
518 len = 1 + chunk->data.crc_len; in crom_load()
519 if (crom_copy((uint32_t *)&chunk->data, buf, in crom_load()
521 return (-1); in crom_load()
524 hdr->crc_len = count - 1; in crom_load()
525 hdr->crc = crom_crc(&buf[1], hdr->crc_len); in crom_load()
589 crom_add_simple_text(&src, &root, &text2, "FreeBSD-5"); in main()