2007-04-27 18:01:28 +04:00
/*
* drivers / s390 / cio / chp . h
*
2010-10-25 18:10:27 +04:00
* Copyright IBM Corp . 2007 , 2010
2007-04-27 18:01:28 +04:00
* Author ( s ) : Peter Oberparleiter < peter . oberparleiter @ de . ibm . com >
*/
# ifndef S390_CHP_H
# define S390_CHP_H S390_CHP_H
# include <linux/types.h>
# include <linux/device.h>
2010-10-25 18:10:27 +04:00
# include <linux/mutex.h>
2007-04-27 18:01:31 +04:00
# include <asm/chpid.h>
2007-04-27 18:01:28 +04:00
# include "chsc.h"
2008-07-14 11:58:43 +04:00
# include "css.h"
2007-04-27 18:01:28 +04:00
2007-04-27 18:01:31 +04:00
# define CHP_STATUS_STANDBY 0
# define CHP_STATUS_CONFIGURED 1
# define CHP_STATUS_RESERVED 2
# define CHP_STATUS_NOT_RECOGNIZED 3
2008-07-14 11:58:45 +04:00
# define CHP_ONLINE 0
# define CHP_OFFLINE 1
# define CHP_VARY_ON 2
# define CHP_VARY_OFF 3
2008-07-14 11:59:02 +04:00
struct chp_link {
2008-07-14 11:58:45 +04:00
struct chp_id chpid ;
u32 fla_mask ;
u16 fla ;
} ;
2007-04-27 18:01:31 +04:00
static inline int chp_test_bit ( u8 * bitmap , int num )
{
int byte = num > > 3 ;
int mask = 128 > > ( num & 7 ) ;
return ( bitmap [ byte ] & mask ) ? 1 : 0 ;
}
2007-04-27 18:01:28 +04:00
struct channel_path {
2010-10-25 18:10:27 +04:00
struct device dev ;
2007-04-27 18:01:28 +04:00
struct chp_id chpid ;
2010-10-25 18:10:27 +04:00
struct mutex lock ; /* Serialize access to below members. */
2007-04-27 18:01:28 +04:00
int state ;
struct channel_path_desc desc ;
/* Channel-measurement related stuff: */
int cmg ;
int shared ;
void * cmg_chars ;
} ;
2010-10-25 18:10:31 +04:00
/* Return channel_path struct for given chpid. */
static inline struct channel_path * chpid_to_chp ( struct chp_id chpid )
{
return channel_subsystems [ chpid . cssid ] - > chps [ chpid . id ] ;
}
2007-04-27 18:01:28 +04:00
int chp_get_status ( struct chp_id chpid ) ;
u8 chp_get_sch_opm ( struct subchannel * sch ) ;
int chp_is_registered ( struct chp_id chpid ) ;
void * chp_get_chp_desc ( struct chp_id chpid ) ;
void chp_remove_cmg_attr ( struct channel_path * chp ) ;
int chp_add_cmg_attr ( struct channel_path * chp ) ;
int chp_new ( struct chp_id chpid ) ;
2007-04-27 18:01:31 +04:00
void chp_cfg_schedule ( struct chp_id chpid , int configure ) ;
void chp_cfg_cancel_deconfigure ( struct chp_id chpid ) ;
int chp_info_get_status ( struct chp_id chpid ) ;
2008-07-14 11:59:02 +04:00
int chp_ssd_get_mask ( struct chsc_ssd_info * , struct chp_link * ) ;
2007-04-27 18:01:28 +04:00
# endif /* S390_CHP_H */