author | Florian Pose <fp@igh-essen.com> |
Wed, 22 Jun 2016 13:50:35 +0200 | |
changeset 2651 | 524891614789 |
parent 2589 | 2b9c78543663 |
permissions | -rw-r--r-- |
2589
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
1 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
2 |
Network Driver for Beckhoff CCAT communication controller |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
3 |
Copyright (C) 2014 Beckhoff Automation GmbH |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
4 |
Author: Patrick Bruenn <p.bruenn@beckhoff.com> |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
5 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
6 |
This program is free software; you can redistribute it and/or modify |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
7 |
it under the terms of the GNU General Public License as published by |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
8 |
the Free Software Foundation; either version 2 of the License, or |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
9 |
(at your option) any later version. |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
10 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
11 |
This program is distributed in the hope that it will be useful, |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
12 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
13 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
14 |
GNU General Public License for more details. |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
15 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
16 |
You should have received a copy of the GNU General Public License along |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
17 |
with this program; if not, write to the Free Software Foundation, Inc., |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
18 |
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
19 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
20 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
21 |
#ifndef _CCAT_H_ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
22 |
#define _CCAT_H_ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
23 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
24 |
#include <linux/cdev.h> |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
25 |
#include <linux/hrtimer.h> |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
26 |
#include <linux/kernel.h> |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
27 |
#include <linux/pci.h> |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
28 |
#include "../ecdev.h" |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
29 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
30 |
#define DRV_EXTRAVERSION "-ec" |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
31 |
#define DRV_VERSION "0.10" DRV_EXTRAVERSION |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
32 |
#define DRV_DESCRIPTION "Beckhoff CCAT Ethernet/EtherCAT Network Driver" |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
33 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
34 |
#undef pr_fmt |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
35 |
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
36 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
37 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
38 |
* CCAT function type identifiers (u16) |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
39 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
40 |
enum ccat_info_t { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
41 |
CCATINFO_NOTUSED = 0, |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
42 |
CCATINFO_EPCS_PROM = 0xf, |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
43 |
CCATINFO_ETHERCAT_MASTER_DMA = 0x14, |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
44 |
CCATINFO_COPY_BLOCK = 0x17, |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
45 |
CCATINFO_MAX |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
46 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
47 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
48 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
49 |
* struct ccat_bar - CCAT PCI Base Address Register(BAR) configuration |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
50 |
* @start: start address of this BAR |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
51 |
* @end: end address of this BAR |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
52 |
* @len: length of this BAR |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
53 |
* @flags: flags set on this BAR |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
54 |
* @ioaddr: ioremapped address of this bar |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
55 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
56 |
struct ccat_bar { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
57 |
unsigned long start; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
58 |
unsigned long end; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
59 |
unsigned long len; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
60 |
unsigned long flags; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
61 |
void __iomem *ioaddr; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
62 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
63 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
64 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
65 |
* struct ccat_dma - CCAT DMA channel configuration |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
66 |
* @phys: device-viewed address(physical) of the associated DMA memory |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
67 |
* @virt: CPU-viewed address(virtual) of the associated DMA memory |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
68 |
* @size: number of bytes in the associated DMA memory |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
69 |
* @channel: CCAT DMA channel number |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
70 |
* @dev: valid struct device pointer |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
71 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
72 |
struct ccat_dma { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
73 |
dma_addr_t phys; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
74 |
void *virt; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
75 |
size_t size; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
76 |
size_t channel; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
77 |
struct device *dev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
78 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
79 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
80 |
extern void ccat_dma_free(struct ccat_dma *const dma); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
81 |
extern int ccat_dma_init(struct ccat_dma *const dma, size_t channel, |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
82 |
void __iomem * const ioaddr, struct device *const dev); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
83 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
84 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
85 |
* struct ccat_eth_frame - Ethernet frame with DMA descriptor header in front |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
86 |
* @reservedn: is not used and should always be set to 0 |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
87 |
* @received: used for reception, is set to 1 by the CCAT when data was written |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
88 |
* @length: number of bytes in the frame including the DMA header |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
89 |
* @sent: is set to 1 by the CCAT when data was transmitted |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
90 |
* @timestamp: a 64 bit EtherCAT timestamp |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
91 |
* @data: the bytes of the ethernet frame |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
92 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
93 |
struct ccat_eth_frame { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
94 |
__le32 reserved1; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
95 |
__le32 rx_flags; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
96 |
#define CCAT_FRAME_RECEIVED 0x1 |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
97 |
__le16 length; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
98 |
__le16 reserved3; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
99 |
__le32 tx_flags; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
100 |
#define CCAT_FRAME_SENT 0x1 |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
101 |
__le64 timestamp; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
102 |
u8 data[0x800 - 3 * sizeof(u64)]; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
103 |
#define CCAT_ETH_FRAME_HEAD_LEN offsetof(struct ccat_eth_frame, data) |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
104 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
105 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
106 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
107 |
* struct ccat_eth_register - CCAT register addresses in the PCI BAR |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
108 |
* @mii: address of the CCAT management interface register |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
109 |
* @tx_fifo: address of the CCAT TX DMA fifo register |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
110 |
* @rx_fifo: address of the CCAT RX DMA fifo register |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
111 |
* @mac: address of the CCAT media access control register |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
112 |
* @rx_mem: address of the CCAT register holding the RX DMA address |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
113 |
* @tx_mem: address of the CCAT register holding the TX DMA address |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
114 |
* @misc: address of a CCAT register holding miscellaneous information |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
115 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
116 |
struct ccat_eth_register { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
117 |
void __iomem *mii; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
118 |
void __iomem *tx_fifo; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
119 |
void __iomem *rx_fifo; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
120 |
void __iomem *mac; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
121 |
void __iomem *rx_mem; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
122 |
void __iomem *tx_mem; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
123 |
void __iomem *misc; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
124 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
125 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
126 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
127 |
* struct ccat_eth_dma_fifo - CCAT RX or TX DMA fifo |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
128 |
* @add: callback used to add a frame to this fifo |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
129 |
* @reg: PCI register address of this DMA fifo |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
130 |
* @dma: information about the associated DMA memory |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
131 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
132 |
struct ccat_eth_dma_fifo { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
133 |
void (*add) (struct ccat_eth_dma_fifo *, struct ccat_eth_frame *); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
134 |
void __iomem *reg; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
135 |
const struct ccat_eth_frame *end; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
136 |
struct ccat_eth_frame *next; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
137 |
struct ccat_dma dma; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
138 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
139 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
140 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
141 |
* struct ccat_device - CCAT device representation |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
142 |
* @pdev: pointer to the pci object allocated by the kernel |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
143 |
* @ethdev: CCAT Ethernet/EtherCAT Master (with DMA) function, NULL if function is not available or failed to initialize |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
144 |
* @update: CCAT Update function, NULL if function is not available or failed to initialize |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
145 |
* @bar [0] and [2] holding information about PCI BARs 0 and 2. |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
146 |
* |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
147 |
* One instance of a ccat_device should represent a physical CCAT. Since |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
148 |
* a CCAT is implemented as FPGA the available functions can vary so |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
149 |
* the function object pointers can be NULL. |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
150 |
* Extra note: you will recognize that PCI BAR1 is not used and is a |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
151 |
* waste of memory, thats true but right now, its very easy to use it |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
152 |
* this way. So we might optimize it later. |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
153 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
154 |
struct ccat_device { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
155 |
struct pci_dev *pdev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
156 |
struct ccat_eth_priv *ethdev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
157 |
struct ccat_update *update; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
158 |
struct ccat_bar bar[3]; //TODO optimize this |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
159 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
160 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
161 |
struct ccat_info_block { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
162 |
u16 type; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
163 |
u16 rev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
164 |
union { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
165 |
u32 config; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
166 |
struct { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
167 |
u8 tx_dma_chan; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
168 |
u8 rx_dma_chan; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
169 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
170 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
171 |
u32 addr; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
172 |
u32 size; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
173 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
174 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
175 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
176 |
* struct ccat_eth_priv - CCAT Ethernet/EtherCAT Master function (netdev) |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
177 |
* @ccatdev: pointer to the parent struct ccat_device |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
178 |
* @netdev: the net_device structure used by the kernel networking stack |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
179 |
* @info: holds a copy of the CCAT Ethernet/EtherCAT Master function information block (read from PCI config space) |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
180 |
* @reg: register addresses in PCI config space of the Ethernet/EtherCAT Master function |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
181 |
* @rx_fifo: DMA fifo used for RX DMA descriptors |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
182 |
* @tx_fifo: DMA fifo used for TX DMA descriptors |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
183 |
* @poll_timer: interval timer used to poll CCAT for events like link changed, rx done, tx done |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
184 |
* @rx_bytes: number of bytes received -> reported with ndo_get_stats64() |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
185 |
* @rx_dropped: number of received frames, which were dropped -> reported with ndo_get_stats64() |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
186 |
* @tx_bytes: number of bytes send -> reported with ndo_get_stats64() |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
187 |
* @tx_dropped: number of frames requested to send, which were dropped -> reported with ndo_get_stats64() |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
188 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
189 |
struct ccat_eth_priv { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
190 |
const struct ccat_device *ccatdev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
191 |
struct net_device *netdev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
192 |
struct ccat_info_block info; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
193 |
struct ccat_eth_register reg; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
194 |
struct ccat_eth_dma_fifo rx_fifo; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
195 |
struct ccat_eth_dma_fifo tx_fifo; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
196 |
struct hrtimer poll_timer; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
197 |
atomic64_t rx_bytes; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
198 |
atomic64_t rx_dropped; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
199 |
atomic64_t tx_bytes; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
200 |
atomic64_t tx_dropped; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
201 |
ec_device_t *ecdev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
202 |
void (*carrier_off) (struct net_device * netdev); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
203 |
bool (*carrier_ok) (const struct net_device * netdev); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
204 |
void (*carrier_on) (struct net_device * netdev); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
205 |
void (*kfree_skb_any) (struct sk_buff * skb); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
206 |
void (*start_queue) (struct net_device * netdev); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
207 |
void (*stop_queue) (struct net_device * netdev); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
208 |
void (*unregister) (struct net_device * netdev); |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
209 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
210 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
211 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
212 |
* same as: typedef struct _CCatInfoBlockOffs from CCatDefinitions.h |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
213 |
* TODO add some checking facility outside of the linux tree |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
214 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
215 |
struct ccat_mac_infoblock { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
216 |
u32 reserved; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
217 |
u32 mii; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
218 |
u32 tx_fifo; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
219 |
u32 mac; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
220 |
u32 rx_mem; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
221 |
u32 tx_mem; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
222 |
u32 misc; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
223 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
224 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
225 |
struct ccat_mac_register { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
226 |
/** MAC error register @+0x0 */ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
227 |
u8 frame_len_err; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
228 |
u8 rx_err; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
229 |
u8 crc_err; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
230 |
u8 link_lost_err; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
231 |
u32 reserved1; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
232 |
/** Buffer overflow errors @+0x8 */ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
233 |
u8 rx_mem_full; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
234 |
u8 reserved2[7]; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
235 |
/** MAC frame counter @+0x10 */ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
236 |
u32 tx_frames; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
237 |
u32 rx_frames; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
238 |
u64 reserved3; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
239 |
/** MAC fifo level @+0x20 */ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
240 |
u8 tx_fifo_level:7; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
241 |
u8 reserved4:1; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
242 |
u8 reserved5[7]; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
243 |
/** TX memory full error @+0x28 */ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
244 |
u8 tx_mem_full; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
245 |
u8 reserved6[7]; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
246 |
u64 reserved8[9]; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
247 |
/** Connection @+0x78 */ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
248 |
u8 mii_connected; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
249 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
250 |
|
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
251 |
/** |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
252 |
* struct ccat_update - CCAT Update function (update) |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
253 |
* @ccatdev: pointer to the parent struct ccat_device |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
254 |
* @ioaddr: PCI base address of the CCAT Update function |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
255 |
* dev: device number for this update function |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
256 |
* cdev: character device used for the CCAT Update function |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
257 |
* class: pointer to a device class used when registering the CCAT Update device |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
258 |
* @info: holds a copy of the CCAT Update function information block (read from PCI config space) |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
259 |
*/ |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
260 |
struct ccat_update { |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
261 |
struct kref refcount; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
262 |
void __iomem *ioaddr; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
263 |
dev_t dev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
264 |
struct cdev cdev; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
265 |
struct class *class; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
266 |
struct ccat_info_block info; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
267 |
}; |
2b9c78543663
Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents:
diff
changeset
|
268 |
#endif /* #ifndef _CCAT_H_ */ |