0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #define _HCI_OPS_C_
0018
0019 #include "osdep_service.h"
0020 #include "drv_types.h"
0021 #include "osdep_intf.h"
0022 #include "usb_ops.h"
0023 #include "recv_osdep.h"
0024
0025 static u8 usb_read8(struct intf_hdl *intfhdl, u32 addr)
0026 {
0027 u8 request;
0028 u8 requesttype;
0029 u16 wvalue;
0030 u16 index;
0031 u16 len;
0032 int status;
0033 __le32 data = 0;
0034 struct intf_priv *intfpriv = intfhdl->pintfpriv;
0035
0036 request = 0x05;
0037 requesttype = 0x01;
0038 index = 0;
0039 wvalue = (u16)(addr & 0x0000ffff);
0040 len = 1;
0041 status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index,
0042 &data, len, requesttype);
0043 if (status < 0)
0044 return 0;
0045 return (u8)(le32_to_cpu(data) & 0x0ff);
0046 }
0047
0048 static u16 usb_read16(struct intf_hdl *intfhdl, u32 addr)
0049 {
0050 u8 request;
0051 u8 requesttype;
0052 u16 wvalue;
0053 u16 index;
0054 u16 len;
0055 int status;
0056 __le32 data = 0;
0057 struct intf_priv *intfpriv = intfhdl->pintfpriv;
0058
0059 request = 0x05;
0060 requesttype = 0x01;
0061 index = 0;
0062 wvalue = (u16)(addr & 0x0000ffff);
0063 len = 2;
0064 status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index,
0065 &data, len, requesttype);
0066 if (status < 0)
0067 return 0;
0068 return (u16)(le32_to_cpu(data) & 0xffff);
0069 }
0070
0071 static u32 usb_read32(struct intf_hdl *intfhdl, u32 addr)
0072 {
0073 u8 request;
0074 u8 requesttype;
0075 u16 wvalue;
0076 u16 index;
0077 u16 len;
0078 int status;
0079 __le32 data = 0;
0080 struct intf_priv *intfpriv = intfhdl->pintfpriv;
0081
0082 request = 0x05;
0083 requesttype = 0x01;
0084 index = 0;
0085 wvalue = (u16)(addr & 0x0000ffff);
0086 len = 4;
0087 status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index,
0088 &data, len, requesttype);
0089 if (status < 0)
0090 return 0;
0091 return le32_to_cpu(data);
0092 }
0093
0094 static void usb_write8(struct intf_hdl *intfhdl, u32 addr, u8 val)
0095 {
0096 u8 request;
0097 u8 requesttype;
0098 u16 wvalue;
0099 u16 index;
0100 u16 len;
0101 __le32 data;
0102 struct intf_priv *intfpriv = intfhdl->pintfpriv;
0103
0104 request = 0x05;
0105 requesttype = 0x00;
0106 index = 0;
0107 wvalue = (u16)(addr & 0x0000ffff);
0108 len = 1;
0109 data = cpu_to_le32((u32)val & 0x000000ff);
0110 r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len,
0111 requesttype);
0112 }
0113
0114 static void usb_write16(struct intf_hdl *intfhdl, u32 addr, u16 val)
0115 {
0116 u8 request;
0117 u8 requesttype;
0118 u16 wvalue;
0119 u16 index;
0120 u16 len;
0121 __le32 data;
0122 struct intf_priv *intfpriv = intfhdl->pintfpriv;
0123
0124 request = 0x05;
0125 requesttype = 0x00;
0126 index = 0;
0127 wvalue = (u16)(addr & 0x0000ffff);
0128 len = 2;
0129 data = cpu_to_le32((u32)val & 0x0000ffff);
0130 r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len,
0131 requesttype);
0132 }
0133
0134 static void usb_write32(struct intf_hdl *intfhdl, u32 addr, u32 val)
0135 {
0136 u8 request;
0137 u8 requesttype;
0138 u16 wvalue;
0139 u16 index;
0140 u16 len;
0141 __le32 data;
0142 struct intf_priv *intfpriv = intfhdl->pintfpriv;
0143
0144 request = 0x05;
0145 requesttype = 0x00;
0146 index = 0;
0147 wvalue = (u16)(addr & 0x0000ffff);
0148 len = 4;
0149 data = cpu_to_le32(val);
0150 r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len,
0151 requesttype);
0152 }
0153
0154 void r8712_usb_set_intf_option(u32 *option)
0155 {
0156 *option = ((*option) | _INTF_ASYNC_);
0157 }
0158
0159 static void usb_intf_hdl_init(u8 *priv)
0160 {
0161 }
0162
0163 static void usb_intf_hdl_unload(u8 *priv)
0164 {
0165 }
0166
0167 static void usb_intf_hdl_open(u8 *priv)
0168 {
0169 }
0170
0171 static void usb_intf_hdl_close(u8 *priv)
0172 {
0173 }
0174
0175 void r8712_usb_set_intf_funs(struct intf_hdl *intfhdl)
0176 {
0177 intfhdl->intf_hdl_init = usb_intf_hdl_init;
0178 intfhdl->intf_hdl_unload = usb_intf_hdl_unload;
0179 intfhdl->intf_hdl_open = usb_intf_hdl_open;
0180 intfhdl->intf_hdl_close = usb_intf_hdl_close;
0181 }
0182
0183 void r8712_usb_set_intf_ops(struct _io_ops *ops)
0184 {
0185 memset((u8 *)ops, 0, sizeof(struct _io_ops));
0186 ops->_read8 = usb_read8;
0187 ops->_read16 = usb_read16;
0188 ops->_read32 = usb_read32;
0189 ops->_read_port = r8712_usb_read_port;
0190 ops->_write8 = usb_write8;
0191 ops->_write16 = usb_write16;
0192 ops->_write32 = usb_write32;
0193 ops->_write_mem = r8712_usb_write_mem;
0194 ops->_write_port = r8712_usb_write_port;
0195 }