Lines Matching full: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
188 map->cache = kmalloc_obj(*rbtree_ctx, map->alloc_flags); in regcache_rbtree_init()
189 if (!map->cache) in regcache_rbtree_init()
192 rbtree_ctx = map->cache; in regcache_rbtree_init()
199 static int regcache_rbtree_exit(struct regmap *map) in regcache_rbtree_exit() argument
206 rbtree_ctx = map->cache; in regcache_rbtree_exit()
222 kfree(map->cache); in regcache_rbtree_exit()
223 map->cache = NULL; in regcache_rbtree_exit()
228 static int regcache_rbtree_populate(struct regmap *map) in regcache_rbtree_populate() argument
233 for (i = 0; i < map->num_reg_defaults; i++) { in regcache_rbtree_populate()
234 ret = regcache_rbtree_write(map, in regcache_rbtree_populate()
235 map->reg_defaults[i].reg, in regcache_rbtree_populate()
236 map->reg_defaults[i].def); in regcache_rbtree_populate()
244 static int regcache_rbtree_read(struct regmap *map, in regcache_rbtree_read() argument
250 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_read()
252 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_read()
255 *value = regcache_rbtree_get_register(map, rbnode, reg_tmp); in regcache_rbtree_read()
264 static int regcache_rbtree_insert_to_block(struct regmap *map, in regcache_rbtree_insert_to_block() argument
276 blklen = (top_reg - base_reg) / map->reg_stride + 1; in regcache_rbtree_insert_to_block()
277 pos = (reg - base_reg) / map->reg_stride; in regcache_rbtree_insert_to_block()
278 offset = (rbnode->base_reg - base_reg) / map->reg_stride; in regcache_rbtree_insert_to_block()
280 blk = krealloc_array(rbnode->block, blklen, map->cache_word_size, map->alloc_flags); in regcache_rbtree_insert_to_block()
289 map->alloc_flags); in regcache_rbtree_insert_to_block()
302 memmove(blk + offset * map->cache_word_size, in regcache_rbtree_insert_to_block()
303 blk, rbnode->blklen * map->cache_word_size); in regcache_rbtree_insert_to_block()
312 regcache_rbtree_set_register(map, rbnode, pos, value); in regcache_rbtree_insert_to_block()
317 regcache_rbtree_node_alloc(struct regmap *map, unsigned int reg) in regcache_rbtree_node_alloc() argument
323 rbnode = kzalloc_obj(*rbnode, map->alloc_flags); in regcache_rbtree_node_alloc()
328 if (map->rd_table) { in regcache_rbtree_node_alloc()
329 for (i = 0; i < map->rd_table->n_yes_ranges; i++) { in regcache_rbtree_node_alloc()
331 &map->rd_table->yes_ranges[i])) in regcache_rbtree_node_alloc()
335 if (i != map->rd_table->n_yes_ranges) { in regcache_rbtree_node_alloc()
336 range = &map->rd_table->yes_ranges[i]; in regcache_rbtree_node_alloc()
338 map->reg_stride + 1; in regcache_rbtree_node_alloc()
348 rbnode->block = kmalloc_array(rbnode->blklen, map->cache_word_size, in regcache_rbtree_node_alloc()
349 map->alloc_flags); in regcache_rbtree_node_alloc()
355 map->alloc_flags); in regcache_rbtree_node_alloc()
368 static int regcache_rbtree_write(struct regmap *map, unsigned int reg, in regcache_rbtree_write() argument
377 rbtree_ctx = map->cache; in regcache_rbtree_write()
382 rbnode = regcache_rbtree_lookup(map, reg); in regcache_rbtree_write()
384 reg_tmp = (reg - rbnode->base_reg) / map->reg_stride; in regcache_rbtree_write()
385 regcache_rbtree_set_register(map, rbnode, reg_tmp, value); in regcache_rbtree_write()
393 max_dist = map->reg_stride * sizeof(*rbnode_tmp) / in regcache_rbtree_write()
394 map->cache_word_size; in regcache_rbtree_write()
407 regcache_rbtree_get_base_top_reg(map, rbnode_tmp, in regcache_rbtree_write()
439 ret = regcache_rbtree_insert_to_block(map, rbnode, in regcache_rbtree_write()
452 rbnode = regcache_rbtree_node_alloc(map, reg); in regcache_rbtree_write()
455 regcache_rbtree_set_register(map, rbnode, in regcache_rbtree_write()
456 (reg - rbnode->base_reg) / map->reg_stride, in regcache_rbtree_write()
458 regcache_rbtree_insert(map, &rbtree_ctx->root, rbnode); in regcache_rbtree_write()
465 static int regcache_rbtree_sync(struct regmap *map, unsigned int min, in regcache_rbtree_sync() argument
475 map->async = true; in regcache_rbtree_sync()
477 rbtree_ctx = map->cache; in regcache_rbtree_sync()
481 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_sync()
489 start = (min - base_reg) / map->reg_stride; in regcache_rbtree_sync()
494 end = (max - base_reg) / map->reg_stride + 1; in regcache_rbtree_sync()
498 ret = regcache_sync_block(map, rbnode->block, in regcache_rbtree_sync()
505 map->async = false; in regcache_rbtree_sync()
507 return regmap_async_complete(map); in regcache_rbtree_sync()
510 static int regcache_rbtree_drop(struct regmap *map, unsigned int min, in regcache_rbtree_drop() argument
519 rbtree_ctx = map->cache; in regcache_rbtree_drop()
523 regcache_rbtree_get_base_top_reg(map, rbnode, &base_reg, in regcache_rbtree_drop()
531 start = (min - base_reg) / map->reg_stride; in regcache_rbtree_drop()
536 end = (max - base_reg) / map->reg_stride + 1; in regcache_rbtree_drop()