linux/drivers/bluetooth/btmrvl_sdio.c

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Marvell BT-over-SDIO driver: SDIO interface related functions.
 *
 * Copyright (C) 2009, Marvell International Ltd.
 **/

#include <linux/firmware.h>
#include <linux/slab.h>
#include <linux/suspend.h>

#include <linux/mmc/sdio_ids.h>
#include <linux/mmc/sdio_func.h>
#include <linux/module.h>
#include <linux/devcoredump.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>

#include "btmrvl_drv.h"
#include "btmrvl_sdio.h"

#define VERSION

static struct memory_type_mapping mem_type_mapping_tbl[] =;

static const struct of_device_id btmrvl_sdio_of_match_table[] __maybe_unused =;

static irqreturn_t btmrvl_wake_irq_bt(int irq, void *priv)
{}

/* This function parses device tree node using mmc subnode devicetree API.
 * The device node is saved in card->plt_of_node.
 * If the device tree node exists and includes interrupts attributes, this
 * function will request platform specific wakeup interrupt.
 */
static int btmrvl_sdio_probe_of(struct device *dev,
				struct btmrvl_sdio_card *card)
{}

/* The btmrvl_sdio_remove() callback function is called
 * when user removes this module from kernel space or ejects
 * the card from the slot. The driver handles these 2 cases
 * differently.
 * If the user is removing the module, a MODULE_SHUTDOWN_REQ
 * command is sent to firmware and interrupt will be disabled.
 * If the card is removed, there is no need to send command
 * or disable interrupt.
 *
 * The variable 'user_rmmod' is used to distinguish these two
 * scenarios. This flag is initialized as FALSE in case the card
 * is removed, and will be set to TRUE for module removal when
 * module_exit function is called.
 */
static u8 user_rmmod;
static u8 sdio_ireg;

static const struct btmrvl_sdio_card_reg btmrvl_reg_8688 =;
static const struct btmrvl_sdio_card_reg btmrvl_reg_87xx =;

static const struct btmrvl_sdio_card_reg btmrvl_reg_8887 =;

static const struct btmrvl_sdio_card_reg btmrvl_reg_8897 =;

static const struct btmrvl_sdio_card_reg btmrvl_reg_89xx =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8688 =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8787 =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8797 =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8887 =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8897 =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8977 =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8987 =;

static const struct btmrvl_sdio_device btmrvl_sdio_sd8997 =;

static const struct sdio_device_id btmrvl_sdio_ids[] =;

MODULE_DEVICE_TABLE(sdio, btmrvl_sdio_ids);

static int btmrvl_sdio_get_rx_unit(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_read_fw_status(struct btmrvl_sdio_card *card, u16 *dat)
{}

static int btmrvl_sdio_read_rx_len(struct btmrvl_sdio_card *card, u16 *dat)
{}

static int btmrvl_sdio_enable_host_int_mask(struct btmrvl_sdio_card *card,
								u8 mask)
{}

static int btmrvl_sdio_disable_host_int_mask(struct btmrvl_sdio_card *card,
								u8 mask)
{}

static int btmrvl_sdio_poll_card_status(struct btmrvl_sdio_card *card, u8 bits)
{}

static int btmrvl_sdio_verify_fw_download(struct btmrvl_sdio_card *card,
								int pollnum)
{}

static int btmrvl_sdio_download_helper(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_download_fw_w_helper(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_card_to_host(struct btmrvl_private *priv)
{}

static int btmrvl_sdio_process_int_status(struct btmrvl_private *priv)
{}

static int btmrvl_sdio_read_to_clear(struct btmrvl_sdio_card *card, u8 *ireg)
{}

static int btmrvl_sdio_write_to_clear(struct btmrvl_sdio_card *card, u8 *ireg)
{}

static void btmrvl_sdio_interrupt(struct sdio_func *func)
{}

static int btmrvl_sdio_register_dev(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_unregister_dev(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_enable_host_int(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_disable_host_int(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_host_to_card(struct btmrvl_private *priv,
				u8 *payload, u16 nb)
{}

static int btmrvl_sdio_download_fw(struct btmrvl_sdio_card *card)
{}

static int btmrvl_sdio_wakeup_fw(struct btmrvl_private *priv)
{}

static void btmrvl_sdio_dump_regs(struct btmrvl_private *priv)
{}

/* This function read/write firmware */
static enum
rdwr_status btmrvl_sdio_rdwr_firmware(struct btmrvl_private *priv,
				      u8 doneflag)
{}

/* This function dump sdio register and memory data */
static void btmrvl_sdio_coredump(struct device *dev)
{}

static int btmrvl_sdio_probe(struct sdio_func *func,
					const struct sdio_device_id *id)
{}

static void btmrvl_sdio_remove(struct sdio_func *func)
{}

static int btmrvl_sdio_suspend(struct device *dev)
{}

static int btmrvl_sdio_resume(struct device *dev)
{}

static const struct dev_pm_ops btmrvl_sdio_pm_ops =;

static struct sdio_driver bt_mrvl_sdio =;

static int __init btmrvl_sdio_init_module(void)
{}

static void __exit btmrvl_sdio_exit_module(void)
{}

module_init();
module_exit(btmrvl_sdio_exit_module);

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_VERSION();
MODULE_LICENSE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();
MODULE_FIRMWARE();