262 lines
6.8 KiB
C
262 lines
6.8 KiB
C
/*
|
|
* MSGBUF network driver ioctl/indication encoding
|
|
* Broadcom 802.11abg Networking Device Driver
|
|
*
|
|
* Definitions subject to change without notice.
|
|
*
|
|
* Copyright (C) 1999-2014, Broadcom Corporation
|
|
*
|
|
* Unless you and Broadcom execute a separate written software license
|
|
* agreement governing use of this software, this software is licensed to you
|
|
* under the terms of the GNU General Public License version 2 (the "GPL"),
|
|
* available at http://www.broadcom.com/licenses/GPLv2.php, with the
|
|
* following added to such license:
|
|
*
|
|
* As a special exception, the copyright holders of this software give you
|
|
* permission to link this software with independent modules, and to copy and
|
|
* distribute the resulting executable under terms of your choice, provided that
|
|
* you also meet, for each linked independent module, the terms and conditions of
|
|
* the license of that module. An independent module is a module which is not
|
|
* derived from this software. The special exception does not apply to any
|
|
* modifications of the software.
|
|
*
|
|
* Notwithstanding the above, under no circumstances may you combine this
|
|
* software in any way with any other Broadcom software provided under a license
|
|
* other than the GPL, without Broadcom's express prior written consent.
|
|
*
|
|
* $Id: bcmmsgbuf.h 452261 2014-01-29 19:30:23Z $
|
|
*/
|
|
#ifndef _bcmmsgbuf_h_
|
|
#define _bcmmsgbuf_h_
|
|
#include <proto/ethernet.h>
|
|
#include <wlioctl.h>
|
|
#include <bcmpcie.h>
|
|
#define MSGBUF_MAX_MSG_SIZE ETHER_MAX_LEN
|
|
#define DNGL_TO_HOST_MSGBUF_SZ (8 * 1024) /* Host side ring */
|
|
#define HOST_TO_DNGL_MSGBUF_SZ (8 * 1024) /* Host side ring */
|
|
#define DTOH_LOCAL_MSGBUF_SZ (8 * 1024) /* dongle side ring */
|
|
#define HTOD_LOCAL_MSGBUF_SZ (8 * 1024) /* dongle side ring */
|
|
#define HTOD_LOCAL_CTRLRING_SZ (1 * 1024) /* H2D control ring dongle side */
|
|
#define DTOH_LOCAL_CTRLRING_SZ (1 * 1024) /* D2H control ring dongle side */
|
|
#define HOST_TO_DNGL_CTRLRING_SZ (1 * 1024) /* Host to Device ctrl ring on host */
|
|
#define DNGL_TO_HOST_CTRLRING_SZ (1 * 1024) /* Device to host ctrl ring on host */
|
|
|
|
enum {
|
|
DNGL_TO_HOST_MSGBUF,
|
|
HOST_TO_DNGL_MSGBUF
|
|
};
|
|
|
|
enum {
|
|
MSG_TYPE_IOCTL_REQ = 0x1,
|
|
MSG_TYPE_IOCTLPTR_REQ,
|
|
MSG_TYPE_IOCTL_CMPLT,
|
|
MSG_TYPE_WL_EVENT,
|
|
MSG_TYPE_TX_POST,
|
|
MSG_TYPE_RXBUF_POST,
|
|
MSG_TYPE_RX_CMPLT,
|
|
MSG_TYPE_TX_STATUS,
|
|
MSG_TYPE_EVENT_PYLD,
|
|
MSG_TYPE_IOCT_PYLD, /* used only internally inside dongle */
|
|
MSG_TYPE_RX_PYLD, /* used only internally inside dongle */
|
|
MSG_TYPE_TX_PYLD, /* To be removed once split header is implemented */
|
|
MSG_TYPE_HOST_EVNT,
|
|
MSG_TYPE_LOOPBACK = 15, /* dongle loops the message back to host */
|
|
MSG_TYPE_LPBK_DMAXFER = 16, /* dongle DMA loopback */
|
|
MSG_TYPE_TX_BATCH_POST = 17
|
|
};
|
|
|
|
enum {
|
|
HOST_TO_DNGL_DATA,
|
|
HOST_TO_DNGL_CTRL,
|
|
DNGL_TO_HOST_DATA,
|
|
DNGL_TO_HOST_CTRL
|
|
};
|
|
|
|
#define MESSAGE_PAYLOAD(a) (((a) == MSG_TYPE_IOCT_PYLD) | ((a) == MSG_TYPE_RX_PYLD) |\
|
|
((a) == MSG_TYPE_EVENT_PYLD) | ((a) == MSG_TYPE_TX_PYLD))
|
|
#define MESSAGE_CTRLPATH(a) (((a) == MSG_TYPE_IOCTL_REQ) | ((a) == MSG_TYPE_IOCTLPTR_REQ) |\
|
|
((a) == MSG_TYPE_IOCTL_CMPLT) | ((a) == MSG_TYPE_HOST_EVNT) |\
|
|
((a) == MSG_TYPE_LOOPBACK) | ((a) == MSG_TYPE_WL_EVENT))
|
|
|
|
/* IOCTL req Hdr */
|
|
/* cmn Msg Hdr */
|
|
typedef struct cmn_msg_hdr {
|
|
uint16 msglen;
|
|
uint8 msgtype;
|
|
uint8 ifidx;
|
|
union seqn {
|
|
uint32 seq_id;
|
|
struct sequence {
|
|
uint16 seq_no;
|
|
uint8 ring_id;
|
|
uint8 rsvd;
|
|
} seq;
|
|
} u;
|
|
} cmn_msg_hdr_t;
|
|
|
|
typedef struct ioctl_req_hdr {
|
|
uint32 pkt_id; /* Packet ID */
|
|
uint32 cmd; /* IOCTL ID */
|
|
uint16 retbuf_len;
|
|
uint16 buflen;
|
|
uint16 xt_id; /* transaction ID */
|
|
uint16 rsvd[1];
|
|
} ioctl_req_hdr_t;
|
|
|
|
/* ret buf struct */
|
|
typedef struct ret_buf_ptr {
|
|
uint32 low_addr;
|
|
uint32 high_addr;
|
|
} ret_buf_t;
|
|
|
|
/* Complete msgbuf hdr for ioctl from host to dongle */
|
|
typedef struct ioct_reqst_hdr {
|
|
cmn_msg_hdr_t msg;
|
|
ioctl_req_hdr_t ioct_hdr;
|
|
ret_buf_t ret_buf;
|
|
} ioct_reqst_hdr_t;
|
|
|
|
typedef struct ioctptr_reqst_hdr {
|
|
cmn_msg_hdr_t msg;
|
|
ioctl_req_hdr_t ioct_hdr;
|
|
ret_buf_t ret_buf;
|
|
ret_buf_t ioct_buf;
|
|
} ioctptr_reqst_hdr_t;
|
|
|
|
/* ioctl response header */
|
|
typedef struct ioct_resp_hdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint32 pkt_id;
|
|
uint32 status;
|
|
uint32 ret_len;
|
|
uint32 inline_data;
|
|
uint16 xt_id; /* transaction ID */
|
|
uint16 rsvd[1];
|
|
} ioct_resp_hdr_t;
|
|
|
|
/* ioct resp header used in dongle */
|
|
/* ret buf hdr will be stripped off inside dongle itself */
|
|
typedef struct msgbuf_ioctl_resp {
|
|
ioct_resp_hdr_t ioct_hdr;
|
|
ret_buf_t ret_buf; /* ret buf pointers */
|
|
} msgbuf_ioct_resp_t;
|
|
|
|
/* WL evet hdr info */
|
|
typedef struct wl_event_hdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint16 event;
|
|
uint8 flags;
|
|
uint8 rsvd;
|
|
uint16 retbuf_len;
|
|
uint16 rsvd1;
|
|
uint32 rxbufid;
|
|
} wl_event_hdr_t;
|
|
|
|
#define TXDESCR_FLOWID_PCIELPBK_1 0xFF
|
|
#define TXDESCR_FLOWID_PCIELPBK_2 0xFE
|
|
|
|
typedef struct txbatch_lenptr_tup {
|
|
uint32 pktid;
|
|
uint16 pktlen;
|
|
uint16 rsvd;
|
|
ret_buf_t ret_buf; /* ret buf pointers */
|
|
} txbatch_lenptr_tup_t;
|
|
|
|
typedef struct txbatch_cmn_msghdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint8 priority;
|
|
uint8 hdrlen;
|
|
uint8 pktcnt;
|
|
uint8 flowid;
|
|
uint8 txhdr[ETHER_HDR_LEN];
|
|
uint16 rsvd;
|
|
} txbatch_cmn_msghdr_t;
|
|
|
|
typedef struct txbatch_msghdr {
|
|
txbatch_cmn_msghdr_t txcmn;
|
|
txbatch_lenptr_tup_t tx_tup[0]; /* Based on packet count */
|
|
} txbatch_msghdr_t;
|
|
|
|
/* TX desc posting header */
|
|
typedef struct tx_lenptr_tup {
|
|
uint16 pktlen;
|
|
uint16 rsvd;
|
|
ret_buf_t ret_buf; /* ret buf pointers */
|
|
} tx_lenptr_tup_t;
|
|
|
|
typedef struct txdescr_cmn_msghdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint8 priority;
|
|
uint8 hdrlen;
|
|
uint8 descrcnt;
|
|
uint8 flowid;
|
|
uint32 pktid;
|
|
} txdescr_cmn_msghdr_t;
|
|
|
|
typedef struct txdescr_msghdr {
|
|
txdescr_cmn_msghdr_t txcmn;
|
|
uint8 txhdr[ETHER_HDR_LEN];
|
|
uint16 rsvd;
|
|
tx_lenptr_tup_t tx_tup[0]; /* Based on descriptor count */
|
|
} txdescr_msghdr_t;
|
|
|
|
/* Tx status header info */
|
|
typedef struct txstatus_hdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint32 pktid;
|
|
} txstatus_hdr_t;
|
|
/* RX bufid-len-ptr tuple */
|
|
typedef struct rx_lenptr_tup {
|
|
uint32 rxbufid;
|
|
uint16 len;
|
|
uint16 rsvd2;
|
|
ret_buf_t ret_buf; /* ret buf pointers */
|
|
} rx_lenptr_tup_t;
|
|
/* Rx descr Post hdr info */
|
|
typedef struct rxdesc_msghdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint16 rsvd0;
|
|
uint8 rsvd1;
|
|
uint8 descnt;
|
|
rx_lenptr_tup_t rx_tup[0];
|
|
} rxdesc_msghdr_t;
|
|
|
|
/* RX complete tuples */
|
|
typedef struct rxcmplt_tup {
|
|
uint16 retbuf_len;
|
|
uint16 data_offset;
|
|
uint32 rxstatus0;
|
|
uint32 rxstatus1;
|
|
uint32 rxbufid;
|
|
} rxcmplt_tup_t;
|
|
/* RX complete messge hdr */
|
|
typedef struct rxcmplt_hdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint16 rsvd0;
|
|
uint16 rxcmpltcnt;
|
|
rxcmplt_tup_t rx_tup[0];
|
|
} rxcmplt_hdr_t;
|
|
typedef struct hostevent_hdr {
|
|
cmn_msg_hdr_t msg;
|
|
uint32 evnt_pyld;
|
|
} hostevent_hdr_t;
|
|
|
|
typedef struct dma_xfer_params {
|
|
uint32 src_physaddr_hi;
|
|
uint32 src_physaddr_lo;
|
|
uint32 dest_physaddr_hi;
|
|
uint32 dest_physaddr_lo;
|
|
uint32 len;
|
|
uint32 srcdelay;
|
|
uint32 destdelay;
|
|
} dma_xfer_params_t;
|
|
|
|
enum {
|
|
HOST_EVENT_CONS_CMD = 1
|
|
};
|
|
|
|
/* defines for flags */
|
|
#define MSGBUF_IOC_ACTION_MASK 0x1
|
|
|
|
#endif /* _bcmmsgbuf_h_ */
|