Root/package/broadcom-wl/src/driver/hnddma.h

1/*
2 * Generic Broadcom Home Networking Division (HND) DMA engine SW interface
3 * This supports the following chips: BCM42xx, 44xx, 47xx .
4 *
5 * Copyright 2007, Broadcom Corporation
6 * All Rights Reserved.
7 *
8 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
9 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
10 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
11 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
12 */
13
14#ifndef _hnddma_h_
15#define _hnddma_h_
16
17typedef const struct hnddma_pub hnddma_t;
18
19/* dma function type */
20typedef void (*di_detach_t)(hnddma_t *dmah);
21typedef bool (*di_txreset_t)(hnddma_t *dmah);
22typedef bool (*di_rxreset_t)(hnddma_t *dmah);
23typedef bool (*di_rxidle_t)(hnddma_t *dmah);
24typedef void (*di_txinit_t)(hnddma_t *dmah);
25typedef bool (*di_txenabled_t)(hnddma_t *dmah);
26typedef void (*di_rxinit_t)(hnddma_t *dmah);
27typedef void (*di_txsuspend_t)(hnddma_t *dmah);
28typedef void (*di_txresume_t)(hnddma_t *dmah);
29typedef bool (*di_txsuspended_t)(hnddma_t *dmah);
30typedef bool (*di_txsuspendedidle_t)(hnddma_t *dmah);
31typedef int (*di_txfast_t)(hnddma_t *dmah, void *p, bool commit);
32typedef void (*di_fifoloopbackenable_t)(hnddma_t *dmah);
33typedef bool (*di_txstopped_t)(hnddma_t *dmah);
34typedef bool (*di_rxstopped_t)(hnddma_t *dmah);
35typedef bool (*di_rxenable_t)(hnddma_t *dmah);
36typedef bool (*di_rxenabled_t)(hnddma_t *dmah);
37typedef void* (*di_rx_t)(hnddma_t *dmah);
38typedef void (*di_rxfill_t)(hnddma_t *dmah);
39typedef void (*di_txreclaim_t)(hnddma_t *dmah, bool forceall);
40typedef void (*di_rxreclaim_t)(hnddma_t *dmah);
41typedef uintptr (*di_getvar_t)(hnddma_t *dmah, const char *name);
42typedef void* (*di_getnexttxp_t)(hnddma_t *dmah, bool forceall);
43typedef void* (*di_getnextrxp_t)(hnddma_t *dmah, bool forceall);
44typedef void* (*di_peeknexttxp_t)(hnddma_t *dmah);
45typedef void (*di_txblock_t)(hnddma_t *dmah);
46typedef void (*di_txunblock_t)(hnddma_t *dmah);
47typedef uint (*di_txactive_t)(hnddma_t *dmah);
48typedef void (*di_txrotate_t)(hnddma_t *dmah);
49typedef void (*di_counterreset_t)(hnddma_t *dmah);
50typedef char* (*di_dump_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
51typedef char* (*di_dumptx_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
52typedef char* (*di_dumprx_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
53
54/* dma opsvec */
55typedef struct di_fcn_s {
56    di_detach_t detach;
57    di_txinit_t txinit;
58    di_txreset_t txreset;
59    di_txenabled_t txenabled;
60    di_txsuspend_t txsuspend;
61    di_txresume_t txresume;
62    di_txsuspended_t txsuspended;
63    di_txsuspendedidle_t txsuspendedidle;
64    di_txfast_t txfast;
65    di_txstopped_t txstopped;
66    di_txreclaim_t txreclaim;
67    di_getnexttxp_t getnexttxp;
68    di_peeknexttxp_t peeknexttxp;
69    di_txblock_t txblock;
70    di_txunblock_t txunblock;
71    di_txactive_t txactive;
72    di_txrotate_t txrotate;
73
74    di_rxinit_t rxinit;
75    di_rxreset_t rxreset;
76    di_rxidle_t rxidle;
77    di_rxstopped_t rxstopped;
78    di_rxenable_t rxenable;
79    di_rxenabled_t rxenabled;
80    di_rx_t rx;
81    di_rxfill_t rxfill;
82    di_rxreclaim_t rxreclaim;
83    di_getnextrxp_t getnextrxp;
84
85    di_fifoloopbackenable_t fifoloopbackenable;
86    di_getvar_t d_getvar;
87    di_counterreset_t counterreset;
88    di_dump_t dump;
89    di_dumptx_t dumptx;
90    di_dumprx_t dumprx;
91    uint endnum;
92} di_fcn_t;
93
94/*
95 * Exported data structure (read-only)
96 */
97/* export structure */
98struct hnddma_pub {
99    di_fcn_t di_fn; /* DMA function pointers */
100    uint txavail; /* # free tx descriptors */
101
102    /* rx error counters */
103    uint rxgiants; /* rx giant frames */
104    uint rxnobuf; /* rx out of dma descriptors */
105    /* tx error counters */
106    uint txnobuf; /* tx out of dma descriptors */
107};
108
109
110extern hnddma_t * dma_attach(osl_t *osh, char *name, sb_t *sbh, void *dmaregstx, void *dmaregsrx,
111                             uint ntxd, uint nrxd, uint rxbufsize, uint nrxpost, uint rxoffset,
112                             uint *msg_level);
113#define dma_detach(di) ((di)->di_fn.detach(di))
114#define dma_txreset(di) ((di)->di_fn.txreset(di))
115#define dma_rxreset(di) ((di)->di_fn.rxreset(di))
116#define dma_rxidle(di) ((di)->di_fn.rxidle(di))
117#define dma_txinit(di) ((di)->di_fn.txinit(di))
118#define dma_txenabled(di) ((di)->di_fn.txenabled(di))
119#define dma_rxinit(di) ((di)->di_fn.rxinit(di))
120#define dma_txsuspend(di) ((di)->di_fn.txsuspend(di))
121#define dma_txresume(di) ((di)->di_fn.txresume(di))
122#define dma_txsuspended(di) ((di)->di_fn.txsuspended(di))
123#define dma_txsuspendedidle(di) ((di)->di_fn.txsuspendedidle(di))
124#define dma_txfast(di, p, commit) ((di)->di_fn.txfast(di, p, commit))
125#define dma_fifoloopbackenable(di) ((di)->di_fn.fifoloopbackenable(di))
126#define dma_txstopped(di) ((di)->di_fn.txstopped(di))
127#define dma_rxstopped(di) ((di)->di_fn.rxstopped(di))
128#define dma_rxenable(di) ((di)->di_fn.rxenable(di))
129#define dma_rxenabled(di) ((di)->di_fn.rxenabled(di))
130#define dma_rx(di) ((di)->di_fn.rx(di))
131#define dma_rxfill(di) ((di)->di_fn.rxfill(di))
132#define dma_txreclaim(di, forceall) ((di)->di_fn.txreclaim(di, forceall))
133#define dma_rxreclaim(di) ((di)->di_fn.rxreclaim(di))
134#define dma_getvar(di, name) ((di)->di_fn.d_getvar(di, name))
135#define dma_getnexttxp(di, forceall) ((di)->di_fn.getnexttxp(di, forceall))
136#define dma_getnextrxp(di, forceall) ((di)->di_fn.getnextrxp(di, forceall))
137#define dma_peeknexttxp(di) ((di)->di_fn.peeknexttxp(di))
138#define dma_txblock(di) ((di)->di_fn.txblock(di))
139#define dma_txunblock(di) ((di)->di_fn.txunblock(di))
140#define dma_txactive(di) ((di)->di_fn.txactive(di))
141#define dma_txrotate(di) ((di)->di_fn.txrotate(di))
142#define dma_counterreset(di) ((di)->di_fn.counterreset(di))
143#ifdef BCMDBG
144#define dma_dump(di, buf, dumpring) ((di)->di_fn.dump(di, buf, dumpring))
145#define dma_dumptx(di, buf, dumpring) ((di)->di_fn.dumptx(di, buf, dumpring))
146#define dma_dumprx(di, buf, dumpring) ((di)->di_fn.dumprx(di, buf, dumpring))
147#endif
148
149/* return addresswidth allowed
150 * This needs to be done after SB attach but before dma attach.
151 * SB attach provides ability to probe backplane and dma core capabilities
152 * This info is needed by DMA_ALLOC_CONSISTENT in dma attach
153 */
154extern uint dma_addrwidth(sb_t *sbh, void *dmaregs);
155
156/* pio helpers */
157void dma_txpioloopback(osl_t *osh, dma32regs_t *);
158
159#endif /* _hnddma_h_ */
160

Archive Download this file



interactive