Пример #1
0
void *freelist_get_dma(struct freelist *list, BUS_ADDRESS *busaddr)
{
    void *result;
    HPT_ASSERT(list->dma);
    result = freelist_get(list);
    if (result)
        *busaddr = *(BUS_ADDRESS *)((void **)result+1);
    return result;
}
void freelist_to_bitarray (unsigned char *s, char const *freelist, unsigned int sp, unsigned int max)
{
  register unsigned int i = 0 ;
  bitarray_setn(s, 0, max) ;
  for (; i < sp ; i++)
  {
    register unsigned int j = freelist_get(freelist, max, i) ;
    bitarray_clear(s, j) ;
  }
}
Пример #3
0
unsigned int freelist_pop (char const *s, unsigned int *sp, unsigned int max)
{
  register unsigned int esize = freelist_size(max) ;
#ifdef DEBUG
  lolprintf("Entering freelist_pop: %u numbers of size %u, max is %u\n", *sp/esize, esize, max) ;
  buffer_flush(buffer_1) ;
#endif
  if (!*sp) return max ;
  *sp -= esize ;
  return freelist_get(s, max, *sp / esize) ;
}
Пример #4
0
static void hpt_free_mem(PVBUS_EXT vbus_ext)
{
	struct freelist *f;
	void *p;
	int i;
	BUS_ADDRESS bus;

	for (f=vbus_ext->freelist_head; f; f=f->next) {
#if DBG
		if (f->count!=f->reserved_count) {
			KdPrint(("memory leak for freelist %s (%d/%d)", f->tag, f->count, f->reserved_count));
		}
#endif
		while ((p=freelist_get(f)))
			free(p, M_DEVBUF);
	}

	for (i=0; i<os_max_cache_pages; i++) {
		p = dmapool_get_page((PVBUS)vbus_ext->vbus, &bus);
		HPT_ASSERT(p);
		free_pages(p, 0);
	}

	for (f=vbus_ext->freelist_dma_head; f; f=f->next) {
		int order, size;
#if DBG
		if (f->count!=f->reserved_count) {
			KdPrint(("memory leak for dma freelist %s (%d/%d)", f->tag, f->count, f->reserved_count));
		}
#endif
		for (order=0, size=PAGE_SIZE; size<f->size; order++, size<<=1) ;

		while ((p=freelist_get_dma(f, &bus))) {
			if (order)
				free_pages(p, order);
			else {
			/* can't free immediately since other blocks in this page may still be in the list */
				if (((HPT_UPTR)p & (PAGE_SIZE-1))==0)
					dmapool_put_page((PVBUS)vbus_ext->vbus, p, bus);
			}
		}
	}
	
	while ((p = dmapool_get_page((PVBUS)vbus_ext->vbus, &bus)))
		free_pages(p, 0);
}
Пример #5
0
static HANDLE fe_get_event()
{
    return (HANDLE)freelist_get(&event_freelist);
}