cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

usb_ops.c (4384B)


      1// SPDX-License-Identifier: GPL-2.0
      2/******************************************************************************
      3 * usb_ops.c
      4 *
      5 * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.
      6 * Linux device driver for RTL8192SU
      7 *
      8 * Modifications for inclusion into the Linux staging tree are
      9 * Copyright(c) 2010 Larry Finger. All rights reserved.
     10 *
     11 * Contact information:
     12 * WLAN FAE <wlanfae@realtek.com>
     13 * Larry Finger <Larry.Finger@lwfinger.net>
     14 *
     15 ******************************************************************************/
     16
     17#define _HCI_OPS_C_
     18
     19#include "osdep_service.h"
     20#include "drv_types.h"
     21#include "osdep_intf.h"
     22#include "usb_ops.h"
     23#include "recv_osdep.h"
     24
     25static u8 usb_read8(struct intf_hdl *intfhdl, u32 addr)
     26{
     27	u8 request;
     28	u8 requesttype;
     29	u16 wvalue;
     30	u16 index;
     31	u16 len;
     32	int status;
     33	__le32 data = 0;
     34	struct intf_priv *intfpriv = intfhdl->pintfpriv;
     35
     36	request = 0x05;
     37	requesttype = 0x01; /* read_in */
     38	index = 0;
     39	wvalue = (u16)(addr & 0x0000ffff);
     40	len = 1;
     41	status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index,
     42					 &data, len, requesttype);
     43	if (status < 0)
     44		return 0;
     45	return (u8)(le32_to_cpu(data) & 0x0ff);
     46}
     47
     48static u16 usb_read16(struct intf_hdl *intfhdl, u32 addr)
     49{
     50	u8 request;
     51	u8 requesttype;
     52	u16 wvalue;
     53	u16 index;
     54	u16 len;
     55	int status;
     56	__le32 data = 0;
     57	struct intf_priv *intfpriv = intfhdl->pintfpriv;
     58
     59	request = 0x05;
     60	requesttype = 0x01; /* read_in */
     61	index = 0;
     62	wvalue = (u16)(addr & 0x0000ffff);
     63	len = 2;
     64	status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index,
     65					 &data, len, requesttype);
     66	if (status < 0)
     67		return 0;
     68	return (u16)(le32_to_cpu(data) & 0xffff);
     69}
     70
     71static u32 usb_read32(struct intf_hdl *intfhdl, u32 addr)
     72{
     73	u8 request;
     74	u8 requesttype;
     75	u16 wvalue;
     76	u16 index;
     77	u16 len;
     78	int status;
     79	__le32 data = 0;
     80	struct intf_priv *intfpriv = intfhdl->pintfpriv;
     81
     82	request = 0x05;
     83	requesttype = 0x01; /* read_in */
     84	index = 0;
     85	wvalue = (u16)(addr & 0x0000ffff);
     86	len = 4;
     87	status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index,
     88					 &data, len, requesttype);
     89	if (status < 0)
     90		return 0;
     91	return le32_to_cpu(data);
     92}
     93
     94static void usb_write8(struct intf_hdl *intfhdl, u32 addr, u8 val)
     95{
     96	u8 request;
     97	u8 requesttype;
     98	u16 wvalue;
     99	u16 index;
    100	u16 len;
    101	__le32 data;
    102	struct intf_priv *intfpriv = intfhdl->pintfpriv;
    103
    104	request = 0x05;
    105	requesttype = 0x00; /* write_out */
    106	index = 0;
    107	wvalue = (u16)(addr & 0x0000ffff);
    108	len = 1;
    109	data = cpu_to_le32((u32)val & 0x000000ff);
    110	r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len,
    111				requesttype);
    112}
    113
    114static void usb_write16(struct intf_hdl *intfhdl, u32 addr, u16 val)
    115{
    116	u8 request;
    117	u8 requesttype;
    118	u16 wvalue;
    119	u16 index;
    120	u16 len;
    121	__le32 data;
    122	struct intf_priv *intfpriv = intfhdl->pintfpriv;
    123
    124	request = 0x05;
    125	requesttype = 0x00; /* write_out */
    126	index = 0;
    127	wvalue = (u16)(addr & 0x0000ffff);
    128	len = 2;
    129	data = cpu_to_le32((u32)val & 0x0000ffff);
    130	r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len,
    131				requesttype);
    132}
    133
    134static void usb_write32(struct intf_hdl *intfhdl, u32 addr, u32 val)
    135{
    136	u8 request;
    137	u8 requesttype;
    138	u16 wvalue;
    139	u16 index;
    140	u16 len;
    141	__le32 data;
    142	struct intf_priv *intfpriv = intfhdl->pintfpriv;
    143
    144	request = 0x05;
    145	requesttype = 0x00; /* write_out */
    146	index = 0;
    147	wvalue = (u16)(addr & 0x0000ffff);
    148	len = 4;
    149	data = cpu_to_le32(val);
    150	r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len,
    151				requesttype);
    152}
    153
    154void r8712_usb_set_intf_option(u32 *option)
    155{
    156	*option = ((*option) | _INTF_ASYNC_);
    157}
    158
    159static void usb_intf_hdl_init(u8 *priv)
    160{
    161}
    162
    163static void usb_intf_hdl_unload(u8 *priv)
    164{
    165}
    166
    167static void usb_intf_hdl_open(u8 *priv)
    168{
    169}
    170
    171static void usb_intf_hdl_close(u8 *priv)
    172{
    173}
    174
    175void r8712_usb_set_intf_funs(struct intf_hdl *intfhdl)
    176{
    177	intfhdl->intf_hdl_init = usb_intf_hdl_init;
    178	intfhdl->intf_hdl_unload = usb_intf_hdl_unload;
    179	intfhdl->intf_hdl_open = usb_intf_hdl_open;
    180	intfhdl->intf_hdl_close = usb_intf_hdl_close;
    181}
    182
    183void r8712_usb_set_intf_ops(struct _io_ops *ops)
    184{
    185	memset((u8 *)ops, 0, sizeof(struct _io_ops));
    186	ops->_read8 = usb_read8;
    187	ops->_read16 = usb_read16;
    188	ops->_read32 = usb_read32;
    189	ops->_read_port = r8712_usb_read_port;
    190	ops->_write8 = usb_write8;
    191	ops->_write16 = usb_write16;
    192	ops->_write32 = usb_write32;
    193	ops->_write_mem = r8712_usb_write_mem;
    194	ops->_write_port = r8712_usb_write_port;
    195}