cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

raid_class.h (2153B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * raid_class.h - a generic raid visualisation class
      4 *
      5 * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com>
      6 */
      7#include <linux/transport_class.h>
      8
      9struct raid_template {
     10	struct transport_container raid_attrs;
     11};
     12
     13struct raid_function_template {
     14	void *cookie;
     15	int (*is_raid)(struct device *);
     16	void (*get_resync)(struct device *);
     17	void (*get_state)(struct device *);
     18};
     19
     20enum raid_state {
     21	RAID_STATE_UNKNOWN = 0,
     22	RAID_STATE_ACTIVE,
     23	RAID_STATE_DEGRADED,
     24	RAID_STATE_RESYNCING,
     25	RAID_STATE_OFFLINE,
     26};
     27
     28enum raid_level {
     29	RAID_LEVEL_UNKNOWN = 0,
     30	RAID_LEVEL_LINEAR,
     31	RAID_LEVEL_0,
     32	RAID_LEVEL_1,
     33	RAID_LEVEL_10,
     34	RAID_LEVEL_1E,
     35	RAID_LEVEL_3,
     36	RAID_LEVEL_4,
     37	RAID_LEVEL_5,
     38	RAID_LEVEL_50,
     39	RAID_LEVEL_6,
     40	RAID_LEVEL_JBOD,
     41};
     42
     43struct raid_data {
     44	struct list_head component_list;
     45	int component_count;
     46	enum raid_level level;
     47	enum raid_state state;
     48	int resync;
     49};
     50
     51/* resync complete goes from 0 to this */
     52#define RAID_MAX_RESYNC		(10000)
     53
     54#define DEFINE_RAID_ATTRIBUTE(type, attr)				      \
     55static inline void							      \
     56raid_set_##attr(struct raid_template *r, struct device *dev, type value) {    \
     57	struct device *device =						      \
     58		attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
     59	struct raid_data *rd;						      \
     60	BUG_ON(!device);						      \
     61	rd = dev_get_drvdata(device);					      \
     62	rd->attr = value;						      \
     63}									      \
     64static inline type							      \
     65raid_get_##attr(struct raid_template *r, struct device *dev) {		      \
     66	struct device *device =						      \
     67		attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
     68	struct raid_data *rd;						      \
     69	BUG_ON(!device);						      \
     70	rd = dev_get_drvdata(device);					      \
     71	return rd->attr;						      \
     72}
     73
     74DEFINE_RAID_ATTRIBUTE(enum raid_level, level)
     75DEFINE_RAID_ATTRIBUTE(int, resync)
     76DEFINE_RAID_ATTRIBUTE(enum raid_state, state)
     77	
     78struct raid_template *raid_class_attach(struct raid_function_template *);
     79void raid_class_release(struct raid_template *);
     80
     81int __must_check raid_component_add(struct raid_template *, struct device *,
     82				    struct device *);
     83