* adding network config for olpc
[openwrt/svn-archive/archive.git] / package / libertas / src / if_usb.h
diff --git a/package/libertas/src/if_usb.h b/package/libertas/src/if_usb.h
new file mode 100644 (file)
index 0000000..668410f
--- /dev/null
@@ -0,0 +1,108 @@
+#ifndef _LBS_IF_USB_H
+#define _LBS_IF_USB_H
+
+#include <linux/wait.h>
+#include <linux/timer.h>
+
+struct lbs_private;
+
+/**
+  * This file contains definition for USB interface.
+  */
+#define CMD_TYPE_REQUEST                0xF00DFACE
+#define CMD_TYPE_DATA                   0xBEADC0DE
+#define CMD_TYPE_INDICATION             0xBEEFFACE
+
+#define IPFIELD_ALIGN_OFFSET   2
+
+#define BOOT_CMD_FW_BY_USB     0x01
+#define BOOT_CMD_FW_IN_EEPROM  0x02
+#define BOOT_CMD_UPDATE_BOOT2  0x03
+#define BOOT_CMD_UPDATE_FW     0x04
+#define BOOT_CMD_MAGIC_NUMBER  0x4C56524D   /* M=>0x4D,R=>0x52,V=>0x56,L=>0x4C */
+
+struct bootcmdstr
+{
+       __le32 u32magicnumber;
+       u8  u8cmd_tag;
+       u8  au8dumy[11];
+};
+
+#define BOOT_CMD_RESP_OK     0x0001
+#define BOOT_CMD_RESP_FAIL   0x0000
+
+struct bootcmdrespStr
+{
+       __le32 u32magicnumber;
+       u8  u8cmd_tag;
+       u8  u8result;
+       u8  au8dumy[2];
+};
+
+/* read callback private data */
+struct read_cb_info {
+        struct usb_card_rec *cardp;
+        struct sk_buff *skb;
+};
+
+/** USB card description structure*/
+struct usb_card_rec {
+       struct usb_device *udev;
+       struct urb *rx_urb, *tx_urb;
+       struct lbs_private *priv;
+       struct read_cb_info rinfo;
+
+       int bulk_in_size;
+       u8 bulk_in_endpointAddr;
+
+       u8 *bulk_out_buffer;
+       int bulk_out_size;
+       u8 bulk_out_endpointAddr;
+
+       const struct firmware *fw;
+       struct timer_list fw_timeout;
+       wait_queue_head_t fw_wq;
+       u8 CRC_OK;
+       u32 fwseqnum;
+       u32 lastseqnum;
+       u32 totalbytes;
+       u32 fwlastblksent;
+       u8 fwdnldover;
+       u8 fwfinalblk;
+       u8 surprise_removed;
+
+       u32 usb_event_cause;
+       u8 usb_int_cause;
+
+       s8 bootcmdresp;
+};
+
+/** fwheader */
+struct fwheader {
+       __le32 dnldcmd;
+       __le32 baseaddr;
+       __le32 datalength;
+       __le32 CRC;
+};
+
+#define FW_MAX_DATA_BLK_SIZE   600
+/** FWData */
+struct FWData {
+       struct fwheader fwheader;
+       __le32 seqnum;
+       u8 data[FW_MAX_DATA_BLK_SIZE];
+};
+
+/** fwsyncheader */
+struct fwsyncheader {
+       __le32 cmd;
+       __le32 seqnum;
+};
+
+#define FW_HAS_DATA_TO_RECV            0x00000001
+#define FW_HAS_LAST_BLOCK              0x00000004
+
+#define FW_DATA_XMIT_SIZE \
+       sizeof(struct fwheader) + le32_to_cpu(fwdata->fwheader.datalength) + sizeof(u32)
+
+#endif