📄 hnddma.h
字号:
/* * Generic Broadcom Home Networking Division (HND) DMA engine SW interface * This supports the following chips: BCM42xx, 44xx, 47xx . * * Copyright 2005-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$ */#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, char *buf, bool dumpring);typedef char* (*di_dumptx_t)(hnddma_t *dmah, char *buf, bool dumpring);typedef char* (*di_dumprx_t)(hnddma_t *dmah, char *buf, 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))/* return addresswidth allowed */extern uint dma_addrwidth(sb_t *sbh, void *dmaregs);/* pio helpers */void dma_rxpiomode(dma32regs_t *);void dma_txpioloopback(dma32regs_t *);#endif /* _hnddma_h_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -