summaryrefslogtreecommitdiff
path: root/openpcd/firmware/src/dfu.h
diff options
context:
space:
mode:
Diffstat (limited to 'openpcd/firmware/src/dfu.h')
-rw-r--r--openpcd/firmware/src/dfu.h35
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 */
personal git repositories of Harald Welte. Your mileage may vary