*参照元 [#i070ed9f] #backlinks *説明 [#h835c7d5] -パス: [[linux-4.4.1/drivers/base/regmap/internal.h]] -FIXME: これは何? --説明 **参考 [#e2270c5a] *実装 [#j343f3bd] struct regmap { union { struct mutex mutex; struct { spinlock_t spinlock; unsigned long spinlock_flags; }; }; - --[[linux-4.4.1/mutex]] --[[linux-4.4.1/spinlock_t]] regmap_lock lock; regmap_unlock unlock; void *lock_arg; /* This is passed to lock/unlock functions */ gfp_t alloc_flags; - --[[linux-4.4.1/regmap_lock]] --[[linux-4.4.1/regmap_unlock]] --[[linux-4.4.1/gfp_t]] struct device *dev; /* Device we do I/O on */ void *work_buf; /* Scratch buffer used to format I/O */ struct regmap_format format; /* Buffer format */ const struct regmap_bus *bus; void *bus_context; const char *name; - --[[linux-4.4.1/device]] --[[linux-4.4.1/regmap_format]] --[[linux-4.4.1/regmap_bus]] bool async; spinlock_t async_lock; wait_queue_head_t async_waitq; struct list_head async_list; struct list_head async_free; int async_ret; - --[[linux-4.4.1/spinlock_t]] --[[linux-4.4.1/wait_queue_head_t]] --[[linux-4.4.1/list_head]] #ifdef CONFIG_DEBUG_FS - --[[linux-4.4.1/CONFIG_DEBUG_FS]] struct dentry *debugfs; const char *debugfs_name; unsigned int debugfs_reg_len; unsigned int debugfs_val_len; unsigned int debugfs_tot_len; struct list_head debugfs_off_cache; struct mutex cache_lock; #endif - --[[linux-4.4.1/dentry]] --[[linux-4.4.1/list_head]] --[[linux-4.4.1/mutex]] unsigned int max_register; bool (*writeable_reg)(struct device *dev, unsigned int reg); bool (*readable_reg)(struct device *dev, unsigned int reg); bool (*volatile_reg)(struct device *dev, unsigned int reg); bool (*precious_reg)(struct device *dev, unsigned int reg); const struct regmap_access_table *wr_table; const struct regmap_access_table *rd_table; const struct regmap_access_table *volatile_table; const struct regmap_access_table *precious_table; - --[[linux-4.4.1/device]] --[[linux-4.4.1/regmap_access_table]] int (*reg_read)(void *context, unsigned int reg, unsigned int *val); int (*reg_write)(void *context, unsigned int reg, unsigned int val); int (*reg_update_bits)(void *context, unsigned int reg, unsigned int mask, unsigned int val); bool defer_caching; u8 read_flag_mask; u8 write_flag_mask; /* number of bits to (left) shift the reg value when formatting*/ int reg_shift; int reg_stride; /* regcache specific members */ const struct regcache_ops *cache_ops; enum regcache_type cache_type; - --[[linux-4.4.1/regcache_ops]] --[[linux-4.4.1/regcache_type]] /* number of bytes in reg_defaults_raw */ unsigned int cache_size_raw; /* number of bytes per word in reg_defaults_raw */ unsigned int cache_word_size; /* number of entries in reg_defaults */ unsigned int num_reg_defaults; /* number of entries in reg_defaults_raw */ unsigned int num_reg_defaults_raw; /* if set, only the cache is modified not the HW */ bool cache_only; /* if set, only the HW is modified not the cache */ bool cache_bypass; /* if set, remember to free reg_defaults_raw */ bool cache_free; struct reg_default *reg_defaults; const void *reg_defaults_raw; void *cache; /* if set, the cache contains newer data than the HW */ bool cache_dirty; /* if set, the HW registers are known to match map->reg_defaults */ bool no_sync_defaults; - --[[linux-4.4.1/reg_default]] struct reg_sequence *patch; int patch_regs; - --[[linux-4.4.1/reg_sequence]] /* if set, converts bulk read to single read */ bool use_single_read; /* if set, converts bulk read to single read */ bool use_single_write; /* if set, the device supports multi write mode */ bool can_multi_write; /* if set, raw reads/writes are limited to this size */ size_t max_raw_read; size_t max_raw_write; struct rb_root range_tree; void *selector_work_buf; /* Scratch buffer used for selector */ - --[[linux-4.4.1/rb_root]] }; *コメント [#v7314951]