Lines Matching defs:map
17 static int regcache_rbtree_write(struct regmap *map, unsigned int reg,
19 static int regcache_rbtree_exit(struct regmap *map);
40 struct regmap *map,
45 *top = rbnode->base_reg + ((rbnode->blklen - 1) * map->reg_stride);
48 static unsigned int regcache_rbtree_get_register(struct regmap *map,
51 return regcache_get_val(map, rbnode->block, idx);
54 static void regcache_rbtree_set_register(struct regmap *map,
59 regcache_set_val(map, rbnode->block, idx, val);
62 static struct regcache_rbtree_node *regcache_rbtree_lookup(struct regmap *map,
65 struct regcache_rbtree_ctx *rbtree_ctx = map->cache;
72 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
81 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
96 static int regcache_rbtree_insert(struct regmap *map, struct rb_root *root,
109 regcache_rbtree_get_base_top_reg(map, rbnode_tmp, &base_reg_tmp,
134 struct regmap *map = s->private;
135 struct regcache_rbtree_ctx *rbtree_ctx = map->cache;
144 map->lock(map->lock_arg);
152 mem_size += (n->blklen * map->cache_word_size);
155 regcache_rbtree_get_base_top_reg(map, n, &base, &top);
156 this_registers = ((top - base) / map->reg_stride) + 1;
171 map->unlock(map->lock_arg);
178 static void rbtree_debugfs_init(struct regmap *map)
180 debugfs_create_file("rbtree", 0400, map->debugfs, map, &rbtree_fops);
184 static int regcache_rbtree_init(struct regmap *map)
190 map->cache = kmalloc(sizeof *rbtree_ctx, GFP_KERNEL);
191 if (!map->cache)
194 rbtree_ctx = map->cache;
198 for (i = 0; i < map->num_reg_defaults; i++) {
199 ret = regcache_rbtree_write(map,
200 map->reg_defaults[i].reg,
201 map->reg_defaults[i].def);
209 regcache_rbtree_exit(map);
213 static int regcache_rbtree_exit(struct regmap *map)
220 rbtree_ctx = map->cache;
236 kfree(map->cache);
237 map->cache = NULL;
242 static int regcache_rbtree_read(struct regmap *map,
248 rbnode = regcache_rbtree_lookup(map, reg);
250 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride;
253 *value = regcache_rbtree_get_register(map, rbnode, reg_tmp);
262 static int regcache_rbtree_insert_to_block(struct regmap *map,
274 blklen = (top_reg - base_reg) / map->reg_stride + 1;
275 pos = (reg - base_reg) / map->reg_stride;
276 offset = (rbnode->base_reg - base_reg) / map->reg_stride;
279 blklen * map->cache_word_size,
280 map->alloc_flags);
289 map->alloc_flags);
302 memmove(blk + offset * map->cache_word_size,
303 blk, rbnode->blklen * map->cache_word_size);
312 regcache_rbtree_set_register(map, rbnode, pos, value);
317 regcache_rbtree_node_alloc(struct regmap *map, unsigned int reg)
323 rbnode = kzalloc(sizeof(*rbnode), map->alloc_flags);
328 if (map->rd_table) {
329 for (i = 0; i < map->rd_table->n_yes_ranges; i++) {
331 &map->rd_table->yes_ranges[i]))
335 if (i != map->rd_table->n_yes_ranges) {
336 range = &map->rd_table->yes_ranges[i];
338 map->reg_stride + 1;
348 rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size,
349 map->alloc_flags);
355 map->alloc_flags);
368 static int regcache_rbtree_write(struct regmap *map, unsigned int reg,
377 rbtree_ctx = map->cache;
382 rbnode = regcache_rbtree_lookup(map, reg);
384 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride;
385 regcache_rbtree_set_register(map, rbnode, reg_tmp, value);
393 max_dist = map->reg_stride * sizeof(*rbnode_tmp) /
394 map->cache_word_size;
407 regcache_rbtree_get_base_top_reg(map, rbnode_tmp,
439 ret = regcache_rbtree_insert_to_block(map, rbnode,
452 rbnode = regcache_rbtree_node_alloc(map, reg);
455 regcache_rbtree_set_register(map, rbnode,
456 (reg - rbnode->base_reg) / map->reg_stride,
458 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode);
465 static int regcache_rbtree_sync(struct regmap *map, unsigned int min,
475 map->async = true;
477 rbtree_ctx = map->cache;
481 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
489 start = (min - base_reg) / map->reg_stride;
494 end = (max - base_reg) / map->reg_stride + 1;
498 ret = regcache_sync_block(map, rbnode->block,
505 map->async = false;
507 return regmap_async_complete(map);
510 static int regcache_rbtree_drop(struct regmap *map, unsigned int min,
519 rbtree_ctx = map->cache;
523 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg,
531 start = (min - base_reg) / map->reg_stride;
536 end = (max - base_reg) / map->reg_stride + 1;