Lines Matching refs:id_tbl

531 static int qedi_init_id_tbl(struct qedi_portid_tbl *id_tbl, u16 size,  in qedi_init_id_tbl()  argument
534 id_tbl->start = start_id; in qedi_init_id_tbl()
535 id_tbl->max = size; in qedi_init_id_tbl()
536 id_tbl->next = next; in qedi_init_id_tbl()
537 spin_lock_init(&id_tbl->lock); in qedi_init_id_tbl()
538 id_tbl->table = kcalloc(BITS_TO_LONGS(size), sizeof(long), GFP_KERNEL); in qedi_init_id_tbl()
539 if (!id_tbl->table) in qedi_init_id_tbl()
545 static void qedi_free_id_tbl(struct qedi_portid_tbl *id_tbl) in qedi_free_id_tbl() argument
547 kfree(id_tbl->table); in qedi_free_id_tbl()
548 id_tbl->table = NULL; in qedi_free_id_tbl()
551 int qedi_alloc_id(struct qedi_portid_tbl *id_tbl, u16 id) in qedi_alloc_id() argument
555 id -= id_tbl->start; in qedi_alloc_id()
556 if (id >= id_tbl->max) in qedi_alloc_id()
559 spin_lock(&id_tbl->lock); in qedi_alloc_id()
560 if (!test_bit(id, id_tbl->table)) { in qedi_alloc_id()
561 set_bit(id, id_tbl->table); in qedi_alloc_id()
564 spin_unlock(&id_tbl->lock); in qedi_alloc_id()
568 u16 qedi_alloc_new_id(struct qedi_portid_tbl *id_tbl) in qedi_alloc_new_id() argument
572 spin_lock(&id_tbl->lock); in qedi_alloc_new_id()
573 id = find_next_zero_bit(id_tbl->table, id_tbl->max, id_tbl->next); in qedi_alloc_new_id()
574 if (id >= id_tbl->max) { in qedi_alloc_new_id()
576 if (id_tbl->next != 0) { in qedi_alloc_new_id()
577 id = find_first_zero_bit(id_tbl->table, id_tbl->next); in qedi_alloc_new_id()
578 if (id >= id_tbl->next) in qedi_alloc_new_id()
583 if (id < id_tbl->max) { in qedi_alloc_new_id()
584 set_bit(id, id_tbl->table); in qedi_alloc_new_id()
585 id_tbl->next = (id + 1) & (id_tbl->max - 1); in qedi_alloc_new_id()
586 id += id_tbl->start; in qedi_alloc_new_id()
589 spin_unlock(&id_tbl->lock); in qedi_alloc_new_id()
594 void qedi_free_id(struct qedi_portid_tbl *id_tbl, u16 id) in qedi_free_id() argument
599 id -= id_tbl->start; in qedi_free_id()
600 if (id >= id_tbl->max) in qedi_free_id()
603 clear_bit(id, id_tbl->table); in qedi_free_id()