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 += get_random_u32_below(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()
77 spin_lock_irqsave(&alloc->lock, flags); in c4iw_id_free()
78 __clear_bit(obj, alloc->table); in c4iw_id_free()
79 spin_unlock_irqrestore(&alloc->lock, flags); in c4iw_id_free()
82 int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num, in c4iw_id_table_alloc() argument
85 alloc->start = start; in c4iw_id_table_alloc()
86 alloc->flags = flags; in c4iw_id_table_alloc()
88 alloc->last = get_random_u32_below(RANDOM_SKIP); in c4iw_id_table_alloc()
90 alloc->last = 0; in c4iw_id_table_alloc()
91 alloc->max = num; in c4iw_id_table_alloc()
92 spin_lock_init(&alloc->lock); in c4iw_id_table_alloc()
93 alloc->table = bitmap_zalloc(num, GFP_KERNEL); in c4iw_id_table_alloc()
94 if (!alloc->table) in c4iw_id_table_alloc()
97 if (!(alloc->flags & C4IW_ID_TABLE_F_EMPTY)) in c4iw_id_table_alloc()
98 bitmap_set(alloc->table, 0, reserved); in c4iw_id_table_alloc()
103 void c4iw_id_table_free(struct c4iw_id_table *alloc) in c4iw_id_table_free() argument
105 bitmap_free(alloc->table); in c4iw_id_table_free()