linux/drivers/net/wireless/realtek/rtw88/sdio.c

// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* Copyright (C) 2021 Martin Blumenstingl <[email protected]>
 * Copyright (C) 2021 Jernej Skrabec <[email protected]>
 *
 * Based on rtw88/pci.c:
 *   Copyright(c) 2018-2019  Realtek Corporation
 */

#include <linux/module.h>
#include <linux/mmc/host.h>
#include <linux/mmc/sdio_func.h>
#include "main.h"
#include "debug.h"
#include "fw.h"
#include "ps.h"
#include "reg.h"
#include "rx.h"
#include "sdio.h"
#include "tx.h"

#define RTW_SDIO_INDIRECT_RW_RETRIES

static bool rtw_sdio_is_bus_addr(u32 addr)
{}

static bool rtw_sdio_bus_claim_needed(struct rtw_sdio *rtwsdio)
{}

static u32 rtw_sdio_to_bus_offset(struct rtw_dev *rtwdev, u32 addr)
{}

static bool rtw_sdio_use_memcpy_io(struct rtw_dev *rtwdev, u32 addr,
				   u8 alignment)
{}

static void rtw_sdio_writel(struct rtw_dev *rtwdev, u32 val, u32 addr,
			    int *err_ret)
{}

static void rtw_sdio_writew(struct rtw_dev *rtwdev, u16 val, u32 addr,
			    int *err_ret)
{}

static u32 rtw_sdio_readl(struct rtw_dev *rtwdev, u32 addr, int *err_ret)
{}

static u16 rtw_sdio_readw(struct rtw_dev *rtwdev, u32 addr, int *err_ret)
{}

static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr,
				  bool direct)
{}

static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr)
{}

static int rtw_sdio_indirect_reg_cfg(struct rtw_dev *rtwdev, u32 addr, u32 cfg)
{}

static u8 rtw_sdio_indirect_read8(struct rtw_dev *rtwdev, u32 addr,
				  int *err_ret)
{}

static int rtw_sdio_indirect_read_bytes(struct rtw_dev *rtwdev, u32 addr,
					u8 *buf, int count)
{}

static u16 rtw_sdio_indirect_read16(struct rtw_dev *rtwdev, u32 addr,
				    int *err_ret)
{}

static u32 rtw_sdio_indirect_read32(struct rtw_dev *rtwdev, u32 addr,
				    int *err_ret)
{}

static u8 rtw_sdio_read8(struct rtw_dev *rtwdev, u32 addr)
{}

static u16 rtw_sdio_read16(struct rtw_dev *rtwdev, u32 addr)
{}

static u32 rtw_sdio_read32(struct rtw_dev *rtwdev, u32 addr)
{}

static void rtw_sdio_indirect_write8(struct rtw_dev *rtwdev, u8 val, u32 addr,
				     int *err_ret)
{}

static void rtw_sdio_indirect_write16(struct rtw_dev *rtwdev, u16 val, u32 addr,
				      int *err_ret)
{}

static void rtw_sdio_indirect_write32(struct rtw_dev *rtwdev, u32 val,
				      u32 addr, int *err_ret)
{}

static void rtw_sdio_write8(struct rtw_dev *rtwdev, u32 addr, u8 val)
{}

static void rtw_sdio_write16(struct rtw_dev *rtwdev, u32 addr, u16 val)
{}

static void rtw_sdio_write32(struct rtw_dev *rtwdev, u32 addr, u32 val)
{}

static u32 rtw_sdio_get_tx_addr(struct rtw_dev *rtwdev, size_t size,
				enum rtw_tx_queue_type queue)
{
	u32 txaddr;

	switch (queue) {
	case RTW_TX_QUEUE_BCN:
	case RTW_TX_QUEUE_H2C:
	case RTW_TX_QUEUE_HI0:
		txaddr = FIELD_PREP(REG_SDIO_CMD_ADDR_MSK,
				    REG_SDIO_CMD_ADDR_TXFF_HIGH);
		break;
	case RTW_TX_QUEUE_VI:
	case RTW_TX_QUEUE_VO:
		txaddr = FIELD_PREP(REG_SDIO_CMD_ADDR_MSK,
				    REG_SDIO_CMD_ADDR_TXFF_NORMAL);
		break;
	case RTW_TX_QUEUE_BE:
	case RTW_TX_QUEUE_BK:
		txaddr = FIELD_PREP(REG_SDIO_CMD_ADDR_MSK,
				    REG_SDIO_CMD_ADDR_TXFF_LOW);
		break;
	case RTW_TX_QUEUE_MGMT:
		txaddr = FIELD_PREP(REG_SDIO_CMD_ADDR_MSK,
				    REG_SDIO_CMD_ADDR_TXFF_EXTRA);
		break;
	default:
		rtw_warn(rtwdev, "Unsupported queue for TX addr: 0x%02x\n",
			 queue);
		return 0;
	}

