Apache/2.4.7 (Ubuntu) Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) safemode : OFF MySQL: ON | Perl: ON | cURL: OFF | WGet: ON > / lib / firmware / carl9170fw / carlfw / include / | server ip : 104.21.89.46 your ip : 172.70.100.14 H O M E |
Filename | /lib/firmware/carl9170fw/carlfw/include/usb.h |
Size | 5.07 kb |
Permission | rw-r--r-- |
Owner | root : root |
Create time | 27-Apr-2025 09:50 |
Last modified | 05-Mar-2014 23:45 |
Last accessed | 07-Jul-2025 08:01 |
Actions | edit | rename | delete | download (gzip) |
View | text | code | image |
/*
* carl9170 firmware - used by the ar9170 wireless device
*
* USB definitions
*
* Copyright (c) 2000-2005 ZyDAS Technology Corporation
* Copyright (c) 2007-2009 Atheros Communications, Inc.
* Copyright 2009 Johannes Berg <[email protected]>
* Copyright 2009-2011 Christian Lamparter <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef __CARL9170FW_USB_H
#define __CARL9170FW_USB_H
#include "config.h"
#include "types.h"
#include "io.h"
#include "hw.h"
#include "ch9.h"
struct ar9170_usb_config {
struct usb_config_descriptor cfg;
struct usb_interface_descriptor intf;
struct usb_endpoint_descriptor ep[AR9170_USB_NUM_EXTRA_EP];
} __packed;
static inline __inline bool usb_detect_highspeed(void)
{
return !!(getb(AR9170_USB_REG_MAIN_CTRL) &
AR9170_USB_MAIN_CTRL_HIGHSPEED);
}
static inline __inline bool usb_configured(void)
{
return !!(getb(AR9170_USB_REG_DEVICE_ADDRESS) &
AR9170_USB_DEVICE_ADDRESS_CONFIGURE);
}
static inline __inline void usb_enable_remote_wakeup(void)
{
orb(AR9170_USB_REG_MAIN_CTRL, AR9170_USB_MAIN_CTRL_REMOTE_WAKEUP);
}
static inline __inline void usb_disable_remote_wakeup(void)
{
andb(AR9170_USB_REG_MAIN_CTRL, ~AR9170_USB_MAIN_CTRL_REMOTE_WAKEUP);
}
static inline __inline void usb_enable_global_int(void)
{
orb(AR9170_USB_REG_MAIN_CTRL, AR9170_USB_MAIN_CTRL_ENABLE_GLOBAL_INT);
}
static inline __inline void usb_trigger_out(void)
{
andb(AR9170_USB_REG_INTR_MASK_BYTE_4,
(uint8_t) ~AR9170_USB_INTR_DISABLE_OUT_INT);
}
static inline __inline void usb_reset_out(void)
{
orb(AR9170_USB_REG_INTR_MASK_BYTE_4, AR9170_USB_INTR_DISABLE_OUT_INT);
}
static inline __inline void usb_trigger_in(void)
{
andb(AR9170_USB_REG_INTR_MASK_BYTE_6, ~AR9170_USB_INTR_DISABLE_IN_INT);
}
static inline __inline void usb_reset_in(void)
{
orb(AR9170_USB_REG_INTR_MASK_BYTE_6, AR9170_USB_INTR_DISABLE_IN_INT);
}
static inline __inline void usb_ep3_xfer_done(void)
{
orb(AR9170_USB_REG_EP3_BYTE_COUNT_HIGH, 0x08);
}
static inline __inline void usb_suspend_ack(void)
{
/*
* uP must do-over everything it should handle
* and do before into the suspend mode
*/
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(2));
}
static inline __inline void usb_resume_ack(void)
{
/*
* uP must do-over everything it should handle
* and do before into the suspend mode
*/
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(3));
}
static inline __inline void usb_reset_ack(void)
{
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(1));
}
static inline __inline void usb_data_out0Byte(void)
{
andb(AR9170_USB_REG_INTR_SOURCE_7, (uint8_t) ~BIT(7));
}
static inline __inline void usb_data_in0Byte(void)
{
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(6));
}
static inline __inline void usb_stop_down_queue(void)
{
andl(AR9170_USB_REG_DMA_CTL, ~AR9170_USB_DMA_CTL_ENABLE_TO_DEVICE);
}
static inline __inline void usb_start_down_queue(void)
{
orl(AR9170_USB_REG_DMA_CTL, AR9170_USB_DMA_CTL_ENABLE_TO_DEVICE);
}
static inline __inline void usb_clear_input_ep_toggle(unsigned int ep)
{
andl(AR9170_USB_REG_EP_IN_MAX_SIZE_HIGH + (ep << 1),
~AR9170_USB_EP_IN_TOGGLE);
}
static inline __inline void usb_set_input_ep_toggle(unsigned int ep)
{
orl(AR9170_USB_REG_EP_IN_MAX_SIZE_HIGH + (ep << 1),
AR9170_USB_EP_IN_TOGGLE);
}
static inline __inline void usb_clear_output_ep_toggle(unsigned int ep)
{
andl(AR9170_USB_REG_EP_OUT_MAX_SIZE_HIGH + (ep << 1),
~AR9170_USB_EP_OUT_TOGGLE);
}
static inline __inline void usb_set_output_ep_toggle(unsigned int ep)
{
orl(AR9170_USB_REG_EP_OUT_MAX_SIZE_HIGH + (ep << 1),
AR9170_USB_EP_OUT_TOGGLE);
}
static inline void usb_structure_check(void)
{
BUILD_BUG_ON(sizeof(struct usb_config_descriptor) != USB_DT_CONFIG_SIZE);
BUILD_BUG_ON(sizeof(struct usb_device_descriptor) != USB_DT_DEVICE_SIZE);
BUILD_BUG_ON(sizeof(struct usb_endpoint_descriptor) != USB_DT_ENDPOINT_SIZE);
BUILD_BUG_ON(sizeof(struct usb_interface_descriptor) != USB_DT_INTERFACE_SIZE);
}
void __noreturn jump_to_bootcode(void);
void send_cmd_to_host(const uint8_t len, const uint8_t type,
const uint8_t ext, const uint8_t *body);
void usb_init(void);
void usb_ep0rx(void);
void usb_ep0tx(void);
void usb_ep0setup(void);
void handle_usb(void);
void usb_timer(void);
void usb_putc(const char c);
void usb_print_hex_dump(const void *buf, int len);
void usb_init_highspeed_fifo_cfg(void);
void usb_init_fullspeed_fifo_cfg(void);
void __noreturn start(void);
void __noreturn reboot(void);
#endif /* __CARL9170FW_USB_H */
* carl9170 firmware - used by the ar9170 wireless device
*
* USB definitions
*
* Copyright (c) 2000-2005 ZyDAS Technology Corporation
* Copyright (c) 2007-2009 Atheros Communications, Inc.
* Copyright 2009 Johannes Berg <[email protected]>
* Copyright 2009-2011 Christian Lamparter <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef __CARL9170FW_USB_H
#define __CARL9170FW_USB_H
#include "config.h"
#include "types.h"
#include "io.h"
#include "hw.h"
#include "ch9.h"
struct ar9170_usb_config {
struct usb_config_descriptor cfg;
struct usb_interface_descriptor intf;
struct usb_endpoint_descriptor ep[AR9170_USB_NUM_EXTRA_EP];
} __packed;
static inline __inline bool usb_detect_highspeed(void)
{
return !!(getb(AR9170_USB_REG_MAIN_CTRL) &
AR9170_USB_MAIN_CTRL_HIGHSPEED);
}
static inline __inline bool usb_configured(void)
{
return !!(getb(AR9170_USB_REG_DEVICE_ADDRESS) &
AR9170_USB_DEVICE_ADDRESS_CONFIGURE);
}
static inline __inline void usb_enable_remote_wakeup(void)
{
orb(AR9170_USB_REG_MAIN_CTRL, AR9170_USB_MAIN_CTRL_REMOTE_WAKEUP);
}
static inline __inline void usb_disable_remote_wakeup(void)
{
andb(AR9170_USB_REG_MAIN_CTRL, ~AR9170_USB_MAIN_CTRL_REMOTE_WAKEUP);
}
static inline __inline void usb_enable_global_int(void)
{
orb(AR9170_USB_REG_MAIN_CTRL, AR9170_USB_MAIN_CTRL_ENABLE_GLOBAL_INT);
}
static inline __inline void usb_trigger_out(void)
{
andb(AR9170_USB_REG_INTR_MASK_BYTE_4,
(uint8_t) ~AR9170_USB_INTR_DISABLE_OUT_INT);
}
static inline __inline void usb_reset_out(void)
{
orb(AR9170_USB_REG_INTR_MASK_BYTE_4, AR9170_USB_INTR_DISABLE_OUT_INT);
}
static inline __inline void usb_trigger_in(void)
{
andb(AR9170_USB_REG_INTR_MASK_BYTE_6, ~AR9170_USB_INTR_DISABLE_IN_INT);
}
static inline __inline void usb_reset_in(void)
{
orb(AR9170_USB_REG_INTR_MASK_BYTE_6, AR9170_USB_INTR_DISABLE_IN_INT);
}
static inline __inline void usb_ep3_xfer_done(void)
{
orb(AR9170_USB_REG_EP3_BYTE_COUNT_HIGH, 0x08);
}
static inline __inline void usb_suspend_ack(void)
{
/*
* uP must do-over everything it should handle
* and do before into the suspend mode
*/
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(2));
}
static inline __inline void usb_resume_ack(void)
{
/*
* uP must do-over everything it should handle
* and do before into the suspend mode
*/
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(3));
}
static inline __inline void usb_reset_ack(void)
{
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(1));
}
static inline __inline void usb_data_out0Byte(void)
{
andb(AR9170_USB_REG_INTR_SOURCE_7, (uint8_t) ~BIT(7));
}
static inline __inline void usb_data_in0Byte(void)
{
andb(AR9170_USB_REG_INTR_SOURCE_7, ~BIT(6));
}
static inline __inline void usb_stop_down_queue(void)
{
andl(AR9170_USB_REG_DMA_CTL, ~AR9170_USB_DMA_CTL_ENABLE_TO_DEVICE);
}
static inline __inline void usb_start_down_queue(void)
{
orl(AR9170_USB_REG_DMA_CTL, AR9170_USB_DMA_CTL_ENABLE_TO_DEVICE);
}
static inline __inline void usb_clear_input_ep_toggle(unsigned int ep)
{
andl(AR9170_USB_REG_EP_IN_MAX_SIZE_HIGH + (ep << 1),
~AR9170_USB_EP_IN_TOGGLE);
}
static inline __inline void usb_set_input_ep_toggle(unsigned int ep)
{
orl(AR9170_USB_REG_EP_IN_MAX_SIZE_HIGH + (ep << 1),
AR9170_USB_EP_IN_TOGGLE);
}
static inline __inline void usb_clear_output_ep_toggle(unsigned int ep)
{
andl(AR9170_USB_REG_EP_OUT_MAX_SIZE_HIGH + (ep << 1),
~AR9170_USB_EP_OUT_TOGGLE);
}
static inline __inline void usb_set_output_ep_toggle(unsigned int ep)
{
orl(AR9170_USB_REG_EP_OUT_MAX_SIZE_HIGH + (ep << 1),
AR9170_USB_EP_OUT_TOGGLE);
}
static inline void usb_structure_check(void)
{
BUILD_BUG_ON(sizeof(struct usb_config_descriptor) != USB_DT_CONFIG_SIZE);
BUILD_BUG_ON(sizeof(struct usb_device_descriptor) != USB_DT_DEVICE_SIZE);
BUILD_BUG_ON(sizeof(struct usb_endpoint_descriptor) != USB_DT_ENDPOINT_SIZE);
BUILD_BUG_ON(sizeof(struct usb_interface_descriptor) != USB_DT_INTERFACE_SIZE);
}
void __noreturn jump_to_bootcode(void);
void send_cmd_to_host(const uint8_t len, const uint8_t type,
const uint8_t ext, const uint8_t *body);
void usb_init(void);
void usb_ep0rx(void);
void usb_ep0tx(void);
void usb_ep0setup(void);
void handle_usb(void);
void usb_timer(void);
void usb_putc(const char c);
void usb_print_hex_dump(const void *buf, int len);
void usb_init_highspeed_fifo_cfg(void);
void usb_init_fullspeed_fifo_cfg(void);
void __noreturn start(void);
void __noreturn reboot(void);
#endif /* __CARL9170FW_USB_H */