2013-01-09 01:07:14 +04:00
/*
*
* Intel Management Engine Interface ( Intel MEI ) Linux driver
* Copyright ( c ) 2003 - 2012 , Intel Corporation .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms and conditions of the GNU General Public License ,
* version 2 , as published by the Free Software Foundation .
*
* This program is distributed in the hope it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*
*/
# ifndef _MEI_CLIENT_H_
# define _MEI_CLIENT_H_
# include <linux/types.h>
# include <linux/watchdog.h>
# include <linux/poll.h>
# include <linux/mei.h>
# include "mei_dev.h"
int mei_me_cl_by_uuid ( const struct mei_device * dev , const uuid_le * cuuid ) ;
int mei_me_cl_by_id ( struct mei_device * dev , u8 client_id ) ;
/*
* MEI IO Functions
*/
struct mei_cl_cb * mei_io_cb_init ( struct mei_cl * cl , struct file * fp ) ;
void mei_io_cb_free ( struct mei_cl_cb * priv_cb ) ;
int mei_io_cb_alloc_req_buf ( struct mei_cl_cb * cb , size_t length ) ;
int mei_io_cb_alloc_resp_buf ( struct mei_cl_cb * cb , size_t length ) ;
/**
* mei_io_list_init - Sets up a queue list .
*
* @ list : An instance cl callback structure
*/
static inline void mei_io_list_init ( struct mei_cl_cb * list )
{
INIT_LIST_HEAD ( & list - > list ) ;
}
2014-08-14 18:22:20 +04:00
void mei_io_list_flush ( struct mei_cl_cb * list , struct mei_cl * cl ) ;
2013-01-09 01:07:14 +04:00
/*
* MEI Host Client Functions
*/
struct mei_cl * mei_cl_allocate ( struct mei_device * dev ) ;
void mei_cl_init ( struct mei_cl * cl , struct mei_device * dev ) ;
2013-01-09 01:07:22 +04:00
int mei_cl_link ( struct mei_cl * cl , int id ) ;
2013-01-09 01:07:14 +04:00
int mei_cl_unlink ( struct mei_cl * cl ) ;
int mei_cl_flush_queues ( struct mei_cl * cl ) ;
struct mei_cl_cb * mei_cl_find_read_cb ( struct mei_cl * cl ) ;
int mei_cl_flow_ctrl_creds ( struct mei_cl * cl ) ;
int mei_cl_flow_ctrl_reduce ( struct mei_cl * cl ) ;
/*
* MEI input output function prototype
*/
2013-07-25 21:15:53 +04:00
static inline bool mei_cl_is_connected ( struct mei_cl * cl )
{
2014-03-18 01:57:23 +04:00
return cl - > dev & &
2013-07-25 21:15:53 +04:00
cl - > dev - > dev_state = = MEI_DEV_ENABLED & &
2014-03-18 01:57:23 +04:00
cl - > state = = MEI_FILE_CONNECTED ;
2013-07-25 21:15:53 +04:00
}
2013-09-02 14:29:46 +04:00
static inline bool mei_cl_is_transitioning ( struct mei_cl * cl )
{
2014-03-18 01:57:23 +04:00
return MEI_FILE_INITIALIZING = = cl - > state | |
2013-09-02 14:29:46 +04:00
MEI_FILE_DISCONNECTED = = cl - > state | |
2014-03-18 01:57:23 +04:00
MEI_FILE_DISCONNECTING = = cl - > state ;
2013-09-02 14:29:46 +04:00
}
2013-07-25 21:15:53 +04:00
2013-01-09 01:07:14 +04:00
bool mei_cl_is_other_connecting ( struct mei_cl * cl ) ;
int mei_cl_disconnect ( struct mei_cl * cl ) ;
int mei_cl_connect ( struct mei_cl * cl , struct file * file ) ;
2013-04-19 23:01:35 +04:00
int mei_cl_read_start ( struct mei_cl * cl , size_t length ) ;
2013-04-08 22:56:37 +04:00
int mei_cl_write ( struct mei_cl * cl , struct mei_cl_cb * cb , bool blocking ) ;
2014-02-19 19:35:48 +04:00
int mei_cl_irq_write ( struct mei_cl * cl , struct mei_cl_cb * cb ,
struct mei_cl_cb * cmpl_list ) ;
2013-06-23 10:36:59 +04:00
2013-05-12 16:34:45 +04:00
void mei_cl_complete ( struct mei_cl * cl , struct mei_cl_cb * cb ) ;
2013-01-09 01:07:14 +04:00
void mei_host_client_init ( struct work_struct * work ) ;
2013-04-08 22:56:37 +04:00
2013-02-06 16:06:44 +04:00
void mei_cl_all_disconnect ( struct mei_device * dev ) ;
2013-07-24 17:22:57 +04:00
void mei_cl_all_wakeup ( struct mei_device * dev ) ;
2013-02-06 16:06:44 +04:00
void mei_cl_all_write_clear ( struct mei_device * dev ) ;
2013-09-15 19:11:07 +04:00
# define MEI_CL_FMT "cl:host=%02d me=%02d "
# define MEI_CL_PRM(cl) (cl)->host_client_id, (cl)->me_client_id
# define cl_dbg(dev, cl, format, arg...) \
dev_dbg ( & ( dev ) - > pdev - > dev , MEI_CL_FMT format , MEI_CL_PRM ( cl ) , # # arg )
# define cl_err(dev, cl, format, arg...) \
dev_err ( & ( dev ) - > pdev - > dev , MEI_CL_FMT format , MEI_CL_PRM ( cl ) , # # arg )
2013-01-09 01:07:14 +04:00
# endif /* _MEI_CLIENT_H_ */