xref: /openbmc/libmctp/libmctp-astlpc.h (revision 400766f94322a00981b012e714734cab0ed52e68)
13d36ee2eSJeremy Kerr /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
2672c8852SJeremy Kerr 
3672c8852SJeremy Kerr #ifndef _LIBMCTP_ASTLPCL_H
4672c8852SJeremy Kerr #define _LIBMCTP_ASTLPCL_H
5672c8852SJeremy Kerr 
6672c8852SJeremy Kerr #ifdef __cplusplus
7672c8852SJeremy Kerr extern "C" {
8672c8852SJeremy Kerr #endif
9672c8852SJeremy Kerr 
108682ef24SJeremy Kerr #include <libmctp.h>
11672c8852SJeremy Kerr 
127cd72f14SAndrew Jeffery #include <stdint.h>
137cd72f14SAndrew Jeffery 
14672c8852SJeremy Kerr struct mctp_binding_astlpc;
15672c8852SJeremy Kerr 
167cd72f14SAndrew Jeffery /* todo: Remove enum from public interfaces */
17bc53d35aSJeremy Kerr enum mctp_binding_astlpc_kcs_reg {
18bc53d35aSJeremy Kerr 	MCTP_ASTLPC_KCS_REG_DATA = 0,
19bc53d35aSJeremy Kerr 	MCTP_ASTLPC_KCS_REG_STATUS = 1,
20bc53d35aSJeremy Kerr };
21bc53d35aSJeremy Kerr 
22bc53d35aSJeremy Kerr struct mctp_binding_astlpc_ops {
23bc53d35aSJeremy Kerr 	int (*kcs_read)(void *data, enum mctp_binding_astlpc_kcs_reg reg,
24bc53d35aSJeremy Kerr 			uint8_t *val);
25bc53d35aSJeremy Kerr 	int (*kcs_write)(void *data, enum mctp_binding_astlpc_kcs_reg reg,
26bc53d35aSJeremy Kerr 			 uint8_t val);
2706b2cd86SAndrew Jeffery 	int (*lpc_read)(void *data, void *buf, long offset, size_t len);
2855fb90beSAndrew Jeffery 	int (*lpc_write)(void *data, const void *buf, long offset, size_t len);
29bc53d35aSJeremy Kerr };
30bc53d35aSJeremy Kerr 
317cd72f14SAndrew Jeffery #define MCTP_BINDING_ASTLPC_MODE_BMC  0
327cd72f14SAndrew Jeffery #define MCTP_BINDING_ASTLPC_MODE_HOST 1
337cd72f14SAndrew Jeffery struct mctp_binding_astlpc *
347cd72f14SAndrew Jeffery mctp_astlpc_init(uint8_t mode, uint32_t mtu, void *lpc_map,
357cd72f14SAndrew Jeffery 		 const struct mctp_binding_astlpc_ops *ops, void *ops_data);
367cd72f14SAndrew Jeffery 
377cd72f14SAndrew Jeffery struct mctp_binding_astlpc *
387cd72f14SAndrew Jeffery mctp_astlpc_init_ops(const struct mctp_binding_astlpc_ops *ops, void *ops_data,
397cd72f14SAndrew Jeffery 		     void *lpc_map);
404663f67cSAndrew Jeffery void mctp_astlpc_destroy(struct mctp_binding_astlpc *astlpc);
413b36d17cSJeremy Kerr 
423b36d17cSJeremy Kerr struct mctp_binding *mctp_binding_astlpc_core(struct mctp_binding_astlpc *b);
433b36d17cSJeremy Kerr 
444df106dbSFrederic Barrat bool mctp_astlpc_tx_done(struct mctp_binding_astlpc *astlpc);
45672c8852SJeremy Kerr int mctp_astlpc_poll(struct mctp_binding_astlpc *astlpc);
46672c8852SJeremy Kerr 
47bc53d35aSJeremy Kerr /* fileio-based interface */
48*400766f9SKonstantin Aladyshev struct mctp_binding_astlpc *mctp_astlpc_init_fileio(const char *kcs_path);
49bc53d35aSJeremy Kerr 
501111c6a5SAndrew Jeffery struct pollfd;
511111c6a5SAndrew Jeffery int mctp_astlpc_init_pollfd(struct mctp_binding_astlpc *astlpc,
521111c6a5SAndrew Jeffery 			    struct pollfd *pollfd);
531111c6a5SAndrew Jeffery 
54672c8852SJeremy Kerr #ifdef __cplusplus
55672c8852SJeremy Kerr }
56672c8852SJeremy Kerr #endif
57672c8852SJeremy Kerr 
580ddd07e7SAndrew Jeffery #endif /* _LIBMCTP_ASTLPC_H */
59