@@ -118,7 +118,7 @@ int com20020_check(struct net_device *dev)
118
118
arcnet_outb (STARTIOcmd , ioaddr , COM20020_REG_W_COMMAND );
119
119
}
120
120
121
- lp -> config = TXENcfg | (lp -> timeout << 3 ) | (lp -> backplane << 2 ) | SUB_NODE ;
121
+ lp -> config = (lp -> timeout << 3 ) | (lp -> backplane << 2 ) | SUB_NODE ;
122
122
/* set node ID to 0x42 (but transmitter is disabled, so it's okay) */
123
123
arcnet_outb (lp -> config , ioaddr , COM20020_REG_W_CONFIG );
124
124
arcnet_outb (0x42 , ioaddr , COM20020_REG_W_XREG );
@@ -131,11 +131,6 @@ int com20020_check(struct net_device *dev)
131
131
}
132
132
arc_printk (D_INIT_REASONS , dev , "status after reset: %X\n" , status );
133
133
134
- /* Enable TX */
135
- lp -> config |= TXENcfg ;
136
- arcnet_outb (lp -> config , ioaddr , COM20020_REG_W_CONFIG );
137
- arcnet_outb (arcnet_inb (ioaddr , 8 ), ioaddr , COM20020_REG_W_XREG );
138
-
139
134
arcnet_outb (CFLAGScmd | RESETclear | CONFIGclear ,
140
135
ioaddr , COM20020_REG_W_COMMAND );
141
136
status = arcnet_inb (ioaddr , COM20020_REG_R_STATUS );
@@ -169,9 +164,33 @@ static int com20020_set_hwaddr(struct net_device *dev, void *addr)
169
164
return 0 ;
170
165
}
171
166
167
+ static int com20020_netdev_open (struct net_device * dev )
168
+ {
169
+ int ioaddr = dev -> base_addr ;
170
+ struct arcnet_local * lp = netdev_priv (dev );
171
+
172
+ lp -> config |= TXENcfg ;
173
+ arcnet_outb (lp -> config , ioaddr , COM20020_REG_W_CONFIG );
174
+
175
+ return arcnet_open (dev );
176
+ }
177
+
178
+ static int com20020_netdev_close (struct net_device * dev )
179
+ {
180
+ int ioaddr = dev -> base_addr ;
181
+ struct arcnet_local * lp = netdev_priv (dev );
182
+
183
+ arcnet_close (dev );
184
+
185
+ /* disable transmitter */
186
+ lp -> config &= ~TXENcfg ;
187
+ arcnet_outb (lp -> config , ioaddr , COM20020_REG_W_CONFIG );
188
+ return 0 ;
189
+ }
190
+
172
191
const struct net_device_ops com20020_netdev_ops = {
173
- .ndo_open = arcnet_open ,
174
- .ndo_stop = arcnet_close ,
192
+ .ndo_open = com20020_netdev_open ,
193
+ .ndo_stop = com20020_netdev_close ,
175
194
.ndo_start_xmit = arcnet_send_packet ,
176
195
.ndo_tx_timeout = arcnet_timeout ,
177
196
.ndo_set_mac_address = com20020_set_hwaddr ,
@@ -215,7 +234,7 @@ int com20020_found(struct net_device *dev, int shared)
215
234
arcnet_outb (STARTIOcmd , ioaddr , COM20020_REG_W_COMMAND );
216
235
}
217
236
218
- lp -> config = TXENcfg | (lp -> timeout << 3 ) | (lp -> backplane << 2 ) | SUB_NODE ;
237
+ lp -> config = (lp -> timeout << 3 ) | (lp -> backplane << 2 ) | SUB_NODE ;
219
238
/* Default 0x38 + register: Node ID */
220
239
arcnet_outb (lp -> config , ioaddr , COM20020_REG_W_CONFIG );
221
240
arcnet_outb (dev -> dev_addr [0 ], ioaddr , COM20020_REG_W_XREG );
@@ -274,7 +293,7 @@ static int com20020_reset(struct net_device *dev, int really_reset)
274
293
dev -> name , arcnet_inb (ioaddr , COM20020_REG_R_STATUS ));
275
294
276
295
arc_printk (D_DEBUG , dev , "%s: %d: %s\n" , __FILE__ , __LINE__ , __func__ );
277
- lp -> config = TXENcfg | (lp -> timeout << 3 ) | (lp -> backplane << 2 );
296
+ lp -> config |= (lp -> timeout << 3 ) | (lp -> backplane << 2 );
278
297
/* power-up defaults */
279
298
arcnet_outb (lp -> config , ioaddr , COM20020_REG_W_CONFIG );
280
299
arc_printk (D_DEBUG , dev , "%s: %d: %s\n" , __FILE__ , __LINE__ , __func__ );
0 commit comments