equal
deleted
inserted
replaced
112 ec_gen_device_poll(gendev); |
112 ec_gen_device_poll(gendev); |
113 } |
113 } |
114 |
114 |
115 /*****************************************************************************/ |
115 /*****************************************************************************/ |
116 |
116 |
|
117 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) |
117 static const struct net_device_ops ec_gen_netdev_ops = { |
118 static const struct net_device_ops ec_gen_netdev_ops = { |
118 .ndo_open = ec_gen_netdev_open, |
119 .ndo_open = ec_gen_netdev_open, |
119 .ndo_stop = ec_gen_netdev_stop, |
120 .ndo_stop = ec_gen_netdev_stop, |
120 .ndo_start_xmit = ec_gen_netdev_start_xmit, |
121 .ndo_start_xmit = ec_gen_netdev_start_xmit, |
121 }; |
122 }; |
|
123 #endif |
122 |
124 |
123 /*****************************************************************************/ |
125 /*****************************************************************************/ |
124 |
126 |
125 /** Init generic device. |
127 /** Init generic device. |
126 */ |
128 */ |
133 char null = 0x00; |
135 char null = 0x00; |
134 |
136 |
135 dev->ecdev = NULL; |
137 dev->ecdev = NULL; |
136 dev->socket = NULL; |
138 dev->socket = NULL; |
137 |
139 |
138 dev->netdev = alloc_netdev(sizeof(ec_gen_device_t *), &null, ether_setup); |
140 dev->netdev = alloc_netdev(sizeof(ec_gen_device_t *), &null, ether_setup); |
139 if (!dev->netdev) { |
141 if (!dev->netdev) { |
140 return -ENOMEM; |
142 return -ENOMEM; |
141 } |
143 } |
142 memcpy(dev->netdev->dev_addr, real_netdev->dev_addr, ETH_ALEN); |
144 memcpy(dev->netdev->dev_addr, real_netdev->dev_addr, ETH_ALEN); |
|
145 |
|
146 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) |
143 dev->netdev->netdev_ops = &ec_gen_netdev_ops; |
147 dev->netdev->netdev_ops = &ec_gen_netdev_ops; |
|
148 #else |
|
149 dev->netdev->open = ec_gen_netdev_open; |
|
150 dev->netdev->stop = ec_gen_netdev_stop; |
|
151 dev->netdev->hard_start_xmit = ec_gen_netdev_start_xmit; |
|
152 #endif |
|
153 |
144 priv = netdev_priv(dev->netdev); |
154 priv = netdev_priv(dev->netdev); |
145 *priv = dev; |
155 *priv = dev; |
146 |
156 |
147 return 0; |
157 return 0; |
148 } |
158 } |
210 struct net_device *real_netdev |
220 struct net_device *real_netdev |
211 ) |
221 ) |
212 { |
222 { |
213 int ret = 0; |
223 int ret = 0; |
214 |
224 |
215 dev->ecdev = ecdev_offer(dev->netdev, ec_gen_poll, THIS_MODULE); |
225 dev->ecdev = ecdev_offer(dev->netdev, ec_gen_poll, THIS_MODULE); |
216 if (dev->ecdev) { |
226 if (dev->ecdev) { |
217 if (ec_gen_device_create_socket(dev, real_netdev)) { |
227 if (ec_gen_device_create_socket(dev, real_netdev)) { |
218 ecdev_withdraw(dev->ecdev); |
228 ecdev_withdraw(dev->ecdev); |
219 dev->ecdev = NULL; |
229 dev->ecdev = NULL; |
220 } else if (ecdev_open(dev->ecdev)) { |
230 } else if (ecdev_open(dev->ecdev)) { |