xref: /linux-6.15/include/linux/maple.h (revision d69d8048)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
217be2d2bSAdrian McMenamin #ifndef __LINUX_MAPLE_H
317be2d2bSAdrian McMenamin #define __LINUX_MAPLE_H
417be2d2bSAdrian McMenamin 
51795cf48SAdrian McMenamin #include <mach/maple.h>
617be2d2bSAdrian McMenamin 
7313162d0SPaul Gortmaker struct device;
817be2d2bSAdrian McMenamin 
917be2d2bSAdrian McMenamin /* Maple Bus command and response codes */
1017be2d2bSAdrian McMenamin enum maple_code {
1117be2d2bSAdrian McMenamin 	MAPLE_RESPONSE_FILEERR =	-5,
12b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_AGAIN,	/* retransmit */
13b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_BADCMD,
14b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_BADFUNC,
15b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_NONE,	/* unit didn't respond*/
1617be2d2bSAdrian McMenamin 	MAPLE_COMMAND_DEVINFO =		1,
17b233b28eSAdrian McMenamin 	MAPLE_COMMAND_ALLINFO,
18b233b28eSAdrian McMenamin 	MAPLE_COMMAND_RESET,
19b233b28eSAdrian McMenamin 	MAPLE_COMMAND_KILL,
20b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_DEVINFO,
21b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_ALLINFO,
22b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_OK,
23b233b28eSAdrian McMenamin 	MAPLE_RESPONSE_DATATRF,
24b233b28eSAdrian McMenamin 	MAPLE_COMMAND_GETCOND,
25b233b28eSAdrian McMenamin 	MAPLE_COMMAND_GETMINFO,
26b233b28eSAdrian McMenamin 	MAPLE_COMMAND_BREAD,
27b233b28eSAdrian McMenamin 	MAPLE_COMMAND_BWRITE,
28b233b28eSAdrian McMenamin 	MAPLE_COMMAND_BSYNC,
29b233b28eSAdrian McMenamin 	MAPLE_COMMAND_SETCOND,
30b233b28eSAdrian McMenamin 	MAPLE_COMMAND_MICCONTROL
31b233b28eSAdrian McMenamin };
32b233b28eSAdrian McMenamin 
33b233b28eSAdrian McMenamin enum maple_file_errors {
34b233b28eSAdrian McMenamin 	MAPLE_FILEERR_INVALID_PARTITION =	0x01000000,
35b233b28eSAdrian McMenamin 	MAPLE_FILEERR_PHASE_ERROR =		0x02000000,
36b233b28eSAdrian McMenamin 	MAPLE_FILEERR_INVALID_BLOCK =		0x04000000,
37b233b28eSAdrian McMenamin 	MAPLE_FILEERR_WRITE_ERROR =		0x08000000,
38b233b28eSAdrian McMenamin 	MAPLE_FILEERR_INVALID_WRITE_LENGTH =	0x10000000,
39b233b28eSAdrian McMenamin 	MAPLE_FILEERR_BAD_CRC = 		0x20000000
40b233b28eSAdrian McMenamin };
41b233b28eSAdrian McMenamin 
42b233b28eSAdrian McMenamin struct maple_buffer {
43b233b28eSAdrian McMenamin 	char bufx[0x400];
44b233b28eSAdrian McMenamin 	void *buf;
4517be2d2bSAdrian McMenamin };
4617be2d2bSAdrian McMenamin 
4717be2d2bSAdrian McMenamin struct mapleq {
4817be2d2bSAdrian McMenamin 	struct list_head list;
4917be2d2bSAdrian McMenamin 	struct maple_device *dev;
50b233b28eSAdrian McMenamin 	struct maple_buffer *recvbuf;
51b233b28eSAdrian McMenamin 	void *sendbuf, *recvbuf_p2;
5217be2d2bSAdrian McMenamin 	unsigned char length;
5317be2d2bSAdrian McMenamin 	enum maple_code command;
5417be2d2bSAdrian McMenamin };
5517be2d2bSAdrian McMenamin 
5617be2d2bSAdrian McMenamin struct maple_devinfo {
5717be2d2bSAdrian McMenamin 	unsigned long function;
5817be2d2bSAdrian McMenamin 	unsigned long function_data[3];
5917be2d2bSAdrian McMenamin 	unsigned char area_code;
605c8f82c6SPaul Mundt 	unsigned char connector_direction;
6117be2d2bSAdrian McMenamin 	char product_name[31];
6217be2d2bSAdrian McMenamin 	char product_licence[61];
6317be2d2bSAdrian McMenamin 	unsigned short standby_power;
6417be2d2bSAdrian McMenamin 	unsigned short max_power;
6517be2d2bSAdrian McMenamin };
6617be2d2bSAdrian McMenamin 
6717be2d2bSAdrian McMenamin struct maple_device {
6817be2d2bSAdrian McMenamin 	struct maple_driver *driver;
6917be2d2bSAdrian McMenamin 	struct mapleq *mq;
7017be2d2bSAdrian McMenamin 	void (*callback) (struct mapleq * mq);
71b233b28eSAdrian McMenamin 	void (*fileerr_handler)(struct maple_device *mdev, void *recvbuf);
72b233b28eSAdrian McMenamin 	int (*can_unload)(struct maple_device *mdev);
7317be2d2bSAdrian McMenamin 	unsigned long when, interval, function;
7417be2d2bSAdrian McMenamin 	struct maple_devinfo devinfo;
7517be2d2bSAdrian McMenamin 	unsigned char port, unit;
7617be2d2bSAdrian McMenamin 	char product_name[32];
7717be2d2bSAdrian McMenamin 	char product_licence[64];
78b233b28eSAdrian McMenamin 	atomic_t busy;
79b233b28eSAdrian McMenamin 	wait_queue_head_t maple_wait;
8017be2d2bSAdrian McMenamin 	struct device dev;
8117be2d2bSAdrian McMenamin };
8217be2d2bSAdrian McMenamin 
8317be2d2bSAdrian McMenamin struct maple_driver {
8417be2d2bSAdrian McMenamin 	unsigned long function;
8517be2d2bSAdrian McMenamin 	struct device_driver drv;
8617be2d2bSAdrian McMenamin };
8717be2d2bSAdrian McMenamin 
8817be2d2bSAdrian McMenamin void maple_getcond_callback(struct maple_device *dev,
8917be2d2bSAdrian McMenamin 			    void (*callback) (struct mapleq * mq),
9017be2d2bSAdrian McMenamin 			    unsigned long interval,
9117be2d2bSAdrian McMenamin 			    unsigned long function);
9263870295SPaul Mundt int maple_driver_register(struct maple_driver *);
9363870295SPaul Mundt void maple_driver_unregister(struct maple_driver *);
9463870295SPaul Mundt 
95b233b28eSAdrian McMenamin int maple_add_packet(struct maple_device *mdev, u32 function,
961795cf48SAdrian McMenamin 	u32 command, u32 length, void *data);
971795cf48SAdrian McMenamin void maple_clear_dev(struct maple_device *mdev);
9817be2d2bSAdrian McMenamin 
9917be2d2bSAdrian McMenamin #define to_maple_dev(n) container_of(n, struct maple_device, dev)
100*d69d8048SGreg Kroah-Hartman #define to_maple_driver(n) container_of_const(n, struct maple_driver, drv)
10117be2d2bSAdrian McMenamin 
10261787063SPaul Mundt #define maple_get_drvdata(d)		dev_get_drvdata(&(d)->dev)
10361787063SPaul Mundt #define maple_set_drvdata(d,p)		dev_set_drvdata(&(d)->dev, (p))
10461787063SPaul Mundt 
10517be2d2bSAdrian McMenamin #endif				/* __LINUX_MAPLE_H */
106