37 dcb = nv_ro16(bios, 0x36);
39 nv_warn(bios,
"DCB table not found\n");
43 *ver = nv_ro08(bios, dcb);
46 nv_warn(bios,
"DCB version 0x%02x unknown\n", *ver);
50 if (nv_ro32(bios, dcb + 6) == 0x4edcbdcb) {
51 *hdr = nv_ro08(bios, dcb + 1);
52 *cnt = nv_ro08(bios, dcb + 2);
53 *len = nv_ro08(bios, dcb + 3);
58 if (nv_ro32(bios, dcb + 4) == 0x4edcbdcb) {
59 u16 i2c = nv_ro16(bios, dcb + 2);
61 *cnt = (i2c - dcb) / 8;
67 if (!nv_memcmp(bios, dcb - 7,
"DEV_REC", 7)) {
68 u16 i2c = nv_ro16(bios, dcb + 2);
70 *cnt = (i2c - dcb) / 10;
92 nv_warn(bios,
"DCB contains no useful data\n");
96 nv_warn(bios,
"DCB header validation failed\n");
105 if (dcb && idx < cnt)
106 return dcb + hdr + (idx * *len);
118 while ((outp =
dcb_outp(bios, ++idx, &ver, &len))) {
119 if (nv_ro32(bios, outp) == 0x00000000)
121 if (nv_ro32(bios, outp) == 0xffffffff)
129 ret =
exec(bios, data, idx, outp);