/* SPDX-License-Identifier: GPL-2.0 */
|
#include <wcn_bus.h>
|
|
#include "bus_common.h"
|
#include "sdiohal.h"
|
|
static int sdio_get_hif_type(void)
|
{
|
return HW_TYPE_SDIO;
|
}
|
|
int sdiohal_driver_register(void)
|
{
|
return 0;
|
}
|
|
void sdiohal_driver_unregister(void)
|
{
|
|
}
|
|
static int sdio_preinit(void)
|
{
|
sdiohal_init();
|
return 0;
|
}
|
|
static void sdio_preexit(void)
|
{
|
sdiohal_exit();
|
}
|
|
static int sdio_buf_list_alloc(int chn, struct mbuf_t **head,
|
struct mbuf_t **tail, int *num)
|
{
|
return buf_list_alloc(chn, head, tail, num);
|
}
|
|
static int sdio_buf_list_free(int chn, struct mbuf_t *head,
|
struct mbuf_t *tail, int num)
|
{
|
return buf_list_free(chn, head, tail, num);
|
}
|
|
static int sdio_list_push(int chn, struct mbuf_t *head,
|
struct mbuf_t *tail, int num)
|
{
|
return sdiohal_list_push(chn, head, tail, num);
|
}
|
|
static int sdio_list_push_direct(int chn, struct mbuf_t *head,
|
struct mbuf_t *tail, int num)
|
{
|
return sdiohal_list_direct_write(chn, head, tail, num);
|
}
|
|
static int sdio_chn_init(struct mchn_ops_t *ops)
|
{
|
return bus_chn_init(ops, HW_TYPE_SDIO);
|
}
|
|
static int sdio_chn_deinit(struct mchn_ops_t *ops)
|
{
|
return bus_chn_deinit(ops);
|
}
|
|
static int sdio_direct_read(unsigned int addr,
|
void *buf, unsigned int len)
|
{
|
return sdiohal_dt_read(addr, buf, len);
|
}
|
|
static int sdio_direct_write(unsigned int addr,
|
void *buf, unsigned int len)
|
{
|
return sdiohal_dt_write(addr, buf, len);
|
}
|
|
static int sdio_readbyte(unsigned int addr, unsigned char *val)
|
{
|
return sdiohal_aon_readb(addr, val);
|
}
|
|
static int sdio_writebyte(unsigned int addr, unsigned char val)
|
{
|
return sdiohal_aon_writeb(addr, val);
|
}
|
|
static unsigned int sdio_get_carddump_status(void)
|
{
|
return sdiohal_get_carddump_status();
|
}
|
|
static void sdio_set_carddump_status(unsigned int flag)
|
{
|
return sdiohal_set_carddump_status(flag);
|
}
|
|
static unsigned long long sdio_get_rx_total_cnt(void)
|
{
|
return sdiohal_get_rx_total_cnt();
|
}
|
|
static int sdio_runtime_get(void)
|
{
|
return sdiohal_runtime_get();
|
}
|
|
static int sdio_runtime_put(void)
|
{
|
return sdiohal_runtime_put();
|
}
|
|
static int sdio_rescan(void)
|
{
|
return sdiohal_scan_card();
|
}
|
|
static void sdio_register_rescan_cb(void *func)
|
{
|
return sdiohal_register_scan_notify(func);
|
}
|
|
static void sdio_remove_card(void)
|
{
|
return sdiohal_remove_card();
|
}
|
|
static struct sprdwcn_bus_ops sdiohal_bus_ops = {
|
.preinit = sdio_preinit,
|
.deinit = sdio_preexit,
|
.chn_init = sdio_chn_init,
|
.chn_deinit = sdio_chn_deinit,
|
.list_alloc = sdio_buf_list_alloc,
|
.list_free = sdio_buf_list_free,
|
.push_list = sdio_list_push,
|
.push_list_direct = sdio_list_push_direct,
|
.direct_read = sdio_direct_read,
|
.direct_write = sdio_direct_write,
|
.readbyte = sdio_readbyte,
|
.writebyte = sdio_writebyte,
|
.read_l = sdiohal_readl,
|
.write_l = sdiohal_writel,
|
|
.get_carddump_status = sdio_get_carddump_status,
|
.set_carddump_status = sdio_set_carddump_status,
|
.get_rx_total_cnt = sdio_get_rx_total_cnt,
|
|
.runtime_get = sdio_runtime_get,
|
.runtime_put = sdio_runtime_put,
|
|
.register_rescan_cb = sdio_register_rescan_cb,
|
.rescan = sdio_rescan,
|
.remove_card = sdio_remove_card,
|
.get_wl_wake_host_en = sdiohal_get_wl_wake_host_en,
|
.get_tx_mode = sdiohal_get_tx_mode,
|
.get_rx_mode = sdiohal_get_rx_mode,
|
.get_irq_type = sdiohal_get_irq_type,
|
.get_blk_size = sdiohal_get_blk_size,
|
.get_hif_type = sdio_get_hif_type,
|
.driver_register = sdiohal_driver_register,
|
.driver_unregister = sdiohal_driver_unregister,
|
};
|
|
void module_bus_init(void)
|
{
|
module_ops_register(&sdiohal_bus_ops);
|
}
|
EXPORT_SYMBOL(module_bus_init);
|
|
void module_bus_deinit(void)
|
{
|
module_ops_unregister();
|
}
|
EXPORT_SYMBOL(module_bus_deinit);
|