Lines Matching refs:alias_pool

90 	struct i2c_atr_alias_pool *alias_pool;  member
128 struct i2c_atr_alias_pool *alias_pool; member
137 struct i2c_atr_alias_pool *alias_pool; in i2c_atr_alloc_alias_pool() local
140 alias_pool = kzalloc(sizeof(*alias_pool), GFP_KERNEL); in i2c_atr_alloc_alias_pool()
141 if (!alias_pool) in i2c_atr_alloc_alias_pool()
144 alias_pool->size = num_aliases; in i2c_atr_alloc_alias_pool()
146 alias_pool->aliases = kcalloc(num_aliases, sizeof(*alias_pool->aliases), GFP_KERNEL); in i2c_atr_alloc_alias_pool()
147 if (!alias_pool->aliases) { in i2c_atr_alloc_alias_pool()
152 alias_pool->use_mask = bitmap_zalloc(num_aliases, GFP_KERNEL); in i2c_atr_alloc_alias_pool()
153 if (!alias_pool->use_mask) { in i2c_atr_alloc_alias_pool()
158 alias_pool->shared = shared; in i2c_atr_alloc_alias_pool()
160 spin_lock_init(&alias_pool->lock); in i2c_atr_alloc_alias_pool()
162 return alias_pool; in i2c_atr_alloc_alias_pool()
165 kfree(alias_pool->aliases); in i2c_atr_alloc_alias_pool()
167 kfree(alias_pool); in i2c_atr_alloc_alias_pool()
171 static void i2c_atr_free_alias_pool(struct i2c_atr_alias_pool *alias_pool) in i2c_atr_free_alias_pool() argument
173 bitmap_free(alias_pool->use_mask); in i2c_atr_free_alias_pool()
174 kfree(alias_pool->aliases); in i2c_atr_free_alias_pool()
175 kfree(alias_pool); in i2c_atr_free_alias_pool()
206 static int i2c_atr_reserve_alias(struct i2c_atr_alias_pool *alias_pool) in i2c_atr_reserve_alias() argument
211 spin_lock(&alias_pool->lock); in i2c_atr_reserve_alias()
213 idx = find_first_zero_bit(alias_pool->use_mask, alias_pool->size); in i2c_atr_reserve_alias()
214 if (idx >= alias_pool->size) { in i2c_atr_reserve_alias()
215 spin_unlock(&alias_pool->lock); in i2c_atr_reserve_alias()
219 set_bit(idx, alias_pool->use_mask); in i2c_atr_reserve_alias()
221 alias = alias_pool->aliases[idx]; in i2c_atr_reserve_alias()
223 spin_unlock(&alias_pool->lock); in i2c_atr_reserve_alias()
227 static void i2c_atr_release_alias(struct i2c_atr_alias_pool *alias_pool, u16 alias) in i2c_atr_release_alias() argument
231 spin_lock(&alias_pool->lock); in i2c_atr_release_alias()
233 for (idx = 0; idx < alias_pool->size; ++idx) { in i2c_atr_release_alias()
234 if (alias_pool->aliases[idx] == alias) { in i2c_atr_release_alias()
235 clear_bit(idx, alias_pool->use_mask); in i2c_atr_release_alias()
236 spin_unlock(&alias_pool->lock); in i2c_atr_release_alias()
241 spin_unlock(&alias_pool->lock); in i2c_atr_release_alias()
269 ret = i2c_atr_reserve_alias(chan->alias_pool); in i2c_atr_create_mapping_by_addr()
291 i2c_atr_release_alias(chan->alias_pool, alias); in i2c_atr_create_mapping_by_addr()
334 i2c_atr_release_alias(chan->alias_pool, alias); in i2c_atr_replace_mapping_by_addr()
589 i2c_atr_release_alias(chan->alias_pool, c2a->alias); in i2c_atr_detach_addr()
644 struct i2c_atr_alias_pool *alias_pool; in i2c_atr_parse_alias_pool() local
664 alias_pool = i2c_atr_alloc_alias_pool(num_aliases, true); in i2c_atr_parse_alias_pool()
665 if (IS_ERR(alias_pool)) { in i2c_atr_parse_alias_pool()
666 ret = PTR_ERR(alias_pool); in i2c_atr_parse_alias_pool()
671 atr->alias_pool = alias_pool; in i2c_atr_parse_alias_pool()
673 if (!alias_pool->size) in i2c_atr_parse_alias_pool()
692 alias_pool->aliases[i] = aliases32[i]; in i2c_atr_parse_alias_pool()
703 dev_dbg(dev, "i2c-alias-pool has %zu aliases\n", alias_pool->size); in i2c_atr_parse_alias_pool()
710 i2c_atr_free_alias_pool(alias_pool); in i2c_atr_parse_alias_pool()
758 i2c_atr_free_alias_pool(atr->alias_pool); in i2c_atr_new()
776 i2c_atr_free_alias_pool(atr->alias_pool); in i2c_atr_delete()
851 chan->alias_pool = i2c_atr_alloc_alias_pool(desc->num_aliases, false); in i2c_atr_add_adapter()
852 if (IS_ERR(chan->alias_pool)) { in i2c_atr_add_adapter()
853 ret = PTR_ERR(chan->alias_pool); in i2c_atr_add_adapter()
858 chan->alias_pool->aliases[idx] = desc->aliases[idx]; in i2c_atr_add_adapter()
860 chan->alias_pool = atr->alias_pool; in i2c_atr_add_adapter()
887 if (!chan->alias_pool->shared) in i2c_atr_add_adapter()
888 i2c_atr_free_alias_pool(chan->alias_pool); in i2c_atr_add_adapter()
924 if (!chan->alias_pool->shared) in i2c_atr_del_adapter()
925 i2c_atr_free_alias_pool(chan->alias_pool); in i2c_atr_del_adapter()