mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-12-05 05:49:42 +02:00
157 lines
6.5 KiB
C
157 lines
6.5 KiB
C
|
/*
|
||
|
* Generic Broadcom Home Networking Division (HND) DMA engine SW interface
|
||
|
* This supports the following chips: BCM42xx, 44xx, 47xx .
|
||
|
*
|
||
|
* Copyright 2006, Broadcom Corporation
|
||
|
* All Rights Reserved.
|
||
|
*
|
||
|
* THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
|
||
|
* KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
|
||
|
* SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
|
||
|
* FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
|
||
|
* $Id: hnddma.h,v 1.1.1.13 2006/04/08 06:13:39 honor Exp $
|
||
|
*/
|
||
|
|
||
|
#ifndef _hnddma_h_
|
||
|
#define _hnddma_h_
|
||
|
|
||
|
typedef const struct hnddma_pub hnddma_t;
|
||
|
|
||
|
/* dma function type */
|
||
|
typedef void (*di_detach_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_txreset_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_rxreset_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_rxidle_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_txinit_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_txenabled_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_rxinit_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_txsuspend_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_txresume_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_txsuspended_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_txsuspendedidle_t)(hnddma_t *dmah);
|
||
|
typedef int (*di_txfast_t)(hnddma_t *dmah, void *p, bool commit);
|
||
|
typedef void (*di_fifoloopbackenable_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_txstopped_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_rxstopped_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_rxenable_t)(hnddma_t *dmah);
|
||
|
typedef bool (*di_rxenabled_t)(hnddma_t *dmah);
|
||
|
typedef void* (*di_rx_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_rxfill_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_txreclaim_t)(hnddma_t *dmah, bool forceall);
|
||
|
typedef void (*di_rxreclaim_t)(hnddma_t *dmah);
|
||
|
typedef uintptr (*di_getvar_t)(hnddma_t *dmah, char *name);
|
||
|
typedef void* (*di_getnexttxp_t)(hnddma_t *dmah, bool forceall);
|
||
|
typedef void* (*di_getnextrxp_t)(hnddma_t *dmah, bool forceall);
|
||
|
typedef void* (*di_peeknexttxp_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_txblock_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_txunblock_t)(hnddma_t *dmah);
|
||
|
typedef uint (*di_txactive_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_txrotate_t)(hnddma_t *dmah);
|
||
|
typedef void (*di_counterreset_t)(hnddma_t *dmah);
|
||
|
typedef char* (*di_dump_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
|
||
|
typedef char* (*di_dumptx_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
|
||
|
typedef char* (*di_dumprx_t)(hnddma_t *dmah, struct bcmstrbuf *b, bool dumpring);
|
||
|
|
||
|
/* dma opsvec */
|
||
|
typedef struct di_fcn_s {
|
||
|
di_detach_t detach;
|
||
|
di_txinit_t txinit;
|
||
|
di_txreset_t txreset;
|
||
|
di_txenabled_t txenabled;
|
||
|
di_txsuspend_t txsuspend;
|
||
|
di_txresume_t txresume;
|
||
|
di_txsuspended_t txsuspended;
|
||
|
di_txsuspendedidle_t txsuspendedidle;
|
||
|
di_txfast_t txfast;
|
||
|
di_txstopped_t txstopped;
|
||
|
di_txreclaim_t txreclaim;
|
||
|
di_getnexttxp_t getnexttxp;
|
||
|
di_peeknexttxp_t peeknexttxp;
|
||
|
di_txblock_t txblock;
|
||
|
di_txunblock_t txunblock;
|
||
|
di_txactive_t txactive;
|
||
|
di_txrotate_t txrotate;
|
||
|
|
||
|
di_rxinit_t rxinit;
|
||
|
di_rxreset_t rxreset;
|
||
|
di_rxidle_t rxidle;
|
||
|
di_rxstopped_t rxstopped;
|
||
|
di_rxenable_t rxenable;
|
||
|
di_rxenabled_t rxenabled;
|
||
|
di_rx_t rx;
|
||
|
di_rxfill_t rxfill;
|
||
|
di_rxreclaim_t rxreclaim;
|
||
|
di_getnextrxp_t getnextrxp;
|
||
|
|
||
|
di_fifoloopbackenable_t fifoloopbackenable;
|
||
|
di_getvar_t d_getvar;
|
||
|
di_counterreset_t counterreset;
|
||
|
di_dump_t dump;
|
||
|
di_dumptx_t dumptx;
|
||
|
di_dumprx_t dumprx;
|
||
|
uint endnum;
|
||
|
} di_fcn_t;
|
||
|
|
||
|
/*
|
||
|
* Exported data structure (read-only)
|
||
|
*/
|
||
|
/* export structure */
|
||
|
struct hnddma_pub {
|
||
|
di_fcn_t di_fn; /* DMA function pointers */
|
||
|
uint txavail; /* # free tx descriptors */
|
||
|
|
||
|
/* rx error counters */
|
||
|
uint rxgiants; /* rx giant frames */
|
||
|
uint rxnobuf; /* rx out of dma descriptors */
|
||
|
/* tx error counters */
|
||
|
uint txnobuf; /* tx out of dma descriptors */
|
||
|
};
|
||
|
|
||
|
|
||
|
extern hnddma_t * dma_attach(osl_t *osh, char *name, sb_t *sbh, void *dmaregstx, void *dmaregsrx,
|
||
|
uint ntxd, uint nrxd, uint rxbufsize, uint nrxpost, uint rxoffset,
|
||
|
uint *msg_level);
|
||
|
#define dma_detach(di) ((di)->di_fn.detach(di))
|
||
|
#define dma_txreset(di) ((di)->di_fn.txreset(di))
|
||
|
#define dma_rxreset(di) ((di)->di_fn.rxreset(di))
|
||
|
#define dma_rxidle(di) ((di)->di_fn.rxidle(di))
|
||
|
#define dma_txinit(di) ((di)->di_fn.txinit(di))
|
||
|
#define dma_txenabled(di) ((di)->di_fn.txenabled(di))
|
||
|
#define dma_rxinit(di) ((di)->di_fn.rxinit(di))
|
||
|
#define dma_txsuspend(di) ((di)->di_fn.txsuspend(di))
|
||
|
#define dma_txresume(di) ((di)->di_fn.txresume(di))
|
||
|
#define dma_txsuspended(di) ((di)->di_fn.txsuspended(di))
|
||
|
#define dma_txsuspendedidle(di) ((di)->di_fn.txsuspendedidle(di))
|
||
|
#define dma_txfast(di, p, commit) ((di)->di_fn.txfast(di, p, commit))
|
||
|
#define dma_fifoloopbackenable(di) ((di)->di_fn.fifoloopbackenable(di))
|
||
|
#define dma_txstopped(di) ((di)->di_fn.txstopped(di))
|
||
|
#define dma_rxstopped(di) ((di)->di_fn.rxstopped(di))
|
||
|
#define dma_rxenable(di) ((di)->di_fn.rxenable(di))
|
||
|
#define dma_rxenabled(di) ((di)->di_fn.rxenabled(di))
|
||
|
#define dma_rx(di) ((di)->di_fn.rx(di))
|
||
|
#define dma_rxfill(di) ((di)->di_fn.rxfill(di))
|
||
|
#define dma_txreclaim(di, forceall) ((di)->di_fn.txreclaim(di, forceall))
|
||
|
#define dma_rxreclaim(di) ((di)->di_fn.rxreclaim(di))
|
||
|
#define dma_getvar(di, name) ((di)->di_fn.d_getvar(di, name))
|
||
|
#define dma_getnexttxp(di, forceall) ((di)->di_fn.getnexttxp(di, forceall))
|
||
|
#define dma_getnextrxp(di, forceall) ((di)->di_fn.getnextrxp(di, forceall))
|
||
|
#define dma_peeknexttxp(di) ((di)->di_fn.peeknexttxp(di))
|
||
|
#define dma_txblock(di) ((di)->di_fn.txblock(di))
|
||
|
#define dma_txunblock(di) ((di)->di_fn.txunblock(di))
|
||
|
#define dma_txactive(di) ((di)->di_fn.txactive(di))
|
||
|
#define dma_txrotate(di) ((di)->di_fn.txrotate(di))
|
||
|
#define dma_counterreset(di) ((di)->di_fn.counterreset(di))
|
||
|
|
||
|
#define DMA_DUMP_SIZE 2048
|
||
|
/* return addresswidth allowed
|
||
|
* This needs to be done after SB attach but before dma attach.
|
||
|
* SB attach provides ability to probe backplane and dma core capabilities
|
||
|
* This info is needed by DMA_ALLOC_CONSISTENT in dma attach
|
||
|
*/
|
||
|
extern uint dma_addrwidth(sb_t *sbh, void *dmaregs);
|
||
|
|
||
|
/* pio helpers */
|
||
|
void dma_txpioloopback(osl_t *osh, dma32regs_t *);
|
||
|
|
||
|
#endif /* _hnddma_h_ */
|