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) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  *    Copyright IBM Corp. 2007, 2010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *    Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #ifndef S390_CHP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #define S390_CHP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/mutex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <asm/chpid.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include "chsc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include "css.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define CHP_STATUS_STANDBY		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define CHP_STATUS_CONFIGURED		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define CHP_STATUS_RESERVED		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define CHP_STATUS_NOT_RECOGNIZED	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define CHP_ONLINE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define CHP_OFFLINE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define CHP_VARY_ON 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define CHP_VARY_OFF 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) struct chp_link {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	struct chp_id chpid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	u32 fla_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	u16 fla;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) static inline int chp_test_bit(u8 *bitmap, int num)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	int byte = num >> 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	int mask = 128 >> (num & 7);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	return (bitmap[byte] & mask) ? 1 : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct channel_path {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	struct device dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	struct chp_id chpid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	struct mutex lock; /* Serialize access to below members. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	int state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	struct channel_path_desc_fmt0 desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	struct channel_path_desc_fmt1 desc_fmt1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	struct channel_path_desc_fmt3 desc_fmt3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	/* Channel-measurement related stuff: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	int cmg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	int shared;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	struct cmg_chars cmg_chars;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) /* Return channel_path struct for given chpid. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) static inline struct channel_path *chpid_to_chp(struct chp_id chpid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	return css_by_id(chpid.cssid)->chps[chpid.id];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) int chp_get_status(struct chp_id chpid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) u8 chp_get_sch_opm(struct subchannel *sch);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) int chp_is_registered(struct chp_id chpid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct channel_path_desc_fmt0 *chp_get_chp_desc(struct chp_id chpid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) void chp_remove_cmg_attr(struct channel_path *chp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) int chp_add_cmg_attr(struct channel_path *chp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) int chp_update_desc(struct channel_path *chp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) int chp_new(struct chp_id chpid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) void chp_cfg_schedule(struct chp_id chpid, int configure);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) void chp_cfg_cancel_deconfigure(struct chp_id chpid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) int chp_info_get_status(struct chp_id chpid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) int chp_ssd_get_mask(struct chsc_ssd_info *, struct chp_link *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #endif /* S390_CHP_H */