Lines Matching refs:alloc
49 u32 c4iw_id_alloc(struct c4iw_id_table *alloc) in c4iw_id_alloc() argument
54 spin_lock_irqsave(&alloc->lock, flags); in c4iw_id_alloc()
56 obj = find_next_zero_bit(alloc->table, alloc->max, alloc->last); in c4iw_id_alloc()
57 if (obj >= alloc->max) in c4iw_id_alloc()
58 obj = find_first_zero_bit(alloc->table, alloc->max); in c4iw_id_alloc()
60 if (obj < alloc->max) { in c4iw_id_alloc()
61 if (alloc->flags & C4IW_ID_TABLE_F_RANDOM) in c4iw_id_alloc()
62 alloc->last += arc4random() % RANDOM_SKIP; in c4iw_id_alloc()
64 alloc->last = obj + 1; in c4iw_id_alloc()
65 if (alloc->last >= alloc->max) in c4iw_id_alloc()
66 alloc->last = 0; in c4iw_id_alloc()
67 set_bit(obj, alloc->table); in c4iw_id_alloc()
68 obj += alloc->start; in c4iw_id_alloc()
72 spin_unlock_irqrestore(&alloc->lock, flags); in c4iw_id_alloc()
76 void c4iw_id_free(struct c4iw_id_table *alloc, u32 obj) in c4iw_id_free() argument
80 obj -= alloc->start; in c4iw_id_free()
83 spin_lock_irqsave(&alloc->lock, flags); in c4iw_id_free()
84 clear_bit(obj, alloc->table); in c4iw_id_free()
85 spin_unlock_irqrestore(&alloc->lock, flags); in c4iw_id_free()
88 int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num, in c4iw_id_table_alloc() argument
93 alloc->start = start; in c4iw_id_table_alloc()
94 alloc->flags = flags; in c4iw_id_table_alloc()
96 alloc->last = arc4random() % RANDOM_SKIP; in c4iw_id_table_alloc()
98 alloc->last = 0; in c4iw_id_table_alloc()
99 alloc->max = num; in c4iw_id_table_alloc()
100 spin_lock_init(&alloc->lock); in c4iw_id_table_alloc()
101 alloc->table = kmalloc(BITS_TO_LONGS(num) * sizeof(long), in c4iw_id_table_alloc()
103 if (!alloc->table) in c4iw_id_table_alloc()
106 bitmap_zero(alloc->table, num); in c4iw_id_table_alloc()
107 if (!(alloc->flags & C4IW_ID_TABLE_F_EMPTY)) in c4iw_id_table_alloc()
109 set_bit(i, alloc->table); in c4iw_id_table_alloc()
114 void c4iw_id_table_free(struct c4iw_id_table *alloc) in c4iw_id_table_free() argument
116 kfree(alloc->table); in c4iw_id_table_free()