xref: /linux/drivers/misc/issei/fw_client.h (revision 93e4b3076b5f2d853462b9777d083c77fc0b7b23)
1*2207e8d4SAlexander Usyskin /* SPDX-License-Identifier: GPL-2.0 */
2*2207e8d4SAlexander Usyskin /* Copyright (C) 2023-2026 Intel Corporation */
3*2207e8d4SAlexander Usyskin #ifndef _ISSEI_FW_CLIENT_H_
4*2207e8d4SAlexander Usyskin #define _ISSEI_FW_CLIENT_H_
5*2207e8d4SAlexander Usyskin 
6*2207e8d4SAlexander Usyskin #include <linux/device.h>
7*2207e8d4SAlexander Usyskin #include <linux/kobject.h>
8*2207e8d4SAlexander Usyskin #include <linux/types.h>
9*2207e8d4SAlexander Usyskin #include <linux/uuid.h>
10*2207e8d4SAlexander Usyskin 
11*2207e8d4SAlexander Usyskin struct issei_device;
12*2207e8d4SAlexander Usyskin struct issei_host_client;
13*2207e8d4SAlexander Usyskin 
14*2207e8d4SAlexander Usyskin /**
15*2207e8d4SAlexander Usyskin  * struct issei_fw_client - represents firmware queue
16*2207e8d4SAlexander Usyskin  * @kobj: associated kobject
17*2207e8d4SAlexander Usyskin  * @list: link in firmware clients list
18*2207e8d4SAlexander Usyskin  * @id: firmware client id
19*2207e8d4SAlexander Usyskin  * @ver: firmware client version
20*2207e8d4SAlexander Usyskin  * @uuid: firmware client protocol id
21*2207e8d4SAlexander Usyskin  * @mtu: firmware client maximum buffer size
22*2207e8d4SAlexander Usyskin  * @flags: firmware client flags
23*2207e8d4SAlexander Usyskin  * @cl: pointer to host client, if connected
24*2207e8d4SAlexander Usyskin  */
25*2207e8d4SAlexander Usyskin struct issei_fw_client {
26*2207e8d4SAlexander Usyskin 	struct kobject kobj;
27*2207e8d4SAlexander Usyskin 	struct list_head list;
28*2207e8d4SAlexander Usyskin 	u16 id;
29*2207e8d4SAlexander Usyskin 	u8 ver;
30*2207e8d4SAlexander Usyskin 	uuid_t uuid;
31*2207e8d4SAlexander Usyskin 	u32 mtu;
32*2207e8d4SAlexander Usyskin 	u32 flags;
33*2207e8d4SAlexander Usyskin 	struct issei_host_client *cl;
34*2207e8d4SAlexander Usyskin };
35*2207e8d4SAlexander Usyskin #define to_issei_fw_client(x) container_of(x, struct issei_fw_client, kobj)
36*2207e8d4SAlexander Usyskin 
37*2207e8d4SAlexander Usyskin struct issei_fw_client *issei_fw_cl_create(struct issei_device *idev, u16 id, u8 ver,
38*2207e8d4SAlexander Usyskin 					   const uuid_t *uuid, u32 mtu, u32 flags);
39*2207e8d4SAlexander Usyskin void issei_fw_cl_remove_all(struct issei_device *idev);
40*2207e8d4SAlexander Usyskin struct issei_fw_client *issei_fw_cl_find_by_uuid(struct issei_device *idev, const uuid_t *uuid);
41*2207e8d4SAlexander Usyskin 
42*2207e8d4SAlexander Usyskin int issei_fw_cl_connect(struct issei_fw_client *fw_cl, struct issei_host_client *cl);
43*2207e8d4SAlexander Usyskin void issei_fw_cl_disconnect(struct issei_fw_client *fw_cl);
44*2207e8d4SAlexander Usyskin 
45*2207e8d4SAlexander Usyskin #endif /* _ISSEI_FW_CLIENT_H_ */
46