Lines Matching refs:tag

65 	struct proto_tag *tag;  in proto_busdma_tag_create()  local
68 if (ioc->u.tag.bndry != 0 && in proto_busdma_tag_create()
69 (ioc->u.tag.bndry & (ioc->u.tag.bndry - 1)) != 0) in proto_busdma_tag_create()
77 if (ioc->u.tag.maxsegsz > ioc->u.tag.maxsz || ioc->u.tag.nsegs == 1) in proto_busdma_tag_create()
78 ioc->u.tag.maxsegsz = ioc->u.tag.maxsz; in proto_busdma_tag_create()
80 tag = malloc(sizeof(*tag), M_PROTO_BUSDMA, M_WAITOK | M_ZERO); in proto_busdma_tag_create()
82 tag->parent = parent; in proto_busdma_tag_create()
83 LIST_INSERT_HEAD(&parent->children, tag, peers); in proto_busdma_tag_create()
84 tag->align = MAX(ioc->u.tag.align, parent->align); in proto_busdma_tag_create()
85 tag->bndry = BNDRY_MIN(ioc->u.tag.bndry, parent->bndry); in proto_busdma_tag_create()
86 tag->maxaddr = MIN(ioc->u.tag.maxaddr, parent->maxaddr); in proto_busdma_tag_create()
87 tag->maxsz = MIN(ioc->u.tag.maxsz, parent->maxsz); in proto_busdma_tag_create()
88 tag->maxsegsz = MIN(ioc->u.tag.maxsegsz, parent->maxsegsz); in proto_busdma_tag_create()
89 tag->nsegs = MIN(ioc->u.tag.nsegs, parent->nsegs); in proto_busdma_tag_create()
90 tag->datarate = MIN(ioc->u.tag.datarate, parent->datarate); in proto_busdma_tag_create()
92 ioc->u.tag.align = tag->align; in proto_busdma_tag_create()
93 ioc->u.tag.bndry = tag->bndry; in proto_busdma_tag_create()
94 ioc->u.tag.maxaddr = tag->maxaddr; in proto_busdma_tag_create()
95 ioc->u.tag.maxsz = tag->maxsz; in proto_busdma_tag_create()
96 ioc->u.tag.maxsegsz = tag->maxsegsz; in proto_busdma_tag_create()
97 ioc->u.tag.nsegs = tag->nsegs; in proto_busdma_tag_create()
98 ioc->u.tag.datarate = tag->datarate; in proto_busdma_tag_create()
100 tag->align = ioc->u.tag.align; in proto_busdma_tag_create()
101 tag->bndry = ioc->u.tag.bndry; in proto_busdma_tag_create()
102 tag->maxaddr = ioc->u.tag.maxaddr; in proto_busdma_tag_create()
103 tag->maxsz = ioc->u.tag.maxsz; in proto_busdma_tag_create()
104 tag->maxsegsz = ioc->u.tag.maxsegsz; in proto_busdma_tag_create()
105 tag->nsegs = ioc->u.tag.nsegs; in proto_busdma_tag_create()
106 tag->datarate = ioc->u.tag.datarate; in proto_busdma_tag_create()
108 LIST_INSERT_HEAD(&busdma->tags, tag, tags); in proto_busdma_tag_create()
109 ioc->result = (uintptr_t)(void *)tag; in proto_busdma_tag_create()
114 proto_busdma_tag_destroy(struct proto_busdma *busdma, struct proto_tag *tag) in proto_busdma_tag_destroy() argument
117 if (!LIST_EMPTY(&tag->mds)) in proto_busdma_tag_destroy()
119 if (!LIST_EMPTY(&tag->children)) in proto_busdma_tag_destroy()
122 if (tag->parent != NULL) { in proto_busdma_tag_destroy()
123 LIST_REMOVE(tag, peers); in proto_busdma_tag_destroy()
124 tag->parent = NULL; in proto_busdma_tag_destroy()
126 LIST_REMOVE(tag, tags); in proto_busdma_tag_destroy()
127 free(tag, M_PROTO_BUSDMA); in proto_busdma_tag_destroy()
134 struct proto_tag *tag; in proto_busdma_tag_lookup() local
136 LIST_FOREACH(tag, &busdma->tags, tags) { in proto_busdma_tag_lookup()
137 if ((void *)tag == (void *)key) in proto_busdma_tag_lookup()
138 return (tag); in proto_busdma_tag_lookup()
172 proto_busdma_mem_alloc(struct proto_busdma *busdma, struct proto_tag *tag, in proto_busdma_mem_alloc() argument
180 md->tag = tag; in proto_busdma_mem_alloc()
182 error = bus_dma_tag_create(busdma->bd_roottag, tag->align, tag->bndry, in proto_busdma_mem_alloc()
183 tag->maxaddr, BUS_SPACE_MAXADDR, NULL, NULL, tag->maxsz, in proto_busdma_mem_alloc()
184 tag->nsegs, tag->maxsegsz, 0, NULL, NULL, &md->bd_tag); in proto_busdma_mem_alloc()
200 tag->maxsz, proto_busdma_mem_alloc_callback, &pcb, BUS_DMA_NOWAIT); in proto_busdma_mem_alloc()
207 LIST_INSERT_HEAD(&tag->mds, md, peers); in proto_busdma_mem_alloc()
210 ioc->u.md.virt_size = tag->maxsz; in proto_busdma_mem_alloc()
227 proto_busdma_md_create(struct proto_busdma *busdma, struct proto_tag *tag, in proto_busdma_md_create() argument
234 md->tag = tag; in proto_busdma_md_create()
236 error = bus_dma_tag_create(busdma->bd_roottag, tag->align, tag->bndry, in proto_busdma_md_create()
237 tag->maxaddr, BUS_SPACE_MAXADDR, NULL, NULL, tag->maxsz, in proto_busdma_md_create()
238 tag->nsegs, tag->maxsegsz, 0, NULL, NULL, &md->bd_tag); in proto_busdma_md_create()
250 LIST_INSERT_HEAD(&tag->mds, md, peers); in proto_busdma_md_create()
374 struct proto_tag *tag, *tag1; in proto_busdma_cleanup() local
379 LIST_FOREACH_SAFE(tag, &busdma->tags, tags, tag1) in proto_busdma_cleanup()
380 proto_busdma_tag_destroy(busdma, tag); in proto_busdma_cleanup()
389 struct proto_tag *tag; in proto_busdma_ioctl() local
402 tag = proto_busdma_tag_lookup(busdma, ioc->key); in proto_busdma_ioctl()
403 if (tag == NULL) { in proto_busdma_ioctl()
407 error = proto_busdma_tag_create(busdma, tag, ioc); in proto_busdma_ioctl()
410 tag = proto_busdma_tag_lookup(busdma, ioc->key); in proto_busdma_ioctl()
411 if (tag == NULL) { in proto_busdma_ioctl()
415 error = proto_busdma_tag_destroy(busdma, tag); in proto_busdma_ioctl()
418 tag = proto_busdma_tag_lookup(busdma, ioc->u.md.tag); in proto_busdma_ioctl()
419 if (tag == NULL) { in proto_busdma_ioctl()
423 error = proto_busdma_mem_alloc(busdma, tag, ioc); in proto_busdma_ioctl()
434 tag = proto_busdma_tag_lookup(busdma, ioc->u.md.tag); in proto_busdma_ioctl()
435 if (tag == NULL) { in proto_busdma_ioctl()
439 error = proto_busdma_md_create(busdma, tag, ioc); in proto_busdma_ioctl()
494 physaddr <= trunc_page(md->physaddr + md->tag->maxsz)) { in proto_busdma_mmap_allowed()