Lines Matching refs: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, in regcache_rbtree_get_base_top_reg() argument
45 *top = rbnode->base_reg + ((rbnode->blklen - 1) * map->reg_stride); in regcache_rbtree_get_base_top_reg()
48 static unsigned int regcache_rbtree_get_register(struct regmap *map, in regcache_rbtree_get_register() argument
51 return regcache_get_val(map, rbnode->block, idx); in regcache_rbtree_get_register()
54 static void regcache_rbtree_set_register(struct regmap *map, in regcache_rbtree_set_register() argument
59 regcache_set_val(map, rbnode->block, idx, val); in regcache_rbtree_set_register()
62 static struct regcache_rbtree_node *regcache_rbtree_lookup(struct regmap *map, in regcache_rbtree_lookup() argument
65 struct regcache_rbtree_ctx *rbtree_ctx = map->cache; in regcache_rbtree_lookup()
72 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_lookup()
81 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_lookup()
96 static int regcache_rbtree_insert(struct regmap *map, struct rb_root *root, in regcache_rbtree_insert() argument
109 regcache_rbtree_get_base_top_reg(map, rbnode_tmp, &base_reg_tmp, in regcache_rbtree_insert()
134 struct regmap *map = s->private; in rbtree_show() local
135 struct regcache_rbtree_ctx *rbtree_ctx = map->cache; in rbtree_show()
144 map->lock(map->lock_arg); in rbtree_show()
152 mem_size += (n->blklen * map->cache_word_size); in rbtree_show()
155 regcache_rbtree_get_base_top_reg(map, n, &base, &top); in rbtree_show()
156 this_registers = ((top - base) / map->reg_stride) + 1; in rbtree_show()
171 map->unlock(map->lock_arg); in rbtree_show()
178 static void rbtree_debugfs_init(struct regmap *map) in rbtree_debugfs_init() argument
180 debugfs_create_file("rbtree", 0400, map->debugfs, map, &rbtree_fops); in rbtree_debugfs_init()
184 static int regcache_rbtree_init(struct regmap *map) in regcache_rbtree_init() argument
190 map->cache = kmalloc(sizeof *rbtree_ctx, map->alloc_flags); in regcache_rbtree_init()
191 if (!map->cache) in regcache_rbtree_init()
194 rbtree_ctx = map->cache; in regcache_rbtree_init()
198 for (i = 0; i < map->num_reg_defaults; i++) { in regcache_rbtree_init()
199 ret = regcache_rbtree_write(map, in regcache_rbtree_init()
200 map->reg_defaults[i].reg, in regcache_rbtree_init()
201 map->reg_defaults[i].def); in regcache_rbtree_init()
209 regcache_rbtree_exit(map); in regcache_rbtree_init()
213 static int regcache_rbtree_exit(struct regmap *map) in regcache_rbtree_exit() argument
220 rbtree_ctx = map->cache; in regcache_rbtree_exit()
236 kfree(map->cache); in regcache_rbtree_exit()
237 map->cache = NULL; in regcache_rbtree_exit()
242 static int regcache_rbtree_read(struct regmap *map, in regcache_rbtree_read() argument
248 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_read()
250 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_read()
253 *value = regcache_rbtree_get_register(map, rbnode, reg_tmp); in regcache_rbtree_read()
262 static int regcache_rbtree_insert_to_block(struct regmap *map, in regcache_rbtree_insert_to_block() argument
274 blklen = (top_reg - base_reg) / map->reg_stride + 1; in regcache_rbtree_insert_to_block()
275 pos = (reg - base_reg) / map->reg_stride; in regcache_rbtree_insert_to_block()
276 offset = (rbnode->base_reg - base_reg) / map->reg_stride; in regcache_rbtree_insert_to_block()
278 blk = krealloc_array(rbnode->block, blklen, map->cache_word_size, map->alloc_flags); in regcache_rbtree_insert_to_block()
287 map->alloc_flags); in regcache_rbtree_insert_to_block()
300 memmove(blk + offset * map->cache_word_size, in regcache_rbtree_insert_to_block()
301 blk, rbnode->blklen * map->cache_word_size); in regcache_rbtree_insert_to_block()
310 regcache_rbtree_set_register(map, rbnode, pos, value); in regcache_rbtree_insert_to_block()
315 regcache_rbtree_node_alloc(struct regmap *map, unsigned int reg) in regcache_rbtree_node_alloc() argument
321 rbnode = kzalloc(sizeof(*rbnode), map->alloc_flags); in regcache_rbtree_node_alloc()
326 if (map->rd_table) { in regcache_rbtree_node_alloc()
327 for (i = 0; i < map->rd_table->n_yes_ranges; i++) { in regcache_rbtree_node_alloc()
329 &map->rd_table->yes_ranges[i])) in regcache_rbtree_node_alloc()
333 if (i != map->rd_table->n_yes_ranges) { in regcache_rbtree_node_alloc()
334 range = &map->rd_table->yes_ranges[i]; in regcache_rbtree_node_alloc()
336 map->reg_stride + 1; in regcache_rbtree_node_alloc()
346 rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size, in regcache_rbtree_node_alloc()
347 map->alloc_flags); in regcache_rbtree_node_alloc()
353 map->alloc_flags); in regcache_rbtree_node_alloc()
366 static int regcache_rbtree_write(struct regmap *map, unsigned int reg, in regcache_rbtree_write() argument
375 rbtree_ctx = map->cache; in regcache_rbtree_write()
380 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_write()
382 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_write()
383 regcache_rbtree_set_register(map, rbnode, reg_tmp, value); in regcache_rbtree_write()
391 max_dist = map->reg_stride * sizeof(*rbnode_tmp) / in regcache_rbtree_write()
392 map->cache_word_size; in regcache_rbtree_write()
405 regcache_rbtree_get_base_top_reg(map, rbnode_tmp, in regcache_rbtree_write()
437 ret = regcache_rbtree_insert_to_block(map, rbnode, in regcache_rbtree_write()
450 rbnode = regcache_rbtree_node_alloc(map, reg); in regcache_rbtree_write()
453 regcache_rbtree_set_register(map, rbnode, in regcache_rbtree_write()
454 (reg - rbnode->base_reg) / map->reg_stride, in regcache_rbtree_write()
456 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode); in regcache_rbtree_write()
463 static int regcache_rbtree_sync(struct regmap *map, unsigned int min, in regcache_rbtree_sync() argument
473 map->async = true; in regcache_rbtree_sync()
475 rbtree_ctx = map->cache; in regcache_rbtree_sync()
479 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_sync()
487 start = (min - base_reg) / map->reg_stride; in regcache_rbtree_sync()
492 end = (max - base_reg) / map->reg_stride + 1; in regcache_rbtree_sync()
496 ret = regcache_sync_block(map, rbnode->block, in regcache_rbtree_sync()
503 map->async = false; in regcache_rbtree_sync()
505 return regmap_async_complete(map); in regcache_rbtree_sync()
508 static int regcache_rbtree_drop(struct regmap *map, unsigned int min, in regcache_rbtree_drop() argument
517 rbtree_ctx = map->cache; in regcache_rbtree_drop()
521 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_drop()
529 start = (min - base_reg) / map->reg_stride; in regcache_rbtree_drop()
534 end = (max - base_reg) / map->reg_stride + 1; in regcache_rbtree_drop()