	txaddr += DIV_ROUND_UP(size, 4);

	return txaddr;
};

static int rtw_sdio_read_port(struct rtw_dev *rtwdev, u8 *buf, size_t count)
{}

static int rtw_sdio_check_free_txpg(struct rtw_dev *rtwdev, u8 queue,
				    size_t count)
{}

static int rtw_sdio_write_port(struct rtw_dev *rtwdev, struct sk_buff *skb,
			       enum rtw_tx_queue_type queue)
{}

static void rtw_sdio_init(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_enable_rx_aggregation(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_enable_interrupt(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_disable_interrupt(struct rtw_dev *rtwdev)
{}

static u8 rtw_sdio_get_tx_qsel(struct rtw_dev *rtwdev, struct sk_buff *skb,
			       u8 queue)
{}

static int rtw_sdio_setup(struct rtw_dev *rtwdev)
{}

static int rtw_sdio_start(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_stop(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_deep_ps_enter(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_deep_ps_leave(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_deep_ps(struct rtw_dev *rtwdev, bool enter)
{}

static void rtw_sdio_tx_kick_off(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_link_ps(struct rtw_dev *rtwdev, bool enter)
{}

static void rtw_sdio_interface_cfg(struct rtw_dev *rtwdev)
{}

static struct rtw_sdio_tx_data *rtw_sdio_get_tx_data(struct sk_buff *skb)
{}

static void rtw_sdio_tx_skb_prepare(struct rtw_dev *rtwdev,
				    struct rtw_tx_pkt_info *pkt_info,
				    struct sk_buff *skb,
				    enum rtw_tx_queue_type queue)
{}

static int rtw_sdio_write_data(struct rtw_dev *rtwdev,
			       struct rtw_tx_pkt_info *pkt_info,
			       struct sk_buff *skb,
			       enum rtw_tx_queue_type queue)
{}

static int rtw_sdio_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf,
					 u32 size)
{}

static int rtw_sdio_write_data_h2c(struct rtw_dev *rtwdev, u8 *buf, u32 size)
{}

static int rtw_sdio_tx_write(struct rtw_dev *rtwdev,
			     struct rtw_tx_pkt_info *pkt_info,
			     struct sk_buff *skb)
{}

static void rtw_sdio_tx_err_isr(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_rx_skb(struct rtw_dev *rtwdev, struct sk_buff *skb,
			    u32 pkt_offset, struct rtw_rx_pkt_stat *pkt_stat,
			    struct ieee80211_rx_status *rx_status)
{}

static void rtw_sdio_rxfifo_recv(struct rtw_dev *rtwdev, u32 rx_len)
{}

static void rtw_sdio_rx_isr(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_handle_interrupt(struct sdio_func *sdio_func)
{}

static int __maybe_unused rtw_sdio_suspend(struct device *dev)
{}

static int __maybe_unused rtw_sdio_resume(struct device *dev)
{}

SIMPLE_DEV_PM_OPS(rtw_sdio_pm_ops, rtw_sdio_suspend, rtw_sdio_resume);
EXPORT_SYMBOL();

static int rtw_sdio_claim(struct rtw_dev *rtwdev, struct sdio_func *sdio_func)
{}

static void rtw_sdio_declaim(struct rtw_dev *rtwdev,
			     struct sdio_func *sdio_func)
{}

static struct rtw_hci_ops rtw_sdio_ops =;

static int rtw_sdio_request_irq(struct rtw_dev *rtwdev,
				struct sdio_func *sdio_func)
{}

static void rtw_sdio_indicate_tx_status(struct rtw_dev *rtwdev,
					struct sk_buff *skb)
{}

static void rtw_sdio_process_tx_queue(struct rtw_dev *rtwdev,
				      enum rtw_tx_queue_type queue)
{}

static void rtw_sdio_tx_handler(struct work_struct *work)
{}

static void rtw_sdio_free_irq(struct rtw_dev *rtwdev,
			      struct sdio_func *sdio_func)
{}

static int rtw_sdio_init_tx(struct rtw_dev *rtwdev)
{}

static void rtw_sdio_deinit_tx(struct rtw_dev *rtwdev)
{}

int rtw_sdio_probe(struct sdio_func *sdio_func,
		   const struct sdio_device_id *id)
{}
EXPORT_SYMBOL();

void rtw_sdio_remove(struct sdio_func *sdio_func)
{}
EXPORT_SYMBOL();

void rtw_sdio_shutdown(struct device *dev)
{}
EXPORT_SYMBOL();

MODULE_AUTHOR();
MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();