1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright IBM Corp. 2007, 2012 4*4882a593Smuzhiyun * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #ifndef _ASM_S390_CHPID_H 7*4882a593Smuzhiyun #define _ASM_S390_CHPID_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <uapi/asm/chpid.h> 10*4882a593Smuzhiyun #include <asm/cio.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun struct channel_path_desc_fmt0 { 13*4882a593Smuzhiyun u8 flags; 14*4882a593Smuzhiyun u8 lsn; 15*4882a593Smuzhiyun u8 desc; 16*4882a593Smuzhiyun u8 chpid; 17*4882a593Smuzhiyun u8 swla; 18*4882a593Smuzhiyun u8 zeroes; 19*4882a593Smuzhiyun u8 chla; 20*4882a593Smuzhiyun u8 chpp; 21*4882a593Smuzhiyun } __packed; 22*4882a593Smuzhiyun chp_id_init(struct chp_id * chpid)23*4882a593Smuzhiyunstatic inline void chp_id_init(struct chp_id *chpid) 24*4882a593Smuzhiyun { 25*4882a593Smuzhiyun memset(chpid, 0, sizeof(struct chp_id)); 26*4882a593Smuzhiyun } 27*4882a593Smuzhiyun chp_id_is_equal(struct chp_id * a,struct chp_id * b)28*4882a593Smuzhiyunstatic inline int chp_id_is_equal(struct chp_id *a, struct chp_id *b) 29*4882a593Smuzhiyun { 30*4882a593Smuzhiyun return (a->id == b->id) && (a->cssid == b->cssid); 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun chp_id_next(struct chp_id * chpid)33*4882a593Smuzhiyunstatic inline void chp_id_next(struct chp_id *chpid) 34*4882a593Smuzhiyun { 35*4882a593Smuzhiyun if (chpid->id < __MAX_CHPID) 36*4882a593Smuzhiyun chpid->id++; 37*4882a593Smuzhiyun else { 38*4882a593Smuzhiyun chpid->id = 0; 39*4882a593Smuzhiyun chpid->cssid++; 40*4882a593Smuzhiyun } 41*4882a593Smuzhiyun } 42*4882a593Smuzhiyun chp_id_is_valid(struct chp_id * chpid)43*4882a593Smuzhiyunstatic inline int chp_id_is_valid(struct chp_id *chpid) 44*4882a593Smuzhiyun { 45*4882a593Smuzhiyun return (chpid->cssid <= __MAX_CSSID); 46*4882a593Smuzhiyun } 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define chp_id_for_each(c) \ 50*4882a593Smuzhiyun for (chp_id_init(c); chp_id_is_valid(c); chp_id_next(c)) 51*4882a593Smuzhiyun #endif /* _ASM_S390_CHPID_H */ 52