Lines Matching refs:id_tbl
533 static int qedi_init_id_tbl(struct qedi_portid_tbl *id_tbl, u16 size, in qedi_init_id_tbl() argument
536 id_tbl->start = start_id; in qedi_init_id_tbl()
537 id_tbl->max = size; in qedi_init_id_tbl()
538 id_tbl->next = next; in qedi_init_id_tbl()
539 spin_lock_init(&id_tbl->lock); in qedi_init_id_tbl()
540 id_tbl->table = kcalloc(BITS_TO_LONGS(size), sizeof(long), GFP_KERNEL); in qedi_init_id_tbl()
541 if (!id_tbl->table) in qedi_init_id_tbl()
547 static void qedi_free_id_tbl(struct qedi_portid_tbl *id_tbl) in qedi_free_id_tbl() argument
549 kfree(id_tbl->table); in qedi_free_id_tbl()
550 id_tbl->table = NULL; in qedi_free_id_tbl()
553 int qedi_alloc_id(struct qedi_portid_tbl *id_tbl, u16 id) in qedi_alloc_id() argument
557 id -= id_tbl->start; in qedi_alloc_id()
558 if (id >= id_tbl->max) in qedi_alloc_id()
561 spin_lock(&id_tbl->lock); in qedi_alloc_id()
562 if (!test_bit(id, id_tbl->table)) { in qedi_alloc_id()
563 set_bit(id, id_tbl->table); in qedi_alloc_id()
566 spin_unlock(&id_tbl->lock); in qedi_alloc_id()
570 u16 qedi_alloc_new_id(struct qedi_portid_tbl *id_tbl) in qedi_alloc_new_id() argument
574 spin_lock(&id_tbl->lock); in qedi_alloc_new_id()
575 id = find_next_zero_bit(id_tbl->table, id_tbl->max, id_tbl->next); in qedi_alloc_new_id()
576 if (id >= id_tbl->max) { in qedi_alloc_new_id()
578 if (id_tbl->next != 0) { in qedi_alloc_new_id()
579 id = find_first_zero_bit(id_tbl->table, id_tbl->next); in qedi_alloc_new_id()
580 if (id >= id_tbl->next) in qedi_alloc_new_id()
585 if (id < id_tbl->max) { in qedi_alloc_new_id()
586 set_bit(id, id_tbl->table); in qedi_alloc_new_id()
587 id_tbl->next = (id + 1) & (id_tbl->max - 1); in qedi_alloc_new_id()
588 id += id_tbl->start; in qedi_alloc_new_id()
591 spin_unlock(&id_tbl->lock); in qedi_alloc_new_id()
596 void qedi_free_id(struct qedi_portid_tbl *id_tbl, u16 id) in qedi_free_id() argument
601 id -= id_tbl->start; in qedi_free_id()
602 if (id >= id_tbl->max) in qedi_free_id()
605 clear_bit(id, id_tbl->table); in qedi_free_id()