static void* evalload(void){ Region *r; int l; struct Tbl { uchar sig[4]; uchar len[4]; uchar rev; uchar csum; uchar oemid[6]; uchar oemtid[8]; uchar oemrev[4]; uchar cid[4]; uchar crev[4]; uchar data[]; } *t; if(FP->aux) { if(PC >= FP->end){ PC = FP->aux; FP->end = PC; } print("leaving load\n"); return nil; } if(amltag(FP->arg[0]) != 'r') return nil; r = (Region*)amlval(FP->arg[0]); t = calloc(1, r->len); acpi_read(MemSpace, (uvlong)r->va+r->off, r->len, (uvlong*)t); print("Read table: %c%c%c%c\n", t->sig[0], t->sig[1], t->sig[2], t->sig[3]); l = get32(t->len) - sizeof(struct Tbl); print("loading table %p len %d\n", t, l); FP->dot = amlroot; FP->aux = PC; FP->start = t->data; FP->end = t->data + l; PC = FP->start; return nil; }