devices/ccat/CCatDefinitions.h
branchstable-1.5
changeset 2550 7e25950ea941
parent 2549 933a1b36b05f
child 2551 000da5069f1a
--- a/devices/ccat/CCatDefinitions.h	Fri Apr 04 08:32:09 2014 +0200
+++ b/devices/ccat/CCatDefinitions.h	Fri Apr 04 08:59:37 2014 +0200
@@ -1,1 +1,249 @@
-../../../ccat/CCatDefinitions.h
\ No newline at end of file
+/**
+    Network Driver for Beckhoff CCAT communication controller
+    Copyright (C) 2014  Beckhoff Automation GmbH
+    Author: Patrick Bruenn <p.bruenn@beckhoff.com>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+#ifndef _CCAT_DEFINITIONS_H_
+#define _CCAT_DEFINITIONS_H_
+
+#ifndef WINDOWS
+#include <linux/kernel.h>
+typedef uint8_t BYTE;
+typedef uint32_t ULONG;
+typedef uint16_t USHORT;
+typedef uint8_t UINT8;
+typedef uint16_t UINT16;
+typedef uint32_t UINT32;
+typedef uint64_t UINT64;
+
+#undef pr_fmt
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#endif
+
+typedef struct _ETHERNET_ADDRESS
+{
+	UINT8 b[6];
+}ETHERNET_ADDRESS;
+
+
+typedef uint64_t LIST_ENTRY;
+
+typedef enum CCatInfoTypes
+{
+	CCATINFO_NOTUSED				= 0,
+	CCATINFO_BLOCK					= 1,
+	CCATINFO_ETHERCAT_SLAVE		= 2,
+	CCATINFO_ETHERCAT_MASTER	= 3,
+	CCATINFO_ETHERNET_MAC		= 4,
+	CCATINFO_ETHERNET_SWITCH	= 5,
+	CCATINFO_SERCOS3				= 6,
+	CCATINFO_PROFIBUS				= 7,
+	CCATINFO_CAN_CONTROLLER		= 8,
+	CCATINFO_KBUS_MASTER			= 9,
+	CCATINFO_IP_LINK				= 10,
+	CCATINFO_SPI_MASTER			= 11,
+	CCATINFO_I2C_MASTER			= 12,
+	CCATINFO_GPIO					= 13,
+	CCATINFO_DRIVEIP				= 14,
+	CCATINFO_EPCS_PROM			= 15,
+	CCATINFO_SYSTIME				= 16,
+	CCATINFO_INTCTRL				= 17,
+	CCATINFO_EEPROM				= 18,
+	CCATINFO_DMA					= 19,
+	CCATINFO_ETHERCAT_MASTER_DMA	= 20,
+	CCATINFO_ETHERNET_MAC_DMA		= 21,
+	CCATINFO_SRAM					= 22,
+	CCATINFO_COPY_BLOCK			= 23,
+	CCATINFO_MAX
+} _CCatInfoTypes;
+
+typedef struct
+{
+	USHORT	eCCatInfoType;
+	USHORT	nRevision;
+	union
+	{
+		ULONG		nParam;
+		struct 
+		{
+			BYTE nMaxEntries;
+			BYTE compileDay;
+			BYTE compileMonth;
+			BYTE compileYear;
+		};
+		struct 
+		{
+			BYTE txDmaChn;
+			BYTE rxDmaChn;
+		};
+		struct
+		{
+			BYTE		nExternalDataSize	: 2;
+			BYTE		reserved1			: 6;
+			BYTE		nRamSize; //size = 2^ramSize
+			USHORT	reserved2;
+		};
+	};
+	ULONG		nAddr;
+	ULONG		nSize;
+} CCatInfoBlock, *PCCatInfoBlock;
+
+typedef struct _CCAT_HEADER_TAG
+{
+	UINT16	length; // not used in header // required for 64 Bit Alignment in CCAT
+	UINT8		port0				: 1;
+	UINT8		port1				: 1;					
+	UINT8		reserved1		: 6;
+	UINT8		tsEnable			: 1;
+	UINT8		reserved2		: 7;
+	UINT32	sent				: 1;
+	UINT32	reserved3		: 31;
+	UINT64   TimeStamp;	
+}CCAT_HEADER_TAG;
+
+typedef struct _CCatDmaTxFrame
+{
+	LIST_ENTRY			list;
+	CCAT_HEADER_TAG	head;
+	UINT8					data[0x800-sizeof(LIST_ENTRY)-sizeof(CCAT_HEADER_TAG)];
+}CCatDmaTxFrame;
+
+typedef struct _CCatRxDesc
+{
+	union
+	{
+		struct 
+		{
+			UINT32			nextDesc		: 24;
+			UINT32			reserved1	: 7;
+			UINT32			nextValid	: 1;
+			UINT32			received		: 1;
+			UINT32			reserved2	: 31;
+		};
+		UINT32			head[2];
+	};
+	union
+	{
+		struct
+		{
+			UINT16		length		: 12;
+			UINT16		reserved3	: 4;
+		};
+		UINT16 uLength;
+	};
+	UINT16		port;
+	UINT32		reserved4;
+	UINT64		timestamp;
+	UINT8			data[0x7e8];
+}CCatRxDesc;
+
+typedef struct _CCatMacRegs
+{
+	union
+	{
+		struct
+		{
+			UINT8			frameLenErrCnt;
+			UINT8			rxErrCnt;
+			UINT8			crcErrCnt;
+			UINT8			linkLostErrCnt;
+		};
+		UINT32 errCnt;
+	};
+	UINT32			reserved1;
+	UINT8				dropFrameErrCnt; // 0x08
+	UINT8				reserved2[7];	
+	UINT32			txFrameCnt;		  // 0x10
+	UINT32			rxFrameCnt;		  // 0x14
+	UINT32   reserved3[2];
+	UINT8    txFifoLevel  : 7;
+	UINT8    reserved4    : 1;
+	UINT8    reserved5[7];
+	UINT8    txErrMemFull;
+	UINT8    reserved6[7];
+	UINT32   reserved8[18];
+	UINT8    miiConnected;
+}CCatMacRegs;
+
+typedef struct _CCatMii
+{
+	USHORT		startMiCycle	: 1;
+	USHORT		reserved1		: 6;
+	USHORT		cmdErr			: 1;
+#define MII_CMD_READ 1
+#define MII_CMD_WRITE 2
+	USHORT		cmd				: 2;
+	USHORT		reserved2		: 6;
+	USHORT		phyAddr			: 5;
+	USHORT		reserved3		: 3;
+	USHORT		phyReg			: 5;
+	USHORT		reserved4		: 3;
+	USHORT		phyWriteData;
+	USHORT		phyReadData;
+	ETHERNET_ADDRESS	macAddr;
+	USHORT		macFilterEnabled		: 1;
+	USHORT		reserved6				: 7;
+	USHORT		linkStatus				: 1;
+	USHORT		reserved7				: 7;
+	ULONG       led0;
+	ULONG       led1;
+	ULONG       led2[2];
+	ULONG       systimeInsertion[4];
+	ULONG		interruptState[2];
+	ULONG		interruptMask[2];	
+}CCatMii;
+
+typedef struct _CCatDmaTxFifo
+{
+	UINT32   startAddr      : 24;
+	UINT32   numQuadWords   : 8;
+	UINT32   reserved1;
+	UINT8    fifoReset;
+	UINT8    reserved2[7];
+}CCatDmaTxFifo;
+
+typedef struct _CCatDmaRxActBuf
+{
+	union
+	{
+		struct 
+		{
+			UINT32			startAddr	: 24;
+			UINT32			reserved1	: 7;
+			UINT32			nextValid	: 1;
+			UINT32			lastAddr		: 24;
+			UINT32			reserved2	: 8;
+			UINT32			FifoLevel	: 24;
+			UINT32			bufferLevel	: 8;
+			UINT32			nextAddr;
+		};
+		UINT32			rxActBuf;
+	};
+}CCatDmaRxActBuf;
+
+typedef struct _CCatInfoBlockOffs
+{
+	UINT32			reserved;
+	UINT32			nMMIOffs;
+	UINT32			nTxFifoOffs;
+	UINT32			nMacRegOffs;
+	UINT32			nRxMemOffs;
+	UINT32			nTxMemOffs;
+	UINT32			nMiscOffs;
+} CCatInfoBlockOffs;
+#endif /* #ifndef _CCAT_DEFINITIONS_H_ */
+