Lines Matching refs:id_tbl

520 static int qedi_init_id_tbl(struct qedi_portid_tbl *id_tbl, u16 size,  in qedi_init_id_tbl()  argument
523 id_tbl->start = start_id; in qedi_init_id_tbl()
524 id_tbl->max = size; in qedi_init_id_tbl()
525 id_tbl->next = next; in qedi_init_id_tbl()
526 spin_lock_init(&id_tbl->lock); in qedi_init_id_tbl()
527 id_tbl->table = kcalloc(BITS_TO_LONGS(size), sizeof(long), GFP_KERNEL); in qedi_init_id_tbl()
528 if (!id_tbl->table) in qedi_init_id_tbl()
534 static void qedi_free_id_tbl(struct qedi_portid_tbl *id_tbl) in qedi_free_id_tbl() argument
536 kfree(id_tbl->table); in qedi_free_id_tbl()
537 id_tbl->table = NULL; in qedi_free_id_tbl()
540 int qedi_alloc_id(struct qedi_portid_tbl *id_tbl, u16 id) in qedi_alloc_id() argument
544 id -= id_tbl->start; in qedi_alloc_id()
545 if (id >= id_tbl->max) in qedi_alloc_id()
548 spin_lock(&id_tbl->lock); in qedi_alloc_id()
549 if (!test_bit(id, id_tbl->table)) { in qedi_alloc_id()
550 set_bit(id, id_tbl->table); in qedi_alloc_id()
553 spin_unlock(&id_tbl->lock); in qedi_alloc_id()
557 u16 qedi_alloc_new_id(struct qedi_portid_tbl *id_tbl) in qedi_alloc_new_id() argument
561 spin_lock(&id_tbl->lock); in qedi_alloc_new_id()
562 id = find_next_zero_bit(id_tbl->table, id_tbl->max, id_tbl->next); in qedi_alloc_new_id()
563 if (id >= id_tbl->max) { in qedi_alloc_new_id()
565 if (id_tbl->next != 0) { in qedi_alloc_new_id()
566 id = find_first_zero_bit(id_tbl->table, id_tbl->next); in qedi_alloc_new_id()
567 if (id >= id_tbl->next) in qedi_alloc_new_id()
572 if (id < id_tbl->max) { in qedi_alloc_new_id()
573 set_bit(id, id_tbl->table); in qedi_alloc_new_id()
574 id_tbl->next = (id + 1) & (id_tbl->max - 1); in qedi_alloc_new_id()
575 id += id_tbl->start; in qedi_alloc_new_id()
578 spin_unlock(&id_tbl->lock); in qedi_alloc_new_id()
583 void qedi_free_id(struct qedi_portid_tbl *id_tbl, u16 id) in qedi_free_id() argument
588 id -= id_tbl->start; in qedi_free_id()
589 if (id >= id_tbl->max) in qedi_free_id()
592 clear_bit(id, id_tbl->table); in qedi_free_id()