Lines Matching defs:alloc
44 u32 c4iw_id_alloc(struct c4iw_id_table *alloc)
49 spin_lock_irqsave(&alloc->lock, flags);
51 obj = find_next_zero_bit(alloc->table, alloc->max, alloc->last);
52 if (obj >= alloc->max)
53 obj = find_first_zero_bit(alloc->table, alloc->max);
55 if (obj < alloc->max) {
56 if (alloc->flags & C4IW_ID_TABLE_F_RANDOM)
57 alloc->last += get_random_u32_below(RANDOM_SKIP);
59 alloc->last = obj + 1;
60 if (alloc->last >= alloc->max)
61 alloc->last = 0;
62 __set_bit(obj, alloc->table);
63 obj += alloc->start;
67 spin_unlock_irqrestore(&alloc->lock, flags);
71 void c4iw_id_free(struct c4iw_id_table *alloc, u32 obj)
75 obj -= alloc->start;
77 spin_lock_irqsave(&alloc->lock, flags);
78 __clear_bit(obj, alloc->table);
79 spin_unlock_irqrestore(&alloc->lock, flags);
82 int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num,
85 alloc->start = start;
86 alloc->flags = flags;
88 alloc->last = get_random_u32_below(RANDOM_SKIP);
90 alloc->last = 0;
91 alloc->max = num;
92 spin_lock_init(&alloc->lock);
93 alloc->table = bitmap_zalloc(num, GFP_KERNEL);
94 if (!alloc->table)
97 if (!(alloc->flags & C4IW_ID_TABLE_F_EMPTY))
98 bitmap_set(alloc->table, 0, reserved);
103 void c4iw_id_table_free(struct c4iw_id_table *alloc)
105 bitmap_free(alloc->table);