diff options
Diffstat (limited to 'drivers/net/sb1250-mac.c')
-rw-r--r-- | drivers/net/sb1250-mac.c | 278 |
1 files changed, 142 insertions, 136 deletions
diff --git a/drivers/net/sb1250-mac.c b/drivers/net/sb1250-mac.c index 6001ab47fba0..0cffd46724df 100644 --- a/drivers/net/sb1250-mac.c +++ b/drivers/net/sb1250-mac.c | |||
@@ -140,17 +140,17 @@ MODULE_PARM_DESC(int_timeout_rx, "RX timeout value"); | |||
140 | ********************************************************************* */ | 140 | ********************************************************************* */ |
141 | 141 | ||
142 | 142 | ||
143 | typedef enum { sbmac_speed_auto, sbmac_speed_10, | 143 | enum sbmac_speed { sbmac_speed_auto, sbmac_speed_10, |
144 | sbmac_speed_100, sbmac_speed_1000 } sbmac_speed_t; | 144 | sbmac_speed_100, sbmac_speed_1000 }; |
145 | 145 | ||
146 | typedef enum { sbmac_duplex_auto, sbmac_duplex_half, | 146 | enum sbmac_duplex { sbmac_duplex_auto, sbmac_duplex_half, |
147 | sbmac_duplex_full } sbmac_duplex_t; | 147 | sbmac_duplex_full }; |
148 | 148 | ||
149 | typedef enum { sbmac_fc_auto, sbmac_fc_disabled, sbmac_fc_frame, | 149 | enum sbmac_fc { sbmac_fc_auto, sbmac_fc_disabled, sbmac_fc_frame, |
150 | sbmac_fc_collision, sbmac_fc_carrier } sbmac_fc_t; | 150 | sbmac_fc_collision, sbmac_fc_carrier } sbmac_fc_t; |
151 | 151 | ||
152 | typedef enum { sbmac_state_uninit, sbmac_state_off, sbmac_state_on, | 152 | enum sbmac_state { sbmac_state_uninit, sbmac_state_off, sbmac_state_on, |
153 | sbmac_state_broken } sbmac_state_t; | 153 | sbmac_state_broken }; |
154 | 154 | ||
155 | 155 | ||
156 | /********************************************************************** | 156 | /********************************************************************** |
@@ -176,55 +176,61 @@ typedef enum { sbmac_state_uninit, sbmac_state_off, sbmac_state_on, | |||
176 | * DMA Descriptor structure | 176 | * DMA Descriptor structure |
177 | ********************************************************************* */ | 177 | ********************************************************************* */ |
178 | 178 | ||
179 | typedef struct sbdmadscr_s { | 179 | struct sbdmadscr { |
180 | uint64_t dscr_a; | 180 | uint64_t dscr_a; |
181 | uint64_t dscr_b; | 181 | uint64_t dscr_b; |
182 | } sbdmadscr_t; | 182 | }; |
183 | |||
184 | typedef unsigned long paddr_t; | ||
185 | 183 | ||
186 | /********************************************************************** | 184 | /********************************************************************** |
187 | * DMA Controller structure | 185 | * DMA Controller structure |
188 | ********************************************************************* */ | 186 | ********************************************************************* */ |
189 | 187 | ||
190 | typedef struct sbmacdma_s { | 188 | struct sbmacdma { |
191 | 189 | ||
192 | /* | 190 | /* |
193 | * This stuff is used to identify the channel and the registers | 191 | * This stuff is used to identify the channel and the registers |
194 | * associated with it. | 192 | * associated with it. |
195 | */ | 193 | */ |
196 | 194 | struct sbmac_softc *sbdma_eth; /* back pointer to associated | |
197 | struct sbmac_softc *sbdma_eth; /* back pointer to associated MAC */ | 195 | MAC */ |
198 | int sbdma_channel; /* channel number */ | 196 | int sbdma_channel; /* channel number */ |
199 | int sbdma_txdir; /* direction (1=transmit) */ | 197 | int sbdma_txdir; /* direction (1=transmit) */ |
200 | int sbdma_maxdescr; /* total # of descriptors in ring */ | 198 | int sbdma_maxdescr; /* total # of descriptors |
199 | in ring */ | ||
201 | #ifdef CONFIG_SBMAC_COALESCE | 200 | #ifdef CONFIG_SBMAC_COALESCE |
202 | int sbdma_int_pktcnt; /* # descriptors rx/tx before interrupt*/ | 201 | int sbdma_int_pktcnt; |
203 | int sbdma_int_timeout; /* # usec rx/tx interrupt */ | 202 | /* # descriptors rx/tx |
203 | before interrupt */ | ||
204 | int sbdma_int_timeout; | ||
205 | /* # usec rx/tx interrupt */ | ||
204 | #endif | 206 | #endif |
205 | 207 | void __iomem *sbdma_config0; /* DMA config register 0 */ | |
206 | volatile void __iomem *sbdma_config0; /* DMA config register 0 */ | 208 | void __iomem *sbdma_config1; /* DMA config register 1 */ |
207 | volatile void __iomem *sbdma_config1; /* DMA config register 1 */ | 209 | void __iomem *sbdma_dscrbase; |
208 | volatile void __iomem *sbdma_dscrbase; /* Descriptor base address */ | 210 | /* descriptor base address */ |
209 | volatile void __iomem *sbdma_dscrcnt; /* Descriptor count register */ | 211 | void __iomem *sbdma_dscrcnt; /* descriptor count register */ |
210 | volatile void __iomem *sbdma_curdscr; /* current descriptor address */ | 212 | void __iomem *sbdma_curdscr; /* current descriptor |
211 | volatile void __iomem *sbdma_oodpktlost;/* pkt drop (rx only) */ | 213 | address */ |
212 | 214 | void __iomem *sbdma_oodpktlost; | |
215 | /* pkt drop (rx only) */ | ||
213 | 216 | ||
214 | /* | 217 | /* |
215 | * This stuff is for maintenance of the ring | 218 | * This stuff is for maintenance of the ring |
216 | */ | 219 | */ |
217 | 220 | void *sbdma_dscrtable_unaligned; | |
218 | sbdmadscr_t *sbdma_dscrtable_unaligned; | 221 | struct sbdmadscr *sbdma_dscrtable; |
219 | sbdmadscr_t *sbdma_dscrtable; /* base of descriptor table */ | 222 | /* base of descriptor table */ |
220 | sbdmadscr_t *sbdma_dscrtable_end; /* end of descriptor table */ | 223 | struct sbdmadscr *sbdma_dscrtable_end; |
221 | 224 | /* end of descriptor table */ | |
222 | struct sk_buff **sbdma_ctxtable; /* context table, one per descr */ | 225 | struct sk_buff **sbdma_ctxtable; |
223 | 226 | /* context table, one | |
224 | paddr_t sbdma_dscrtable_phys; /* and also the phys addr */ | 227 | per descr */ |
225 | sbdmadscr_t *sbdma_addptr; /* next dscr for sw to add */ | 228 | dma_addr_t sbdma_dscrtable_phys; |
226 | sbdmadscr_t *sbdma_remptr; /* next dscr for sw to remove */ | 229 | /* and also the phys addr */ |
227 | } sbmacdma_t; | 230 | struct sbdmadscr *sbdma_addptr; /* next dscr for sw to add */ |
231 | struct sbdmadscr *sbdma_remptr; /* next dscr for sw | ||
232 | to remove */ | ||
233 | }; | ||
228 | 234 | ||
229 | 235 | ||
230 | /********************************************************************** | 236 | /********************************************************************** |
@@ -236,47 +242,45 @@ struct sbmac_softc { | |||
236 | /* | 242 | /* |
237 | * Linux-specific things | 243 | * Linux-specific things |
238 | */ | 244 | */ |
245 | struct net_device *sbm_dev; /* pointer to linux device */ | ||
246 | struct napi_struct napi; | ||
247 | spinlock_t sbm_lock; /* spin lock */ | ||
248 | struct timer_list sbm_timer; /* for monitoring MII */ | ||
249 | int sbm_devflags; /* current device flags */ | ||
239 | 250 | ||
240 | struct net_device *sbm_dev; /* pointer to linux device */ | 251 | int sbm_phy_oldbmsr; |
241 | struct napi_struct napi; | 252 | int sbm_phy_oldanlpar; |
242 | spinlock_t sbm_lock; /* spin lock */ | 253 | int sbm_phy_oldk1stsr; |
243 | struct timer_list sbm_timer; /* for monitoring MII */ | 254 | int sbm_phy_oldlinkstat; |
244 | int sbm_devflags; /* current device flags */ | 255 | int sbm_buffersize; |
245 | |||
246 | int sbm_phy_oldbmsr; | ||
247 | int sbm_phy_oldanlpar; | ||
248 | int sbm_phy_oldk1stsr; | ||
249 | int sbm_phy_oldlinkstat; | ||
250 | int sbm_buffersize; | ||
251 | 256 | ||
252 | unsigned char sbm_phys[2]; | 257 | unsigned char sbm_phys[2]; |
253 | 258 | ||
254 | /* | 259 | /* |
255 | * Controller-specific things | 260 | * Controller-specific things |
256 | */ | 261 | */ |
262 | void __iomem *sbm_base; /* MAC's base address */ | ||
263 | enum sbmac_state sbm_state; /* current state */ | ||
257 | 264 | ||
258 | void __iomem *sbm_base; /* MAC's base address */ | 265 | void __iomem *sbm_macenable; /* MAC Enable Register */ |
259 | sbmac_state_t sbm_state; /* current state */ | 266 | void __iomem *sbm_maccfg; /* MAC Config Register */ |
267 | void __iomem *sbm_fifocfg; /* FIFO Config Register */ | ||
268 | void __iomem *sbm_framecfg; /* Frame Config Register */ | ||
269 | void __iomem *sbm_rxfilter; /* Receive Filter Register */ | ||
270 | void __iomem *sbm_isr; /* Interrupt Status Register */ | ||
271 | void __iomem *sbm_imr; /* Interrupt Mask Register */ | ||
272 | void __iomem *sbm_mdio; /* MDIO Register */ | ||
260 | 273 | ||
261 | volatile void __iomem *sbm_macenable; /* MAC Enable Register */ | 274 | enum sbmac_speed sbm_speed; /* current speed */ |
262 | volatile void __iomem *sbm_maccfg; /* MAC Configuration Register */ | 275 | enum sbmac_duplex sbm_duplex; /* current duplex */ |
263 | volatile void __iomem *sbm_fifocfg; /* FIFO configuration register */ | 276 | enum sbmac_fc sbm_fc; /* cur. flow control setting */ |
264 | volatile void __iomem *sbm_framecfg; /* Frame configuration register */ | ||
265 | volatile void __iomem *sbm_rxfilter; /* receive filter register */ | ||
266 | volatile void __iomem *sbm_isr; /* Interrupt status register */ | ||
267 | volatile void __iomem *sbm_imr; /* Interrupt mask register */ | ||
268 | volatile void __iomem *sbm_mdio; /* MDIO register */ | ||
269 | 277 | ||
270 | sbmac_speed_t sbm_speed; /* current speed */ | 278 | unsigned char sbm_hwaddr[ETHER_ADDR_LEN]; |
271 | sbmac_duplex_t sbm_duplex; /* current duplex */ | ||
272 | sbmac_fc_t sbm_fc; /* current flow control setting */ | ||
273 | 279 | ||
274 | unsigned char sbm_hwaddr[ETHER_ADDR_LEN]; | 280 | struct sbmacdma sbm_txdma; /* only channel 0 for now */ |
275 | 281 | struct sbmacdma sbm_rxdma; | |
276 | sbmacdma_t sbm_txdma; /* for now, only use channel 0 */ | 282 | int rx_hw_checksum; |
277 | sbmacdma_t sbm_rxdma; | 283 | int sbe_idx; |
278 | int rx_hw_checksum; | ||
279 | int sbe_idx; | ||
280 | }; | 284 | }; |
281 | 285 | ||
282 | 286 | ||
@@ -288,30 +292,31 @@ struct sbmac_softc { | |||
288 | * Prototypes | 292 | * Prototypes |
289 | ********************************************************************* */ | 293 | ********************************************************************* */ |
290 | 294 | ||
291 | static void sbdma_initctx(sbmacdma_t *d, | 295 | static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan, |
292 | struct sbmac_softc *s, | 296 | int txrx, int maxdescr); |
293 | int chan, | 297 | static void sbdma_channel_start(struct sbmacdma *d, int rxtx); |
294 | int txrx, | 298 | static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *m); |
295 | int maxdescr); | 299 | static int sbdma_add_txbuffer(struct sbmacdma *d, struct sk_buff *m); |
296 | static void sbdma_channel_start(sbmacdma_t *d, int rxtx); | 300 | static void sbdma_emptyring(struct sbmacdma *d); |
297 | static int sbdma_add_rcvbuffer(sbmacdma_t *d,struct sk_buff *m); | 301 | static void sbdma_fillring(struct sbmacdma *d); |
298 | static int sbdma_add_txbuffer(sbmacdma_t *d,struct sk_buff *m); | 302 | static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
299 | static void sbdma_emptyring(sbmacdma_t *d); | 303 | int work_to_do, int poll); |
300 | static void sbdma_fillring(sbmacdma_t *d); | 304 | static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
301 | static int sbdma_rx_process(struct sbmac_softc *sc,sbmacdma_t *d, int work_to_do, int poll); | 305 | int poll); |
302 | static void sbdma_tx_process(struct sbmac_softc *sc,sbmacdma_t *d, int poll); | ||
303 | static int sbmac_initctx(struct sbmac_softc *s); | 306 | static int sbmac_initctx(struct sbmac_softc *s); |
304 | static void sbmac_channel_start(struct sbmac_softc *s); | 307 | static void sbmac_channel_start(struct sbmac_softc *s); |
305 | static void sbmac_channel_stop(struct sbmac_softc *s); | 308 | static void sbmac_channel_stop(struct sbmac_softc *s); |
306 | static sbmac_state_t sbmac_set_channel_state(struct sbmac_softc *,sbmac_state_t); | 309 | static enum sbmac_state sbmac_set_channel_state(struct sbmac_softc *, |
307 | static void sbmac_promiscuous_mode(struct sbmac_softc *sc,int onoff); | 310 | enum sbmac_state); |
311 | static void sbmac_promiscuous_mode(struct sbmac_softc *sc, int onoff); | ||
308 | static uint64_t sbmac_addr2reg(unsigned char *ptr); | 312 | static uint64_t sbmac_addr2reg(unsigned char *ptr); |
309 | static irqreturn_t sbmac_intr(int irq,void *dev_instance); | 313 | static irqreturn_t sbmac_intr(int irq, void *dev_instance); |
310 | static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev); | 314 | static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev); |
311 | static void sbmac_setmulti(struct sbmac_softc *sc); | 315 | static void sbmac_setmulti(struct sbmac_softc *sc); |
312 | static int sbmac_init(struct net_device *dev, int idx); | 316 | static int sbmac_init(struct net_device *dev, int idx); |
313 | static int sbmac_set_speed(struct sbmac_softc *s,sbmac_speed_t speed); | 317 | static int sbmac_set_speed(struct sbmac_softc *s, enum sbmac_speed speed); |
314 | static int sbmac_set_duplex(struct sbmac_softc *s,sbmac_duplex_t duplex,sbmac_fc_t fc); | 318 | static int sbmac_set_duplex(struct sbmac_softc *s, enum sbmac_duplex duplex, |
319 | enum sbmac_fc fc); | ||
315 | 320 | ||
316 | static int sbmac_open(struct net_device *dev); | 321 | static int sbmac_open(struct net_device *dev); |
317 | static void sbmac_timer(unsigned long data); | 322 | static void sbmac_timer(unsigned long data); |
@@ -321,13 +326,15 @@ static int sbmac_mii_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); | |||
321 | static int sbmac_close(struct net_device *dev); | 326 | static int sbmac_close(struct net_device *dev); |
322 | static int sbmac_poll(struct napi_struct *napi, int budget); | 327 | static int sbmac_poll(struct napi_struct *napi, int budget); |
323 | 328 | ||
324 | static int sbmac_mii_poll(struct sbmac_softc *s,int noisy); | 329 | static int sbmac_mii_poll(struct sbmac_softc *s, int noisy); |
325 | static int sbmac_mii_probe(struct net_device *dev); | 330 | static int sbmac_mii_probe(struct net_device *dev); |
326 | 331 | ||
327 | static void sbmac_mii_sync(struct sbmac_softc *s); | 332 | static void sbmac_mii_sync(struct sbmac_softc *s); |
328 | static void sbmac_mii_senddata(struct sbmac_softc *s,unsigned int data, int bitcnt); | 333 | static void sbmac_mii_senddata(struct sbmac_softc *s, unsigned int data, |
329 | static unsigned int sbmac_mii_read(struct sbmac_softc *s,int phyaddr,int regidx); | 334 | int bitcnt); |
330 | static void sbmac_mii_write(struct sbmac_softc *s,int phyaddr,int regidx, | 335 | static unsigned int sbmac_mii_read(struct sbmac_softc *s, int phyaddr, |
336 | int regidx); | ||
337 | static void sbmac_mii_write(struct sbmac_softc *s, int phyaddr, int regidx, | ||
331 | unsigned int regval); | 338 | unsigned int regval); |
332 | 339 | ||
333 | 340 | ||
@@ -676,8 +683,8 @@ static void sbmac_mii_write(struct sbmac_softc *s,int phyaddr,int regidx, | |||
676 | * way. | 683 | * way. |
677 | * | 684 | * |
678 | * Input parameters: | 685 | * Input parameters: |
679 | * d - sbmacdma_t structure (DMA channel context) | 686 | * d - struct sbmacdma (DMA channel context) |
680 | * s - sbmac_softc structure (pointer to a MAC) | 687 | * s - struct sbmac_softc (pointer to a MAC) |
681 | * chan - channel number (0..1 right now) | 688 | * chan - channel number (0..1 right now) |
682 | * txrx - Identifies DMA_TX or DMA_RX for channel direction | 689 | * txrx - Identifies DMA_TX or DMA_RX for channel direction |
683 | * maxdescr - number of descriptors | 690 | * maxdescr - number of descriptors |
@@ -686,11 +693,8 @@ static void sbmac_mii_write(struct sbmac_softc *s,int phyaddr,int regidx, | |||
686 | * nothing | 693 | * nothing |
687 | ********************************************************************* */ | 694 | ********************************************************************* */ |
688 | 695 | ||
689 | static void sbdma_initctx(sbmacdma_t *d, | 696 | static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan, |
690 | struct sbmac_softc *s, | 697 | int txrx, int maxdescr) |
691 | int chan, | ||
692 | int txrx, | ||
693 | int maxdescr) | ||
694 | { | 698 | { |
695 | #ifdef CONFIG_SBMAC_COALESCE | 699 | #ifdef CONFIG_SBMAC_COALESCE |
696 | int int_pktcnt, int_timeout; | 700 | int int_pktcnt, int_timeout; |
@@ -757,18 +761,17 @@ static void sbdma_initctx(sbmacdma_t *d, | |||
757 | 761 | ||
758 | d->sbdma_maxdescr = maxdescr; | 762 | d->sbdma_maxdescr = maxdescr; |
759 | 763 | ||
760 | d->sbdma_dscrtable_unaligned = | 764 | d->sbdma_dscrtable_unaligned = kcalloc(d->sbdma_maxdescr + 1, |
761 | d->sbdma_dscrtable = (sbdmadscr_t *) | 765 | sizeof(*d->sbdma_dscrtable), |
762 | kmalloc((d->sbdma_maxdescr+1)*sizeof(sbdmadscr_t), GFP_KERNEL); | 766 | GFP_KERNEL); |
763 | 767 | ||
764 | /* | 768 | /* |
765 | * The descriptor table must be aligned to at least 16 bytes or the | 769 | * The descriptor table must be aligned to at least 16 bytes or the |
766 | * MAC will corrupt it. | 770 | * MAC will corrupt it. |
767 | */ | 771 | */ |
768 | d->sbdma_dscrtable = (sbdmadscr_t *) | 772 | d->sbdma_dscrtable = (struct sbdmadscr *) |
769 | ALIGN((unsigned long)d->sbdma_dscrtable, sizeof(sbdmadscr_t)); | 773 | ALIGN((unsigned long)d->sbdma_dscrtable_unaligned, |
770 | 774 | sizeof(*d->sbdma_dscrtable)); | |
771 | memset(d->sbdma_dscrtable,0,d->sbdma_maxdescr*sizeof(sbdmadscr_t)); | ||
772 | 775 | ||
773 | d->sbdma_dscrtable_end = d->sbdma_dscrtable + d->sbdma_maxdescr; | 776 | d->sbdma_dscrtable_end = d->sbdma_dscrtable + d->sbdma_maxdescr; |
774 | 777 | ||
@@ -779,7 +782,7 @@ static void sbdma_initctx(sbmacdma_t *d, | |||
779 | */ | 782 | */ |
780 | 783 | ||
781 | d->sbdma_ctxtable = kcalloc(d->sbdma_maxdescr, | 784 | d->sbdma_ctxtable = kcalloc(d->sbdma_maxdescr, |
782 | sizeof(struct sk_buff *), GFP_KERNEL); | 785 | sizeof(*d->sbdma_ctxtable), GFP_KERNEL); |
783 | 786 | ||
784 | #ifdef CONFIG_SBMAC_COALESCE | 787 | #ifdef CONFIG_SBMAC_COALESCE |
785 | /* | 788 | /* |
@@ -816,7 +819,7 @@ static void sbdma_initctx(sbmacdma_t *d, | |||
816 | * nothing | 819 | * nothing |
817 | ********************************************************************* */ | 820 | ********************************************************************* */ |
818 | 821 | ||
819 | static void sbdma_channel_start(sbmacdma_t *d, int rxtx ) | 822 | static void sbdma_channel_start(struct sbmacdma *d, int rxtx) |
820 | { | 823 | { |
821 | /* | 824 | /* |
822 | * Turn on the DMA channel | 825 | * Turn on the DMA channel |
@@ -857,7 +860,7 @@ static void sbdma_channel_start(sbmacdma_t *d, int rxtx ) | |||
857 | * nothing | 860 | * nothing |
858 | ********************************************************************* */ | 861 | ********************************************************************* */ |
859 | 862 | ||
860 | static void sbdma_channel_stop(sbmacdma_t *d) | 863 | static void sbdma_channel_stop(struct sbmacdma *d) |
861 | { | 864 | { |
862 | /* | 865 | /* |
863 | * Turn off the DMA channel | 866 | * Turn off the DMA channel |
@@ -906,10 +909,10 @@ static void sbdma_align_skb(struct sk_buff *skb,int power2,int offset) | |||
906 | ********************************************************************* */ | 909 | ********************************************************************* */ |
907 | 910 | ||
908 | 911 | ||
909 | static int sbdma_add_rcvbuffer(sbmacdma_t *d,struct sk_buff *sb) | 912 | static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *sb) |
910 | { | 913 | { |
911 | sbdmadscr_t *dsc; | 914 | struct sbdmadscr *dsc; |
912 | sbdmadscr_t *nextdsc; | 915 | struct sbdmadscr *nextdsc; |
913 | struct sk_buff *sb_new = NULL; | 916 | struct sk_buff *sb_new = NULL; |
914 | int pktsize = ENET_PACKET_SIZE; | 917 | int pktsize = ENET_PACKET_SIZE; |
915 | 918 | ||
@@ -1021,10 +1024,10 @@ static int sbdma_add_rcvbuffer(sbmacdma_t *d,struct sk_buff *sb) | |||
1021 | ********************************************************************* */ | 1024 | ********************************************************************* */ |
1022 | 1025 | ||
1023 | 1026 | ||
1024 | static int sbdma_add_txbuffer(sbmacdma_t *d,struct sk_buff *sb) | 1027 | static int sbdma_add_txbuffer(struct sbmacdma *d, struct sk_buff *sb) |
1025 | { | 1028 | { |
1026 | sbdmadscr_t *dsc; | 1029 | struct sbdmadscr *dsc; |
1027 | sbdmadscr_t *nextdsc; | 1030 | struct sbdmadscr *nextdsc; |
1028 | uint64_t phys; | 1031 | uint64_t phys; |
1029 | uint64_t ncb; | 1032 | uint64_t ncb; |
1030 | int length; | 1033 | int length; |
@@ -1110,7 +1113,7 @@ static int sbdma_add_txbuffer(sbmacdma_t *d,struct sk_buff *sb) | |||
1110 | * nothing | 1113 | * nothing |
1111 | ********************************************************************* */ | 1114 | ********************************************************************* */ |
1112 | 1115 | ||
1113 | static void sbdma_emptyring(sbmacdma_t *d) | 1116 | static void sbdma_emptyring(struct sbmacdma *d) |
1114 | { | 1117 | { |
1115 | int idx; | 1118 | int idx; |
1116 | struct sk_buff *sb; | 1119 | struct sk_buff *sb; |
@@ -1138,7 +1141,7 @@ static void sbdma_emptyring(sbmacdma_t *d) | |||
1138 | * nothing | 1141 | * nothing |
1139 | ********************************************************************* */ | 1142 | ********************************************************************* */ |
1140 | 1143 | ||
1141 | static void sbdma_fillring(sbmacdma_t *d) | 1144 | static void sbdma_fillring(struct sbmacdma *d) |
1142 | { | 1145 | { |
1143 | int idx; | 1146 | int idx; |
1144 | 1147 | ||
@@ -1185,13 +1188,13 @@ static void sbmac_netpoll(struct net_device *netdev) | |||
1185 | * nothing | 1188 | * nothing |
1186 | ********************************************************************* */ | 1189 | ********************************************************************* */ |
1187 | 1190 | ||
1188 | static int sbdma_rx_process(struct sbmac_softc *sc,sbmacdma_t *d, | 1191 | static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
1189 | int work_to_do, int poll) | 1192 | int work_to_do, int poll) |
1190 | { | 1193 | { |
1191 | struct net_device *dev = sc->sbm_dev; | 1194 | struct net_device *dev = sc->sbm_dev; |
1192 | int curidx; | 1195 | int curidx; |
1193 | int hwidx; | 1196 | int hwidx; |
1194 | sbdmadscr_t *dsc; | 1197 | struct sbdmadscr *dsc; |
1195 | struct sk_buff *sb; | 1198 | struct sk_buff *sb; |
1196 | int len; | 1199 | int len; |
1197 | int work_done = 0; | 1200 | int work_done = 0; |
@@ -1223,8 +1226,9 @@ again: | |||
1223 | prefetch(dsc); | 1226 | prefetch(dsc); |
1224 | prefetch(&d->sbdma_ctxtable[curidx]); | 1227 | prefetch(&d->sbdma_ctxtable[curidx]); |
1225 | 1228 | ||
1226 | hwidx = (int) (((__raw_readq(d->sbdma_curdscr) & M_DMA_CURDSCR_ADDR) - | 1229 | hwidx = ((__raw_readq(d->sbdma_curdscr) & M_DMA_CURDSCR_ADDR) - |
1227 | d->sbdma_dscrtable_phys) / sizeof(sbdmadscr_t)); | 1230 | d->sbdma_dscrtable_phys) / |
1231 | sizeof(*d->sbdma_dscrtable); | ||
1228 | 1232 | ||
1229 | /* | 1233 | /* |
1230 | * If they're the same, that means we've processed all | 1234 | * If they're the same, that means we've processed all |
@@ -1348,12 +1352,13 @@ done: | |||
1348 | * nothing | 1352 | * nothing |
1349 | ********************************************************************* */ | 1353 | ********************************************************************* */ |
1350 | 1354 | ||
1351 | static void sbdma_tx_process(struct sbmac_softc *sc,sbmacdma_t *d, int poll) | 1355 | static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
1356 | int poll) | ||
1352 | { | 1357 | { |
1353 | struct net_device *dev = sc->sbm_dev; | 1358 | struct net_device *dev = sc->sbm_dev; |
1354 | int curidx; | 1359 | int curidx; |
1355 | int hwidx; | 1360 | int hwidx; |
1356 | sbdmadscr_t *dsc; | 1361 | struct sbdmadscr *dsc; |
1357 | struct sk_buff *sb; | 1362 | struct sk_buff *sb; |
1358 | unsigned long flags; | 1363 | unsigned long flags; |
1359 | int packets_handled = 0; | 1364 | int packets_handled = 0; |
@@ -1363,8 +1368,8 @@ static void sbdma_tx_process(struct sbmac_softc *sc,sbmacdma_t *d, int poll) | |||
1363 | if (d->sbdma_remptr == d->sbdma_addptr) | 1368 | if (d->sbdma_remptr == d->sbdma_addptr) |
1364 | goto end_unlock; | 1369 | goto end_unlock; |
1365 | 1370 | ||
1366 | hwidx = (int) (((__raw_readq(d->sbdma_curdscr) & M_DMA_CURDSCR_ADDR) - | 1371 | hwidx = ((__raw_readq(d->sbdma_curdscr) & M_DMA_CURDSCR_ADDR) - |
1367 | d->sbdma_dscrtable_phys) / sizeof(sbdmadscr_t)); | 1372 | d->sbdma_dscrtable_phys) / sizeof(*d->sbdma_dscrtable); |
1368 | 1373 | ||
1369 | for (;;) { | 1374 | for (;;) { |
1370 | /* | 1375 | /* |
@@ -1501,7 +1506,7 @@ static int sbmac_initctx(struct sbmac_softc *s) | |||
1501 | } | 1506 | } |
1502 | 1507 | ||
1503 | 1508 | ||
1504 | static void sbdma_uninitctx(struct sbmacdma_s *d) | 1509 | static void sbdma_uninitctx(struct sbmacdma *d) |
1505 | { | 1510 | { |
1506 | if (d->sbdma_dscrtable_unaligned) { | 1511 | if (d->sbdma_dscrtable_unaligned) { |
1507 | kfree(d->sbdma_dscrtable_unaligned); | 1512 | kfree(d->sbdma_dscrtable_unaligned); |
@@ -1537,7 +1542,7 @@ static void sbmac_uninitctx(struct sbmac_softc *sc) | |||
1537 | static void sbmac_channel_start(struct sbmac_softc *s) | 1542 | static void sbmac_channel_start(struct sbmac_softc *s) |
1538 | { | 1543 | { |
1539 | uint64_t reg; | 1544 | uint64_t reg; |
1540 | volatile void __iomem *port; | 1545 | void __iomem *port; |
1541 | uint64_t cfg,fifo,framecfg; | 1546 | uint64_t cfg,fifo,framecfg; |
1542 | int idx, th_value; | 1547 | int idx, th_value; |
1543 | 1548 | ||
@@ -1800,10 +1805,10 @@ static void sbmac_channel_stop(struct sbmac_softc *s) | |||
1800 | * Return value: | 1805 | * Return value: |
1801 | * old state | 1806 | * old state |
1802 | ********************************************************************* */ | 1807 | ********************************************************************* */ |
1803 | static sbmac_state_t sbmac_set_channel_state(struct sbmac_softc *sc, | 1808 | static enum sbmac_state sbmac_set_channel_state(struct sbmac_softc *sc, |
1804 | sbmac_state_t state) | 1809 | enum sbmac_state state) |
1805 | { | 1810 | { |
1806 | sbmac_state_t oldstate = sc->sbm_state; | 1811 | enum sbmac_state oldstate = sc->sbm_state; |
1807 | 1812 | ||
1808 | /* | 1813 | /* |
1809 | * If same as previous state, return | 1814 | * If same as previous state, return |
@@ -1938,14 +1943,14 @@ static uint64_t sbmac_addr2reg(unsigned char *ptr) | |||
1938 | * | 1943 | * |
1939 | * Input parameters: | 1944 | * Input parameters: |
1940 | * s - sbmac structure | 1945 | * s - sbmac structure |
1941 | * speed - speed to set MAC to (see sbmac_speed_t enum) | 1946 | * speed - speed to set MAC to (see enum sbmac_speed) |
1942 | * | 1947 | * |
1943 | * Return value: | 1948 | * Return value: |
1944 | * 1 if successful | 1949 | * 1 if successful |
1945 | * 0 indicates invalid parameters | 1950 | * 0 indicates invalid parameters |
1946 | ********************************************************************* */ | 1951 | ********************************************************************* */ |
1947 | 1952 | ||
1948 | static int sbmac_set_speed(struct sbmac_softc *s,sbmac_speed_t speed) | 1953 | static int sbmac_set_speed(struct sbmac_softc *s, enum sbmac_speed speed) |
1949 | { | 1954 | { |
1950 | uint64_t cfg; | 1955 | uint64_t cfg; |
1951 | uint64_t framecfg; | 1956 | uint64_t framecfg; |
@@ -2027,15 +2032,16 @@ static int sbmac_set_speed(struct sbmac_softc *s,sbmac_speed_t speed) | |||
2027 | * | 2032 | * |
2028 | * Input parameters: | 2033 | * Input parameters: |
2029 | * s - sbmac structure | 2034 | * s - sbmac structure |
2030 | * duplex - duplex setting (see sbmac_duplex_t) | 2035 | * duplex - duplex setting (see enum sbmac_duplex) |
2031 | * fc - flow control setting (see sbmac_fc_t) | 2036 | * fc - flow control setting (see enum sbmac_fc) |
2032 | * | 2037 | * |
2033 | * Return value: | 2038 | * Return value: |
2034 | * 1 if ok | 2039 | * 1 if ok |
2035 | * 0 if an invalid parameter combination was specified | 2040 | * 0 if an invalid parameter combination was specified |
2036 | ********************************************************************* */ | 2041 | ********************************************************************* */ |
2037 | 2042 | ||
2038 | static int sbmac_set_duplex(struct sbmac_softc *s,sbmac_duplex_t duplex,sbmac_fc_t fc) | 2043 | static int sbmac_set_duplex(struct sbmac_softc *s, enum sbmac_duplex duplex, |
2044 | enum sbmac_fc fc) | ||
2039 | { | 2045 | { |
2040 | uint64_t cfg; | 2046 | uint64_t cfg; |
2041 | 2047 | ||
@@ -2228,7 +2234,7 @@ static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev) | |||
2228 | static void sbmac_setmulti(struct sbmac_softc *sc) | 2234 | static void sbmac_setmulti(struct sbmac_softc *sc) |
2229 | { | 2235 | { |
2230 | uint64_t reg; | 2236 | uint64_t reg; |
2231 | volatile void __iomem *port; | 2237 | void __iomem *port; |
2232 | int idx; | 2238 | int idx; |
2233 | struct dev_mc_list *mclist; | 2239 | struct dev_mc_list *mclist; |
2234 | struct net_device *dev = sc->sbm_dev; | 2240 | struct net_device *dev = sc->sbm_dev; |