diff options
Diffstat (limited to 'openpcd/firmware/src/dfu.h')
-rw-r--r-- | openpcd/firmware/src/dfu.h | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/openpcd/firmware/src/dfu.h b/openpcd/firmware/src/dfu.h index 4372043..a663688 100644 --- a/openpcd/firmware/src/dfu.h +++ b/openpcd/firmware/src/dfu.h @@ -38,9 +38,25 @@ .iInterface = 1, \ } +#define __dfufunc __attribute__ ((long_call, section (".dfu.func"))) +#define __dfustruct __attribute__ ((section (".dfu.struct"))) const +#define __dfufunctab __attribute__ ((section (".dfu.functab"))) + +#if 0 +extern void __dfufunc udp_ep0_send_data(const char *data, u_int32_t length); +extern void __dfufunc udp_ep0_send_zlp(void); +extern void __dfufunc udp_ep0_send_stall(void); +extern __dfustruct struct usb_device_descriptor dfu_dev_descriptor; +extern __dfustruct struct _dfu_desc dfu_cfg_descriptor; +extern void dfu_switch(void); +extern int __dfufunc dfu_ep0_handler(u_int8_t req_type, u_int8_t req, + u_int16_t val, u_int16_t len); +extern static u_int8_t dfu_state; struct udp_pcd; +#endif -extern struct usb_device_descriptor dfu_dev_descriptor; + +extern void udp_init(void); struct _dfu_desc { struct usb_config_descriptor ucfg; @@ -48,12 +64,17 @@ struct _dfu_desc { struct usb_dfu_func_descriptor func_dfu; }; -extern struct _dfu_desc dfu_cfg_descriptor; - -extern void dfu_switch(void); -extern int __ramfunc dfu_ep0_handler(u_int8_t req_type, u_int8_t req, +struct dfuapi { + void (*ep0_send_data)(const char *data, u_int32_t len); + void (*ep0_send_zlp)(void); + void (*ep0_send_stall)(void); + int (*dfu_ep0_handler)(u_int8_t req_type, u_int8_t req, u_int16_t val, u_int16_t len); + void (*dfu_switch)(void); + u_int8_t *dfu_state; + struct usb_device_descriptor *dfu_dev_descriptor; + struct _dfu_desc *dfu_cfg_descriptor; +}; + -extern enum dfu_state dfu_state; - #endif /* _DFU_H */ |