示例#1
0
void
usb_freemem(usbd_bus_handle bus, usb_dma_t *p)
{
	struct usb_frag_dma *f;
	int s;

	if (p->block->fullblock) {
		DPRINTFN(1, ("usb_freemem: large free\n"));
		usb_block_freemem(p->block);
		return;
	}
	f = KERNADDR(p, 0);
	f->block = p->block;
	f->offs = p->offs;
	s = splusb();
	LIST_INSERT_HEAD(&usb_frag_freelist, f, next);
	splx(s);
	DPRINTFN(5, ("usb_freemem: frag=%p\n", f));
}
示例#2
0
void
usb_freemem(usbd_bus_handle bus, usb_dma_t *p)
{
	struct usb_frag_dma *f;

	if (p->block->fullblock) {
		DPRINTFN(1, ("usb_freemem: large free\n"));
		usb_block_freemem(p->block);
		logmemory(free_full, p, bus, (size_t)0, (size_t)0);
		return;
	}
	logmemory(free_frag, p, bus, (size_t)0, (size_t)0);
	f = KERNADDR(p, 0);
	f->block = p->block;
	f->offs = p->offs;
	crit_enter();
	LIST_INSERT_HEAD(&usb_frag_freelist, f, next);
	crit_exit();
	DPRINTFN(5, ("usb_freemem: frag=%p\n", f));
}