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