#include "hiusb.h"
#include "ctrl.h"
static inline int _hcd_set_addr(struct hiusb_hcd *hcd, unsigned int addr)
{
int old;
old = hiusb_readb(hcd, HIUSB_COMMON_FADDR);
hiusb_writeb(hcd, addr & HIUSB_COMMON_FADDR_MASK, HIUSB_COMMON_FADDR);
return old;
}
int hiusb_hcd_set_addr(struct hiusb_hcd *hcd, unsigned int addr)
{
int old;
device_lock(hcd);
old = _hcd_set_addr(hcd, addr);
device_unlock(hcd);
return old;
}
int hiusb_hcd_get_addr(struct hiusb_hcd *hcd)
{
int addr;
device_lock(hcd);
addr = hiusb_readb(hcd, HIUSB_COMMON_FADDR);
device_unlock(hcd);
return addr;
}
int hiusb_hcd_read_power(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_POWER);
device_unlock(hcd);
return old;
}
int hiusb_hcd_enable_highspeed_mode(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_POWER);
hiusb_writeb(hcd, old | BIT_COMM_POWER_HIGHSPEED_EN, HIUSB_COMMON_POWER);
device_unlock(hcd);
return old & BIT_COMM_POWER_HIGHSPEED_EN;
}
int hiusb_hcd_disable_highspeed_mode(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_POWER);
hiusb_writeb(hcd, old & (~BIT_COMM_POWER_HIGHSPEED_EN), HIUSB_COMMON_POWER);
device_unlock(hcd);
return old & BIT_COMM_POWER_HIGHSPEED_EN;
}
int hiusb_hcd_read_highspeed_mode(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_POWER);
device_unlock(hcd);
return old & BIT_COMM_POWER_HIGHSPEED_MODE;
}
int hiusb_hcd_send_reset_signal(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_POWER);
hiusb_writeb(hcd, old | BIT_COMM_POWER_RESET, HIUSB_COMMON_POWER);
device_unlock(hcd);
return old & BIT_COMM_POWER_RESET;
}
int hiusb_hcd_clear_reset_signal(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_POWER);
hiusb_writeb(hcd, old & (~BIT_COMM_POWER_RESET), HIUSB_COMMON_POWER);
device_unlock(hcd);
return old & BIT_COMM_POWER_RESET;
}
int hiusb_hcd_read_clear_intrtx(struct hiusb_hcd *hcd)
{
int status;
device_lock(hcd);
status = hiusb_readw(hcd, HIUSB_COMMON_INTRTX);
status &= hcd->intrtx_mask;
device_unlock(hcd);
return status;
}
int hiusb_hcd_read_clear_intrrx(struct hiusb_hcd *hcd)
{
int status;
device_lock(hcd);
status = hiusb_readw(hcd, HIUSB_COMMON_INTRRX);
status &= hcd->intrrx_mask;
device_unlock(hcd);
return status;
}
int hiusb_hcd_read_clear_intrusb(struct hiusb_hcd *hcd)
{
int status;
device_lock(hcd);
status = hiusb_readb(hcd, HIUSB_COMMON_INTRUSB);
status &= hcd->intrusb_mask;
device_unlock(hcd);
return status;
}
int hiusb_hcd_read_clear_intrdma(struct hiusb_hcd *hcd)
{
int status;
device_lock(hcd);
status = hiusb_readb(hcd, HIUSB_HCD_DMA_INTR);
device_unlock(hcd);
return status;
}
int hiusb_hcd_enable_intrtx(struct hiusb_hcd *hcd, unsigned int irqs)
{
int old;
device_lock(hcd);
old = hiusb_readw(hcd, HIUSB_COMMON_INTRTX_EN);
hiusb_writew(hcd, old | irqs, HIUSB_COMMON_INTRTX_EN);
hcd->intrtx_mask |= irqs;
device_unlock(hcd);
return old;
}
int hiusb_hcd_enable_intrrx(struct hiusb_hcd *hcd, unsigned int irqs)
{
int old;
device_lock(hcd);
old = hiusb_readw(hcd, HIUSB_COMMON_INTRRX_EN);
hiusb_writew(hcd, old | irqs, HIUSB_COMMON_INTRRX_EN);
hcd->intrrx_mask |= irqs;
device_unlock(hcd);
return old;
}
int hiusb_hcd_enable_intrusb(struct hiusb_hcd *hcd, unsigned int irqs)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_INTRUSB_EN);
hiusb_writeb(hcd, old | irqs, HIUSB_COMMON_INTRUSB_EN);
hcd->intrusb_mask |= irqs;
device_unlock(hcd);
return old;
}
int hiusb_hcd_enable_intrdma(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readw(hcd, HIUSB_HCD_DMA_CNTL);
hiusb_writew(hcd, old | BIT_HCD_DMA_CNTL_INTR_EN, HIUSB_HCD_DMA_CNTL);
device_unlock(hcd);
return old;
}
int hiusb_hcd_disable_intrtx(struct hiusb_hcd *hcd, unsigned int irqs)
{
int old;
device_lock(hcd);
old = hiusb_readw(hcd, HIUSB_COMMON_INTRTX_EN);
hiusb_writew(hcd, old & (~irqs), HIUSB_COMMON_INTRTX_EN);
hcd->intrtx_mask &= ~irqs;
device_unlock(hcd);
return old;
}
int hiusb_hcd_disable_intrrx(struct hiusb_hcd *hcd, unsigned int irqs)
{
int old;
device_lock(hcd);
old = hiusb_readw(hcd, HIUSB_COMMON_INTRRX_EN);
hiusb_writew(hcd, old & (~irqs), HIUSB_COMMON_INTRRX_EN);
hcd->intrrx_mask &= ~irqs;
device_unlock(hcd);
return old;
}
int hiusb_hcd_disable_intrusb(struct hiusb_hcd *hcd, unsigned int irqs)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_INTRUSB_EN);
hiusb_writeb(hcd, old & (~irqs), HIUSB_COMMON_INTRUSB_EN);
hcd->intrusb_mask &= ~irqs;
device_unlock(hcd);
return old;
}
int hiusb_hcd_disable_intrdma(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readw(hcd, HIUSB_HCD_DMA_CNTL);
hiusb_writew(hcd, old & (~BIT_HCD_DMA_CNTL_INTR_EN), HIUSB_HCD_DMA_CNTL);
device_unlock(hcd);
return old;
}
int hiusb_hcd_read_frame(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readw(hcd, HIUSB_COMMON_FRAME_NUM) & HIUSB_COMMON_FRAME_NUM_MASK;
device_unlock(hcd);
return old;
}
static inline int _hcd_set_reg_fifo_index(struct hiusb_hcd *hcd, unsigned int index)
{
int old;
old = hiusb_readb(hcd, HIUSB_COMMON_REG_FIFO_INDEX) & HIUSB_COMMON_REG_FIFO_INDEX_MASK;
hiusb_writeb(hcd, index & HIUSB_COMMON_REG_FIFO_INDEX_MASK, HIUSB_COMMON_REG_FIFO_INDEX);
return old;
}
int hiusb_hcd_set_reg_fifo_index(struct hiusb_hcd *hcd, unsigned int index)
{
int old;
device_lock(hcd);
old = _hcd_set_reg_fifo_index(hcd, index);
device_unlock(hcd);
return old;
}
int _hcd_get_reg_fifo_index(struct hiusb_hcd *hcd)
{
int old;
old = hiusb_readb(hcd, HIUSB_COMMON_REG_FIFO_INDEX) & HIUSB_COMMON_REG_FIFO_INDEX_MASK;
return old;
}
int hiusb_hcd_get_reg_fifo_index(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = _hcd_get_reg_fifo_index(hcd);
device_unlock(hcd);
return old;
}
static inline int _hcd_get_fifo_size_rx(struct hiusb_hcd *hcd, unsigned int index)
{
int res;
_hcd_set_reg_fifo_index(hcd, index);
res = hiusb_readb(hcd, HIUSB_HCD_FIFO_SIZE) & BITS_HCD_FIFO_SIZE_RX_MASK;
return 1<<(res>>4);
}
static inline int _hcd_get_fifo_size_tx(struct hiusb_hcd *hcd, unsigned int index)
{
int res;
_hcd_set_reg_fifo_index(hcd, index);
res = hiusb_readb(hcd, HIUSB_HCD_FIFO_SIZE) & BITS_HCD_FIFO_SIZE_TX_MASK;
return 1<<res;
}
int hiusb_hcd_get_fifo_size_tx(struct hiusb_hcd *hcd, unsigned int index)
{
int tx_sz;
device_lock(hcd);
tx_sz = _hcd_get_fifo_size_tx(hcd, index);
device_unlock(hcd);
return tx_sz;
}
int hiusb_hcd_get_fifo_size_rx(struct hiusb_hcd *hcd, unsigned int index)
{
int rx_sz;
device_lock(hcd);
rx_sz = _hcd_get_fifo_size_rx(hcd, index);
device_unlock(hcd);
return rx_sz;
}
int hiusb_hcd_read_devctl(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_DEVCTL);
device_unlock(hcd);
return old;
}
int hiusb_hcd_set_session(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_DEVCTL);
hiusb_writeb(hcd, old | BIT_COMM_DEVCTL_SESSION, HIUSB_COMMON_DEVCTL);
device_unlock(hcd);
return old & BIT_COMM_DEVCTL_SESSION;
}
int hiusb_hcd_clear_session(struct hiusb_hcd *hcd)
{
int old;
device_lock(hcd);
old = hiusb_readb(hcd, HIUSB_COMMON_DEVCTL);
hiusb_writeb(hcd, old & (~BIT_COMM_DEVCTL_SESSION), HIUSB_COMMON_DEVCTL);
device_unlock(hcd);
return old & BIT_COMM_DEVCTL_SESSION;
}
int hiusb_hcd_get_vbus_level(struct hiusb_hcd *hcd)
{
/* do not need hold lock */
int devctl = hiusb_readb(hcd, HIUSB_COMMON_DEVCTL);
return (devctl>>OFFSET_BIT_COMM_DEVCTL_VBUS) & MASK_BIT_COMM_DEVCTL_VBUS;
}
int hiusb_hcd_ctrlpipe_set_nak_limit(struct hiusb_hcd *hcd,
unsigned int naklimit)
{
int old;
device_lock(hcd);
_hcd_set_reg_fif
usb_otg.tar.gz_OTG驱动_otg_otg 驱动_usb otg驱动下载_usb_otg.tar
版权申诉
5星 · 超过95%的资源 96 浏览量
2022-09-20
18:33:23
上传
评论
收藏 24KB GZ 举报
寒泊
- 粉丝: 74
- 资源: 1万+
最新资源
- Qt开发知识、经验总结 包括Qss,数据库,Excel,Model/View等
- IV数据.xlsx
- 一些深度学习中的小例子,适合新手学习使用
- foldcraftlauncher_262944.apk
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论2