work in progress of usb controller and usb stack for omap3
diff --git a/include/dev/usb.h b/include/dev/usb.h
new file mode 100644
index 0000000..556a4ed
--- /dev/null
+++ b/include/dev/usb.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2008 Travis Geiselbrecht
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#ifndef __DEV_USB_H
+#define __DEV_USB_H
+
+/* device side usb stack api */
+
+void usb_init(void);
+
+#endif
+
diff --git a/include/dev/usbc.h b/include/dev/usbc.h
new file mode 100644
index 0000000..26c1945
--- /dev/null
+++ b/include/dev/usbc.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2008 Travis Geiselbrecht
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#ifndef __DEV_USBC_H
+#define __DEV_USBC_H
+
+/* device side usb controller api (used by the usb stack) */
+void usbc_init(void);
+
+#endif
+
diff --git a/include/hw/usb.h b/include/hw/usb.h
new file mode 100644
index 0000000..a533b7b
--- /dev/null
+++ b/include/hw/usb.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2008 Travis Geiselbrecht
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#ifndef __HW_USB_H
+#define __HW_USB_H
+
+#include <sys/types.h>
+#include <compiler.h>
+
+/* GLOBAL STATUS VALUES */
+#define STD_COMMAND 0x00
+#define SETUP_COMMAND_PHASE 0x40
+#define FUNCTION_ERROR 0x7F /* Used when we are stalling the function EP0 */
+#define HUB_ERROR 0xFF /* Used when we are stalling the HUB EP0 */
+
+/* Request Types */
+#define DIR_OUT (0 << 7)
+#define DIR_IN (1 << 7)
+#define DIR_MASK (1 << 7)
+#define TYPE_STANDARD (0 << 5)
+#define TYPE_CLASS (1 << 5)
+#define TYPE_VENDOR (2 << 5)
+#define TYPE_MASK (3 << 5)
+#define RECIP_DEVICE (0 << 0)
+#define RECIP_INTERFACE (1 << 0)
+#define RECIP_ENDPOINT (2 << 0)
+#define RECIP_OTHER (3 << 0)
+#define RECIP_MASK (0x1f << 0)
+
+/* 1.0 Request Values */
+#define GET_STATUS 0x00
+#define CLEAR_FEATURE 0x01
+#define SET_FEATURE 0x03
+#define SET_ADDRESS 0x05
+#define GET_DESCRIPTOR 0x06
+#define SET_DESCRIPTOR 0x07
+#define GET_CONFIGURATION 0x08
+#define SET_CONFIGURATION 0x09
+#define GET_INTERFACE 0x0A
+#define SET_INTERFACE 0x0B
+#define SYNCH_FRAME 0x0C
+
+/* Mass storage requests */
+#define MASS_STORAGE_GET_MAX_LUN 0xfe
+#define MASS_STORAGE_RESET 0xff
+
+/* DFU requests */
+#define DFU_DETACH 0x00
+#define DFU_DNLOAD 0x01
+#define DFU_UPLOAD 0x02
+#define DFU_GETSTATUS 0x03
+#define DFU_CLRSTATUS 0x04
+#define DFU_GETSTATE 0x05
+#define DFU_ABORT 0x06
+
+/* HID Request Values */
+#define GET_REPORT 0x01
+#define GET_IDLE 0x02
+#define GET_PROTOCOL 0x03
+#define SET_REPORT 0x09
+#define SET_IDLE 0x0A
+#define SET_PROTOCOL 0x0B
+
+/* Descriptor Types */
+#define DEVICE 0x01
+#define CONFIGURATION 0x02
+#define STRING 0x03
+#define INTERFACE 0x04
+#define ENDPOINT 0x05
+#define DEVICE_QUALIFIER 0x06
+#define OTHER_SPEED_CONFIGURATION 0x07
+#define INTERFACE_POWER 0x08
+#define HID 0x21
+#define HIDREPORT 0x22
+#define HIDPHYSICAL 0x23
+
+/* general USB defines */
+struct usb_setup {
+ uint8_t request_type;
+ uint8_t request;
+ uint16_t value;
+ uint16_t index;
+ uint16_t length;
+} __PACKED;
+
+#endif
+
diff --git a/include/reg.h b/include/reg.h
index e10a3e8..d04d4ea 100644
--- a/include/reg.h
+++ b/include/reg.h
@@ -31,6 +31,11 @@
#define REG16(addr) ((volatile uint16_t *)(addr))
#define REG8(addr) ((volatile uint8_t *)(addr))
+#define RMWREG64(addr, startbit, width, val) *REG64(addr) = (*REG64(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+#define RMWREG32(addr, startbit, width, val) *REG32(addr) = (*REG32(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+#define RMWREG16(addr, startbit, width, val) *REG16(addr) = (*REG16(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+#define RMWREG8(addr, startbit, width, val) *REG8(addr) = (*REG8(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+
#define writel(v, a) (*REG32(a) = (v))
#define readl(a) (*REG32(a))