static int admhc_eds_init(struct admhcd *ahcd) { struct ed *ed; ed = ed_create(ahcd, PIPE_INTERRUPT, ED_DUMMY_INFO); if (!ed) goto err; ahcd->ed_tails[PIPE_INTERRUPT] = ed; ed = ed_create(ahcd, PIPE_ISOCHRONOUS, ED_DUMMY_INFO); if (!ed) goto err; ahcd->ed_tails[PIPE_ISOCHRONOUS] = ed; ed->ed_prev = ahcd->ed_tails[PIPE_INTERRUPT]; ahcd->ed_tails[PIPE_INTERRUPT]->ed_next = ed; ahcd->ed_tails[PIPE_INTERRUPT]->hwNextED = cpu_to_hc32(ahcd, ed->dma); ed = ed_create(ahcd, PIPE_CONTROL, ED_DUMMY_INFO); if (!ed) goto err; ahcd->ed_tails[PIPE_CONTROL] = ed; ed->ed_prev = ahcd->ed_tails[PIPE_ISOCHRONOUS]; ahcd->ed_tails[PIPE_ISOCHRONOUS]->ed_next = ed; ahcd->ed_tails[PIPE_ISOCHRONOUS]->hwNextED = cpu_to_hc32(ahcd, ed->dma); ed = ed_create(ahcd, PIPE_BULK, ED_DUMMY_INFO); if (!ed) goto err; ahcd->ed_tails[PIPE_BULK] = ed; ed->ed_prev = ahcd->ed_tails[PIPE_CONTROL]; ahcd->ed_tails[PIPE_CONTROL]->ed_next = ed; ahcd->ed_tails[PIPE_CONTROL]->hwNextED = cpu_to_hc32(ahcd, ed->dma); ahcd->ed_head = ahcd->ed_tails[PIPE_INTERRUPT]; #ifdef ADMHC_VERBOSE_DEBUG admhc_dump_ed(ahcd, "ed intr", ahcd->ed_tails[PIPE_INTERRUPT], 1); admhc_dump_ed(ahcd, "ed isoc", ahcd->ed_tails[PIPE_ISOCHRONOUS], 1); admhc_dump_ed(ahcd, "ed ctrl", ahcd->ed_tails[PIPE_CONTROL], 1); admhc_dump_ed(ahcd, "ed bulk", ahcd->ed_tails[PIPE_BULK], 1); #endif return 0; err: admhc_eds_cleanup(ahcd); return -ENOMEM; }
int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(width, height); glutCreateWindow("catmull-clark"); glutReshapeFunc(reshape); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMotionFunc(motion); glutIdleFunc(idle); printf("Loading... "); fflush(stdout); ed = ed_create(); ed_add_obj(ed, "objs/cube.obj", 5); ed_add_obj(ed, "objs/tetra.obj", 5); ed_add_obj(ed, "objs/bigguy.obj", 3); ed_add_obj(ed, "objs/monsterfrog.obj", 3); printf("done.\n"); focus_camera(ed_cur_obj(ed)); glutMainLoop(); return 0; }