Lines Matching defs:id_tbl
534 static int qedi_init_id_tbl(struct qedi_portid_tbl *id_tbl, u16 size,
537 id_tbl->start = start_id;
538 id_tbl->max = size;
539 id_tbl->next = next;
540 spin_lock_init(&id_tbl->lock);
541 id_tbl->table = kcalloc(BITS_TO_LONGS(size), sizeof(long), GFP_KERNEL);
542 if (!id_tbl->table)
548 static void qedi_free_id_tbl(struct qedi_portid_tbl *id_tbl)
550 kfree(id_tbl->table);
551 id_tbl->table = NULL;
554 int qedi_alloc_id(struct qedi_portid_tbl *id_tbl, u16 id)
558 id -= id_tbl->start;
559 if (id >= id_tbl->max)
562 spin_lock(&id_tbl->lock);
563 if (!test_bit(id, id_tbl->table)) {
564 set_bit(id, id_tbl->table);
567 spin_unlock(&id_tbl->lock);
571 u16 qedi_alloc_new_id(struct qedi_portid_tbl *id_tbl)
575 spin_lock(&id_tbl->lock);
576 id = find_next_zero_bit(id_tbl->table, id_tbl->max, id_tbl->next);
577 if (id >= id_tbl->max) {
579 if (id_tbl->next != 0) {
580 id = find_first_zero_bit(id_tbl->table, id_tbl->next);
581 if (id >= id_tbl->next)
586 if (id < id_tbl->max) {
587 set_bit(id, id_tbl->table);
588 id_tbl->next = (id + 1) & (id_tbl->max - 1);
589 id += id_tbl->start;
592 spin_unlock(&id_tbl->lock);
597 void qedi_free_id(struct qedi_portid_tbl *id_tbl, u16 id)
602 id -= id_tbl->start;
603 if (id >= id_tbl->max)
606 clear_bit(id, id_tbl->table);