linux/drivers/staging/rtl8712/usb_ops.c
<<
>>
Prefs
   1/******************************************************************************
   2 * usb_ops.c
   3 *
   4 * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.
   5 * Linux device driver for RTL8192SU
   6 *
   7 * This program is free software; you can redistribute it and/or modify it
   8 * under the terms of version 2 of the GNU General Public License as
   9 * published by the Free Software Foundation.
  10 *
  11 * This program is distributed in the hope that it will be useful, but WITHOUT
  12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  14 * more details.
  15 *
  16 * You should have received a copy of the GNU General Public License along with
  17 * this program; if not, write to the Free Software Foundation, Inc.,
  18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  19 *
  20 * Modifications for inclusion into the Linux staging tree are
  21 * Copyright(c) 2010 Larry Finger. All rights reserved.
  22 *
  23 * Contact information:
  24 * WLAN FAE <wlanfae@realtek.com>
  25 * Larry Finger <Larry.Finger@lwfinger.net>
  26 *
  27 ******************************************************************************/
  28
  29#define _HCI_OPS_C_
  30
  31#include "osdep_service.h"
  32#include "drv_types.h"
  33#include "osdep_intf.h"
  34#include "usb_ops.h"
  35#include "recv_osdep.h"
  36
  37static u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr)
  38{
  39        u8 request;
  40        u8 requesttype;
  41        u16 wvalue;
  42        u16 index;
  43        u16 len;
  44        u32 data;
  45        struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
  46
  47        request = 0x05;
  48        requesttype = 0x01; /* read_in */
  49        index = 0;
  50        wvalue = (u16)(addr&0x0000ffff);
  51        len = 1;
  52        r8712_usbctrl_vendorreq(pintfpriv, request, wvalue, index, &data, len,
  53                          requesttype);
  54        return (u8)(le32_to_cpu(data)&0x0ff);
  55}
  56
  57static u16 usb_read16(struct intf_hdl *pintfhdl, u32 addr)
  58{
  59        u8 request;
  60        u8 requesttype;
  61        u16 wvalue;
  62        u16 index;
  63        u16 len;
  64        u32 data;
  65        struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
  66
  67        request = 0x05;
  68        requesttype = 0x01; /* read_in */
  69        index = 0;
  70        wvalue = (u16)(addr&0x0000ffff);
  71        len = 2;
  72        r8712_usbctrl_vendorreq(pintfpriv, request, wvalue, index, &data, len,
  73                          requesttype);
  74        return (u16)(le32_to_cpu(data)&0xffff);
  75}
  76
  77static u32 usb_read32(struct intf_hdl *pintfhdl, u32 addr)
  78{
  79        u8 request;
  80        u8 requesttype;
  81        u16 wvalue;
  82        u16 index;
  83        u16 len;
  84        u32 data;
  85        struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
  86
  87        request = 0x05;
  88        requesttype = 0x01; /* read_in */
  89        index = 0;
  90        wvalue = (u16)(addr&0x0000ffff);
  91        len = 4;
  92        r8712_usbctrl_vendorreq(pintfpriv, request, wvalue, index, &data, len,
  93                          requesttype);
  94        return le32_to_cpu(data);
  95}
  96
  97static void usb_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
  98{
  99        u8 request;
 100        u8 requesttype;
 101        u16 wvalue;
 102        u16 index;
 103        u16 len;
 104        u32 data;
 105        struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
 106
 107        request = 0x05;
 108        requesttype = 0x00; /* write_out */
 109        index = 0;
 110        wvalue = (u16)(addr&0x0000ffff);
 111        len = 1;
 112        data = val;
 113        data = cpu_to_le32(data&0x000000ff);
 114        r8712_usbctrl_vendorreq(pintfpriv, request, wvalue, index, &data, len,
 115                          requesttype);
 116}
 117
 118static void usb_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
 119{
 120        u8 request;
 121        u8 requesttype;
 122        u16 wvalue;
 123        u16 index;
 124        u16 len;
 125        u32 data;
 126        struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
 127
 128        request = 0x05;
 129        requesttype = 0x00; /* write_out */
 130        index = 0;
 131        wvalue = (u16)(addr&0x0000ffff);
 132        len = 2;
 133        data = val;
 134        data = cpu_to_le32(data&0x0000ffff);
 135        r8712_usbctrl_vendorreq(pintfpriv, request, wvalue, index, &data, len,
 136                          requesttype);
 137}
 138
 139static void usb_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
 140{
 141        u8 request;
 142        u8 requesttype;
 143        u16 wvalue;
 144        u16 index;
 145        u16 len;
 146        u32 data;
 147        struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
 148
 149        request = 0x05;
 150        requesttype = 0x00; /* write_out */
 151        index = 0;
 152        wvalue = (u16)(addr&0x0000ffff);
 153        len = 4;
 154        data = cpu_to_le32(val);
 155        r8712_usbctrl_vendorreq(pintfpriv, request, wvalue, index, &data, len,
 156                          requesttype);
 157}
 158
 159void r8712_usb_set_intf_option(u32 *poption)
 160{
 161        *poption = ((*poption) | _INTF_ASYNC_);
 162}
 163
 164static void usb_intf_hdl_init(u8 *priv)
 165{
 166}
 167
 168static void usb_intf_hdl_unload(u8 *priv)
 169{
 170}
 171
 172static void usb_intf_hdl_open(u8 *priv)
 173{
 174}
 175
 176static void usb_intf_hdl_close(u8 *priv)
 177{
 178}
 179
 180void r8712_usb_set_intf_funs(struct intf_hdl *pintf_hdl)
 181{
 182        pintf_hdl->intf_hdl_init = &usb_intf_hdl_init;
 183        pintf_hdl->intf_hdl_unload = &usb_intf_hdl_unload;
 184        pintf_hdl->intf_hdl_open = &usb_intf_hdl_open;
 185        pintf_hdl->intf_hdl_close = &usb_intf_hdl_close;
 186}
 187
 188void r8712_usb_set_intf_ops(struct _io_ops      *pops)
 189{
 190        memset((u8 *)pops, 0, sizeof(struct _io_ops));
 191        pops->_read8 = &usb_read8;
 192        pops->_read16 = &usb_read16;
 193        pops->_read32 = &usb_read32;
 194        pops->_read_port = &r8712_usb_read_port;
 195        pops->_write8 = &usb_write8;
 196        pops->_write16 = &usb_write16;
 197        pops->_write32 = &usb_write32;
 198        pops->_write_mem = &r8712_usb_write_mem;
 199        pops->_write_port = &r8712_usb_write_port;
 200}
 201