Lines Matching refs:alloc
44 u32 c4iw_id_alloc(struct c4iw_id_table *alloc) in c4iw_id_alloc() argument
49 spin_lock_irqsave(&alloc->lock, flags); in c4iw_id_alloc()
51 obj = find_next_zero_bit(alloc->table, alloc->max, alloc->last); in c4iw_id_alloc()
52 if (obj >= alloc->max) in c4iw_id_alloc()
53 obj = find_first_zero_bit(alloc->table, alloc->max); in c4iw_id_alloc()
55 if (obj < alloc->max) { in c4iw_id_alloc()
56 if (alloc->flags & C4IW_ID_TABLE_F_RANDOM) in c4iw_id_alloc()
57 alloc->last += prandom_u32() % RANDOM_SKIP; in c4iw_id_alloc()
59 alloc->last = obj + 1; in c4iw_id_alloc()
60 if (alloc->last >= alloc->max) in c4iw_id_alloc()
61 alloc->last = 0; in c4iw_id_alloc()
62 set_bit(obj, alloc->table); in c4iw_id_alloc()
63 obj += alloc->start; in c4iw_id_alloc()
67 spin_unlock_irqrestore(&alloc->lock, flags); in c4iw_id_alloc()
71 void c4iw_id_free(struct c4iw_id_table *alloc, u32 obj) in c4iw_id_free() argument
75 obj -= alloc->start; in c4iw_id_free()
78 spin_lock_irqsave(&alloc->lock, flags); in c4iw_id_free()
79 clear_bit(obj, alloc->table); in c4iw_id_free()
80 spin_unlock_irqrestore(&alloc->lock, flags); in c4iw_id_free()
83 int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num, in c4iw_id_table_alloc() argument
88 alloc->start = start; in c4iw_id_table_alloc()
89 alloc->flags = flags; in c4iw_id_table_alloc()
91 alloc->last = prandom_u32() % RANDOM_SKIP; in c4iw_id_table_alloc()
93 alloc->last = 0; in c4iw_id_table_alloc()
94 alloc->max = num; in c4iw_id_table_alloc()
95 spin_lock_init(&alloc->lock); in c4iw_id_table_alloc()
96 alloc->table = kmalloc(BITS_TO_LONGS(num) * sizeof(long), in c4iw_id_table_alloc()
98 if (!alloc->table) in c4iw_id_table_alloc()
101 bitmap_zero(alloc->table, num); in c4iw_id_table_alloc()
102 if (!(alloc->flags & C4IW_ID_TABLE_F_EMPTY)) in c4iw_id_table_alloc()
104 set_bit(i, alloc->table); in c4iw_id_table_alloc()
109 void c4iw_id_table_free(struct c4iw_id_table *alloc) in c4iw_id_table_free() argument
111 kfree(alloc->table); in c4iw_id_table_free()