📄 spacewire.h
字号:
/* * Macros used for Spacewire bus * * COPYRIGHT (c) 2004. * Gaisler Research * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * $Id: spacewire.h,v 1.1.2.1 2006/04/24 16:58:41 joel Exp $ */#ifndef __SPACEWIRE_h#define __SPACEWIRE_htypedef struct { volatile unsigned int ctrl; volatile unsigned int status; volatile unsigned int nodeaddr; volatile unsigned int clockdiv; volatile unsigned int destkey; volatile unsigned int pad1,pad2,pad3; volatile unsigned int dma0ctrl; /* 0x20 */ volatile unsigned int dma0rxmax; volatile unsigned int dma0txdesc; volatile unsigned int dma0rxdesc;} LEON3_SPACEWIRE_Regs_Map;typedef struct { volatile unsigned int ctrl; volatile unsigned int addr;} SPACEWIRE_RXBD;typedef struct { volatile unsigned int ctrl; volatile unsigned int addr_header; volatile unsigned int len; volatile unsigned int addr_data;} SPACEWIRE_TXBD;#define SPACEWIRE_BDTABLE_SIZE 0x400#define SPACEWIRE_TXPCK_SIZE 1024#define SPACEWIRE_RXPCK_SIZE 1024#define SPACEWIRE_TXBUFS_NR 1#define SPACEWIRE_RXBUFS_NR 2#define SPW_BUFMALLOC 1#define SPW_ALIGN(p,c) ((((unsigned int)(p))+((c)-1))&~((c)-1))int spacewire_setattibutes(int minor, int nodeaddr, int proto, int dest);typedef struct { unsigned int nodeaddr; unsigned int destnodeaddr; unsigned int proto; unsigned int destkey; unsigned int maxfreq; unsigned int clkdiv; unsigned int rxmaxlen; unsigned int is_rmap,is_rxunaligned,is_rmapcrc; unsigned int txcur,rxcur,rxbufcur; unsigned int txbufsize,rxbufsize; unsigned int txbufcnt,rxbufcnt; char *ptr_rxbuf0,*ptr_txbuf0; unsigned int irq; SPACEWIRE_RXBD *rx; SPACEWIRE_TXBD *tx; char _rxtable[SPACEWIRE_BDTABLE_SIZE*2]; char _txtable[SPACEWIRE_BDTABLE_SIZE*2];#ifndef SPW_BUFMALLOC char _rxbuf0[SPACEWIRE_RXPCK_SIZE*SPACEWIRE_RXBUFS_NR]; char _txbuf0[SPACEWIRE_TXPCK_SIZE*SPACEWIRE_TXBUFS_NR];#endif volatile LEON3_SPACEWIRE_Regs_Map *regs;} SPACEWIRE_PARAM;int _SPW_READ(void *addr);#define SPW_READ(addr) _SPW_READ((void *)(addr))#define SPW_WRITE(addr,v) *addr=v#define SPACEWIRE_MAX_CORENR 2extern SPACEWIRE_PARAM LEON3_Spacewire[SPACEWIRE_MAX_CORENR]; #define SPW_PARAM(c) (LEON3_Spacewire[c])#define SPW_REG(c,r) (SPW_PARAM(c).regs->r)#define SPW_REG_CTRL(c) SPW_REG(c,ctrl)#define SPW_REG_STATUS(c) SPW_REG(c,status)#define SPW_REG_NODEADDR(c) SPW_REG(c,nodeaddr)#define SPW_CTRL_READ(c) SPW_READ(&SPW_REG_CTRL(c))#define SPW_CTRL_WRITE(c,v) SPW_WRITE(&SPW_REG_CTRL(c),v)#define SPW_STATUS_READ(c) SPW_READ(&SPW_REG_STATUS(c))#define SPW_STATUS_WRITE(c,v) SPW_WRITE(&SPW_REG_STATUS(c),v)#define SPW_LINKSTATE(c) (((c) >> 21) & 0x7)#define SPW_NODEADDR_READ(c) SPW_BYPASSCACHE(&SPW_NODEADDR(c))#define SPW_NODEADDR_WRITE(c,v) SPW_NODEADDR(c) = v#define SPACEWIRE_RXNR(c) ((c&~(SPACEWIRE_BDTABLE_SIZE-1))>>3)#define SPACEWIRE_TXNR(c) ((c&~(SPACEWIRE_BDTABLE_SIZE-1))>>4)#define SPACEWIRE_RXBD_LENGTH 0x1ffffff#define SPACEWIRE_RXBD_EN (1<<25)#define SPACEWIRE_RXBD_WR (1<<26)#define SPACEWIRE_RXBD_IE (1<<27)#define SPACEWIRE_RXBD_EEP (1<<28)#define SPACEWIRE_RXBD_EHC (1<<29)#define SPACEWIRE_RXBD_EDC (1<<30)#define SPACEWIRE_RXBD_ETR (1<<31)#define SPACEWIRE_RXBD_ERROR (SPACEWIRE_RXBD_EEP | \ SPACEWIRE_RXBD_EHC | \ SPACEWIRE_RXBD_EDC | \ SPACEWIRE_RXBD_ETR)#define SPACEWIRE_RXBD_RMAPERROR (SPACEWIRE_RXBD_EHC | SPACEWIRE_RXBD_EDC)#define SPACEWIRE_RXBD_LENGTH(c) ((c)&0xffffff)#define SPACEWIRE_PCKHEAD 2#define SPACEWIRE_TXBD_LENGTH 0xffffff#define SPACEWIRE_TXBD_EN (1<<12)#define SPACEWIRE_TXBD_WR (1<<13)#define SPACEWIRE_TXBD_IE (1<<14)#define SPACEWIRE_TXBD_LE (1<<15)#define SPACEWIRE_TXBD_ERROR (SPACEWIRE_TXBD_LE)#define SPACEWIRE_CTRL_RA (1<<31)#define SPACEWIRE_CTRL_RX (1<<30)#define SPACEWIRE_CTRL_RC (1<<29)#define SPACEWIRE_CTRL_RESET (1<<6)#define SPACEWIRE_CTRL_LINKSTART (1<<1)#define SPACEWIRE_CTRL_LINKDISABLE (1<<0)#define SPACEWIRE_DMACTRL_TXEN (1<<0)#define SPACEWIRE_DMACTRL_RXEN (1<<1)#define SPACEWIRE_DMACTRL_TXIE (1<<2)#define SPACEWIRE_DMACTRL_RXIE (1<<3)#define SPACEWIRE_DMACTRL_AI (1<<4)#define SPACEWIRE_DMACTRL_PS (1<<5)#define SPACEWIRE_DMACTRL_PR (1<<6)#define SPACEWIRE_DMACTRL_TA (1<<7)#define SPACEWIRE_DMACTRL_RA (1<<8)#define SPACEWIRE_DMACTRL_RD (1<<11)#define SPACEWIRE_DMACTRL_NS (1<<12)#define SPACEWIRE_PREPAREMASK_TX (SPACEWIRE_DMACTRL_RXEN | SPACEWIRE_DMACTRL_RXIE | SPACEWIRE_DMACTRL_PS | SPACEWIRE_DMACTRL_TA | SPACEWIRE_DMACTRL_RD)#define SPACEWIRE_PREPAREMASK_RX (SPACEWIRE_DMACTRL_TXEN | SPACEWIRE_DMACTRL_TXIE | SPACEWIRE_DMACTRL_AI | SPACEWIRE_DMACTRL_PR | SPACEWIRE_DMACTRL_RA)#define SPACEWIRE_IOCTRL_SET_NODEADDR 1#define SPACEWIRE_IOCTRL_SET_PROTOCOL 2#define SPACEWIRE_IOCTRL_SET_DESTNODEADDR 3#define SPACEWIRE_IOCTRL_GET_COREBASEADDR 4#define SPACEWIRE_IOCTRL_GET_COREIRQ 5#define SPACEWIRE_IOCTRL_SET_PACKETSIZE 6#define SPACEWIRE_IOCTRL_GETPACKET 7#define SPACEWIRE_IOCTRL_PUTPACKET 8typedef struct { unsigned int txsize, rxsize;} spw_ioctl_packetsize;typedef struct { char *buf; int buf_size; int ret_size;} spw_ioctl_packet;#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -