usr/src/uts/common/io/iwk/iwk2_var.h
changeset 6169 87ffdd486b23
child 6249 926b594e6df7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/iwk/iwk2_var.h	Fri Mar 07 18:20:06 2008 -0800
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2007, Intel Corporation
+ * All rights reserved.
+ */
+
+/*
+ * Copyright (c) 2006
+ * Copyright (c) 2007
+ *	Damien Bergamini <[email protected]>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _IWK_VAR_H
+#define	_IWK_VAR_H
+
+#pragma ident	"%Z%%M%	%I%	%E% SMI"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define	IWK_DMA_SYNC(area, flag) \
+	(void) ddi_dma_sync((area).dma_hdl, (area).offset, \
+	(area).alength, (flag))
+
+typedef struct iwk_dma_area {
+	ddi_acc_handle_t	acc_hdl; /* handle for memory */
+	caddr_t			mem_va; /* CPU VA of memory */
+	uint32_t		nslots; /* number of slots */
+	uint32_t		size;   /* size per slot */
+	size_t			alength; /* allocated size */
+					/* >= product of above */
+	ddi_dma_handle_t	dma_hdl; /* DMA handle */
+	offset_t		offset;  /* relative to handle */
+	ddi_dma_cookie_t	cookie; /* associated cookie */
+	uint32_t		ncookies;
+	uint32_t		token; /* arbitrary identifier */
+} iwk_dma_t;
+
+typedef struct iwk_tx_data {
+	iwk_dma_t		dma_data;
+	iwk_tx_desc_t		*desc;
+	uint32_t		paddr_desc;
+	iwk_cmd_t		*cmd;
+	uint32_t		paddr_cmd;
+} iwk_tx_data_t;
+
+typedef struct iwk_tx_ring {
+	iwk_dma_t		dma_desc;
+	iwk_dma_t		dma_cmd;
+	iwk_tx_data_t	*data;
+	int			qid;
+	int			count;
+	int			window;
+	int			queued;
+	int			cur;
+} iwk_tx_ring_t;
+
+typedef struct iwk_rx_data {
+	iwk_dma_t		dma_data;
+} iwk_rx_data_t;
+
+typedef struct iwk_rx_ring {
+	iwk_dma_t		dma_desc;
+	uint32_t 		*desc;
+	iwk_rx_data_t	data[RX_QUEUE_SIZE];
+	int			cur;
+} iwk_rx_ring_t;
+
+typedef struct iwk_softc {
+	struct ieee80211com	sc_ic;
+	dev_info_t		*sc_dip;
+	int			(*sc_newstate)(struct ieee80211com *,
+	    enum ieee80211_state, int);
+	enum ieee80211_state	sc_ostate;
+	kmutex_t		sc_glock;
+	kmutex_t		sc_mt_lock;
+	kmutex_t		sc_tx_lock;
+	kcondvar_t		sc_mt_cv;
+	kcondvar_t		sc_tx_cv;
+	kcondvar_t		sc_cmd_cv;
+	kcondvar_t		sc_fw_cv;
+
+	kthread_t		*sc_mf_thread;
+	uint32_t		sc_mf_thread_switch;
+
+	uint32_t		sc_flags;
+	uint32_t		sc_dmabuf_sz;
+	uint16_t		sc_clsz;
+	uint8_t			sc_rev;
+	uint8_t			sc_resv;
+	uint16_t		sc_assoc_id;
+	uint16_t		sc_reserved0;
+
+	/* shared area */
+	iwk_dma_t		sc_dma_sh;
+	iwk_shared_t		*sc_shared;
+	/* keep warm area */
+	iwk_dma_t		sc_dma_kw;
+	/* tx scheduler base address */
+	uint32_t		sc_scd_base_addr;
+
+	iwk_tx_ring_t		sc_txq[IWK_NUM_QUEUES];
+	iwk_rx_ring_t		sc_rxq;
+
+	/* firmware dma */
+	iwk_firmware_hdr_t	*sc_hdr;
+	char			*sc_boot;
+	iwk_dma_t		sc_dma_fw_text;
+	iwk_dma_t		sc_dma_fw_init_text;
+	iwk_dma_t		sc_dma_fw_data;
+	iwk_dma_t		sc_dma_fw_data_bak;
+	iwk_dma_t		sc_dma_fw_init_data;
+
+	ddi_acc_handle_t	sc_cfg_handle;
+	caddr_t			sc_cfg_base;
+	ddi_acc_handle_t	sc_handle;
+	caddr_t			sc_base;
+	ddi_iblock_cookie_t	sc_iblk;
+
+	iwk_rxon_cmd_t	sc_config;
+	struct iwk_eep		sc_eep_map; /* eeprom map */
+	uint32_t		sc_scd_base;
+
+	struct iwk_alive_resp	sc_card_alive_run;
+	struct iwk_init_alive_resp	sc_card_alive_init;
+
+	uint32_t		sc_tx_timer;
+	uint8_t			*sc_fw_bin;
+
+	ddi_softintr_t		sc_rx_softint_id;
+	uint32_t		sc_rx_softint_pending;
+	uint32_t		sc_need_reschedule;
+
+	/* kstats */
+	uint32_t		sc_tx_nobuf;
+	uint32_t		sc_rx_nobuf;
+	uint32_t		sc_tx_err;
+	uint32_t		sc_rx_err;
+	uint32_t		sc_tx_retries;
+} iwk_sc_t;
+
+#define	IWK_F_ATTACHED		(1 << 0)
+#define	IWK_F_CMD_DONE		(1 << 1)
+#define	IWK_F_FW_INIT		(1 << 2)
+#define	IWK_F_HW_ERR_RECOVER		(1 << 3)
+#define	IWK_F_RATE_AUTO_CTL		(1 << 4)
+#define	IWK_F_RUNNING		(1 << 5)
+#define	IWK_F_SCANNING		(1 << 6)
+
+#define	IWK_SUCCESS		0
+#define	IWK_FAIL		1
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IWK_VAR_H */