/*
 * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 */

#ifndef __GDM_SDIO_H__
#define __GDM_SDIO_H__

#include <linux/types.h>
#include <linux/time.h>

#define MAX_NR_SDU_BUF  64

struct sdio_tx {
	struct list_head	list;
	struct tx_cxt		*tx_cxt;

	u8	*buf;
	int	len;

	void (*callback)(void *cb_data);
	void *cb_data;
};

struct tx_cxt {
	struct list_head	free_list;
	struct list_head	sdu_list;
	struct list_head	hci_list;
	struct timeval		sdu_stamp;

	u8	*sdu_buf;

	spinlock_t			lock;
	int	can_send;
	int stop_sdu_tx;
};

struct sdio_rx {
	struct list_head	list;
	struct rx_cxt		*rx_cxt;

	void (*callback)(void *cb_data, void *data, int len);
	void *cb_data;
};

struct rx_cxt {
	struct list_head	free_list;
	struct list_head	req_list;

	u8		*rx_buf;

	spinlock_t			lock;
};

struct sdiowm_dev {
	struct sdio_func	*func;

	struct tx_cxt	tx;
	struct rx_cxt	rx;

	struct work_struct	ws;
};

#endif /* __GDM_SDIO_H__ */
