Lines Matching refs:map
21 static int regcache_rbtree_write(struct regmap *map, unsigned int reg,
23 static int regcache_rbtree_exit(struct regmap *map);
44 struct regmap *map, in regcache_rbtree_get_base_top_reg() argument
49 *top = rbnode->base_reg + ((rbnode->blklen - 1) * map->reg_stride); in regcache_rbtree_get_base_top_reg()
52 static unsigned int regcache_rbtree_get_register(struct regmap *map, in regcache_rbtree_get_register() argument
55 return regcache_get_val(map, rbnode->block, idx); in regcache_rbtree_get_register()
58 static void regcache_rbtree_set_register(struct regmap *map, in regcache_rbtree_set_register() argument
63 regcache_set_val(map, rbnode->block, idx, val); in regcache_rbtree_set_register()
66 static struct regcache_rbtree_node *regcache_rbtree_lookup(struct regmap *map, in regcache_rbtree_lookup() argument
69 struct regcache_rbtree_ctx *rbtree_ctx = map->cache; in regcache_rbtree_lookup()
76 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_lookup()
85 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_lookup()
100 static int regcache_rbtree_insert(struct regmap *map, struct rb_root *root, in regcache_rbtree_insert() argument
114 regcache_rbtree_get_base_top_reg(map, rbnode_tmp, &base_reg_tmp, in regcache_rbtree_insert()
139 struct regmap *map = s->private; in rbtree_show() local
140 struct regcache_rbtree_ctx *rbtree_ctx = map->cache; in rbtree_show()
149 map->lock(map->lock_arg); in rbtree_show()
157 mem_size += (n->blklen * map->cache_word_size); in rbtree_show()
160 regcache_rbtree_get_base_top_reg(map, n, &base, &top); in rbtree_show()
161 this_registers = ((top - base) / map->reg_stride) + 1; in rbtree_show()
176 map->unlock(map->lock_arg); in rbtree_show()
193 static void rbtree_debugfs_init(struct regmap *map) in rbtree_debugfs_init() argument
195 debugfs_create_file("rbtree", 0400, map->debugfs, map, &rbtree_fops); in rbtree_debugfs_init()
199 static int regcache_rbtree_init(struct regmap *map) in regcache_rbtree_init() argument
205 map->cache = kmalloc(sizeof *rbtree_ctx, GFP_KERNEL); in regcache_rbtree_init()
206 if (!map->cache) in regcache_rbtree_init()
209 rbtree_ctx = map->cache; in regcache_rbtree_init()
213 for (i = 0; i < map->num_reg_defaults; i++) { in regcache_rbtree_init()
214 ret = regcache_rbtree_write(map, in regcache_rbtree_init()
215 map->reg_defaults[i].reg, in regcache_rbtree_init()
216 map->reg_defaults[i].def); in regcache_rbtree_init()
224 regcache_rbtree_exit(map); in regcache_rbtree_init()
228 static int regcache_rbtree_exit(struct regmap *map) in regcache_rbtree_exit() argument
235 rbtree_ctx = map->cache; in regcache_rbtree_exit()
251 kfree(map->cache); in regcache_rbtree_exit()
252 map->cache = NULL; in regcache_rbtree_exit()
257 static int regcache_rbtree_read(struct regmap *map, in regcache_rbtree_read() argument
263 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_read()
265 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_read()
268 *value = regcache_rbtree_get_register(map, rbnode, reg_tmp); in regcache_rbtree_read()
277 static int regcache_rbtree_insert_to_block(struct regmap *map, in regcache_rbtree_insert_to_block() argument
289 blklen = (top_reg - base_reg) / map->reg_stride + 1; in regcache_rbtree_insert_to_block()
290 pos = (reg - base_reg) / map->reg_stride; in regcache_rbtree_insert_to_block()
291 offset = (rbnode->base_reg - base_reg) / map->reg_stride; in regcache_rbtree_insert_to_block()
294 blklen * map->cache_word_size, in regcache_rbtree_insert_to_block()
317 memmove(blk + offset * map->cache_word_size, in regcache_rbtree_insert_to_block()
318 blk, rbnode->blklen * map->cache_word_size); in regcache_rbtree_insert_to_block()
328 regcache_rbtree_set_register(map, rbnode, pos, value); in regcache_rbtree_insert_to_block()
333 regcache_rbtree_node_alloc(struct regmap *map, unsigned int reg) in regcache_rbtree_node_alloc() argument
344 if (map->rd_table) { in regcache_rbtree_node_alloc()
345 for (i = 0; i < map->rd_table->n_yes_ranges; i++) { in regcache_rbtree_node_alloc()
347 &map->rd_table->yes_ranges[i])) in regcache_rbtree_node_alloc()
351 if (i != map->rd_table->n_yes_ranges) { in regcache_rbtree_node_alloc()
352 range = &map->rd_table->yes_ranges[i]; in regcache_rbtree_node_alloc()
354 map->reg_stride + 1; in regcache_rbtree_node_alloc()
364 rbnode->block = kmalloc(rbnode->blklen * map->cache_word_size, in regcache_rbtree_node_alloc()
383 static int regcache_rbtree_write(struct regmap *map, unsigned int reg, in regcache_rbtree_write() argument
392 rbtree_ctx = map->cache; in regcache_rbtree_write()
397 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_write()
399 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_write()
400 regcache_rbtree_set_register(map, rbnode, reg_tmp, value); in regcache_rbtree_write()
407 max_dist = map->reg_stride * sizeof(*rbnode_tmp) / in regcache_rbtree_write()
408 map->cache_word_size; in regcache_rbtree_write()
421 regcache_rbtree_get_base_top_reg(map, rbnode_tmp, in regcache_rbtree_write()
431 ret = regcache_rbtree_insert_to_block(map, rbnode_tmp, in regcache_rbtree_write()
444 rbnode = regcache_rbtree_node_alloc(map, reg); in regcache_rbtree_write()
447 regcache_rbtree_set_register(map, rbnode, in regcache_rbtree_write()
449 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode); in regcache_rbtree_write()
456 static int regcache_rbtree_sync(struct regmap *map, unsigned int min, in regcache_rbtree_sync() argument
466 rbtree_ctx = map->cache; in regcache_rbtree_sync()
470 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_sync()
478 start = (min - base_reg) / map->reg_stride; in regcache_rbtree_sync()
483 end = (max - base_reg) / map->reg_stride + 1; in regcache_rbtree_sync()
487 ret = regcache_sync_block(map, rbnode->block, in regcache_rbtree_sync()
494 return regmap_async_complete(map); in regcache_rbtree_sync()
497 static int regcache_rbtree_drop(struct regmap *map, unsigned int min, in regcache_rbtree_drop() argument
506 rbtree_ctx = map->cache; in regcache_rbtree_drop()
510 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_drop()
518 start = (min - base_reg) / map->reg_stride; in regcache_rbtree_drop()
523 end = (max - base_reg) / map->reg_stride + 1; in regcache_rbtree_drop()