void loaduvm(Pml4e *pgmap, char *addr, uchar *data, ulong sz) { Pte *pte; ulong i; usize n; char *pg; checkalign(addr, 4096, "loaduvm - addr not page aligned"); for (i = 0; i < sz; i+= PGSIZE) { pte = walkpgmap(pgmap, addr+i, 0); if (pte == nil) panic("loaduvm - addr not mapped"); pg = p2v(pte_addr(*pte)); if (sz - i < PGSIZE) n = sz - i; else n = PGSIZE; memmove(pg, data + i, n); } }
static int mappages(Pml4e *pgmap, void *va, usize size, uintptr pa, int perm) { char *a, *last; Pte *pte; checkalign((void *)pa, PGSIZE, "mappages - physical addr not page aligned"); a = pgfloor(va); last = pgfloor((void *)((uintptr)va + size - 1)); for (;;) { pte = walkpgmap(pgmap, a, 1); if (pte == nil) return -1; if (*pte & PTE_P) panic("remap"); *pte = pa | perm | PTE_P; if (a == last) break; a += PGSIZE; pa += PGSIZE; } return 0; }
void operatord_tilde_setup(void) { operatord_class = class_new(gensym("operatord~"), (t_newmethod)operatord_new, 0, sizeof(t_operatord), 0, A_GIMME, 0); CLASS_MAINSIGNALIN(operatord_class, t_operatord, x_f); class_addmethod(operatord_class, (t_method)operatord_dsp, gensym("dsp"), A_CANT, 0); checkalign(); makebuzz(); }
void triangulator_tilde_setup(void) { triangulator_class = class_new(gensym("triangulator~"), (t_newmethod)triangulator_new, 0, sizeof(t_triangulator), 0, A_GIMME, 0); CLASS_MAINSIGNALIN(triangulator_class, t_triangulator, x_f); class_addmethod(triangulator_class, (t_method)triangulator_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(triangulator_class, (t_method)triangulator_ft1, gensym("ft1"), A_FLOAT, 0); checkalign(); }