Lines Matching defs:id_tbl
532 static int qedi_init_id_tbl(struct qedi_portid_tbl *id_tbl, u16 size,
535 id_tbl->start = start_id;
536 id_tbl->max = size;
537 id_tbl->next = next;
538 spin_lock_init(&id_tbl->lock);
539 id_tbl->table = kcalloc(BITS_TO_LONGS(size), sizeof(long), GFP_KERNEL);
540 if (!id_tbl->table)
546 static void qedi_free_id_tbl(struct qedi_portid_tbl *id_tbl)
548 kfree(id_tbl->table);
549 id_tbl->table = NULL;
552 int qedi_alloc_id(struct qedi_portid_tbl *id_tbl, u16 id)
556 id -= id_tbl->start;
557 if (id >= id_tbl->max)
560 spin_lock(&id_tbl->lock);
561 if (!test_bit(id, id_tbl->table)) {
562 set_bit(id, id_tbl->table);
565 spin_unlock(&id_tbl->lock);
569 u16 qedi_alloc_new_id(struct qedi_portid_tbl *id_tbl)
573 spin_lock(&id_tbl->lock);
574 id = find_next_zero_bit(id_tbl->table, id_tbl->max, id_tbl->next);
575 if (id >= id_tbl->max) {
577 if (id_tbl->next != 0) {
578 id = find_first_zero_bit(id_tbl->table, id_tbl->next);
579 if (id >= id_tbl->next)
584 if (id < id_tbl->max) {
585 set_bit(id, id_tbl->table);
586 id_tbl->next = (id + 1) & (id_tbl->max - 1);
587 id += id_tbl->start;
590 spin_unlock(&id_tbl->lock);
595 void qedi_free_id(struct qedi_portid_tbl *id_tbl, u16 id)
600 id -= id_tbl->start;
601 if (id >= id_tbl->max)
604 clear_bit(id, id_tbl->table);