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