Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2)  * Copyright (C) 2003 Sistina Software.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * Module Author: Heinz Mauelshagen
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  * This file is released under the GPL.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9)  * Path-Selector registration.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #ifndef	DM_PATH_SELECTOR_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define	DM_PATH_SELECTOR_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/device-mapper.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include "dm-mpath.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)  * We provide an abstraction for the code that chooses which path
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)  * to send some io down.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) struct path_selector_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct path_selector {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	struct path_selector_type *type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	void *context;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) /* Information about a path selector type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) struct path_selector_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	struct module *module;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	unsigned int table_args;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	unsigned int info_args;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	 * Constructs a path selector object, takes custom arguments
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	int (*create) (struct path_selector *ps, unsigned argc, char **argv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	void (*destroy) (struct path_selector *ps);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	 * Add an opaque path object, along with some selector specific
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	 * path args (eg, path priority).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	int (*add_path) (struct path_selector *ps, struct dm_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 			 int argc, char **argv, char **error);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	 * Chooses a path for this io, if no paths are available then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	 * NULL will be returned.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	struct dm_path *(*select_path) (struct path_selector *ps,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 					size_t nr_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	 * Notify the selector that a path has failed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	void (*fail_path) (struct path_selector *ps, struct dm_path *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	 * Ask selector to reinstate a path.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	int (*reinstate_path) (struct path_selector *ps, struct dm_path *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	 * Table content based on parameters added in ps_add_path_fn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	 * or path selector status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 	int (*status) (struct path_selector *ps, struct dm_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 		       status_type_t type, char *result, unsigned int maxlen);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 	int (*start_io) (struct path_selector *ps, struct dm_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 			 size_t nr_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 	int (*end_io) (struct path_selector *ps, struct dm_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 		       size_t nr_bytes, u64 start_time);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) /* Register a path selector */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) int dm_register_path_selector(struct path_selector_type *type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) /* Unregister a path selector */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) int dm_unregister_path_selector(struct path_selector_type *type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) /* Returns a registered path selector type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) struct path_selector_type *dm_get_path_selector(const char *name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) /* Releases a path selector  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) void dm_put_path_selector(struct path_selector_type *pst);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #endif