/arch/arm/mach-ixp23xx/

gnals'>prop/litmus-signals The LITMUS^RT kernel.Bjoern Brandenburg
aboutsummaryrefslogblamecommitdiffstats
path: root/drivers/net/bnx2.c
blob: 0ba59d5aeb7f54253171f56dc711b2a3e47f0f89 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11

                                       
                                               







                                                                       
                                           
















                              
                         



                          
                     


                          
                          
                   
                    
                         


                            
                        
                           
                       
                      
 



                                                       

                    
 
                                      


                                                            
                                                             
                                                            

                                                               





                                                                
                                     


                                                                                                                               
                                                                          

                                   



                                 
                                    











                                                                          

                 
                
                 
                
                 


                               
               






                                                             

                                                        
                                                       
                                                        
                                                       
                                                        

          
                                                





                                                         

                                                         



                                                          

                                                          

                                                         

                                                          

                                                  
                                         
                                                   


              
                                              
 

                                                                      
                         
                                                                    
                                                              

                                                    

                                                                    
                                                                           

                                        

                                                  
                                                                    
                                                                           



                                                                     
                                                                    
                                                                           

                                                                     

                                                                    
                                                                           


                                                                     
                                                                    
                                                                               



                                                                         
                                                                               




                                                                         
                                                                           



                                                                    
                                                              



                                                                    
                                                                           



                                                                    
                                                                           



                                                                    
                                                                            



                                                                    
                                                                           



                                                                    
                                                                           



                                                                    
                                                                            



                                                                    
                                                                            

                                                                    

  
                                             







                                                        

                                       
                                            
                                           
 
                                                                               
 
                 
 

                                                                     



                                                                 
                                           




                                               
                                       

 


                                            


                                         
                                                           


                                                 




                                                     
                                         

                                                           
                                           


           







                                                          
                                                            


           


                                                               
                                         






                                                             








                                                                     
                                           

 














































































                                                                           
                                   


                                               
                                     


























                                                            

                                   



                                                      
                                     







                                  

                                   








                                                                    
                                     















                                





                                                 
                                                                  




































                                                                               
                                                                  

















                                                       
                                                                  












                                                                            
 














                                                               
                                                                  














                                                       







                                                                    





                                            

                                
 

                                             
 



                                                                    
 



                                                                    
                                                                           




                                      

              
                                  


                                    
                             

                                                       


           

                                  



                                                     




                                 



                                                    


           
                                                
 

                                   
                                     
                                      
                                          
         
                                  
                                                                


           
                                                  


                                                 
                                                          



                                                          
                                             
                                            

                                                    




                 








                                                                


                                                                         






                                                 











                                                                


                                                                                 

                                                    
                                        



                                                          


                                                                                 
                                                       
                 
                                       



                                       













                                                                          

                                                                              





                                              










                                                                
                                                                     


                                             

                                                       



                                                                            





                                                         
                                                                     



                                                                      



                                                          



                                                                               







                                                            
           

                              
              
                                                    
 
                             
                             
 

                                             


                                                                        


                                              
                                    


                                                                        
                                             
                                     
         




                               
                                    

                                
 

                                                                       
                                           

                                                                            


                                                                

                                                                              
                               

                                   
                                                     
 





                                                                        
                                             
                                                     


                                                       
 






                                                                        


                                                 
 
                                                     
 
                                                                         
 




                                                       
                                                                           
                                                              

                                                                        



                                                   
 



                                    



                                    







                          



                                    
                                                         

                       


































                                                                           

                                                               

                                                          
                                                                          







                                                                                
                                                            

 


                                 
                                                        
                                                                           
                           

 
           



                                          



                                                                            


                                                           
                                                      
                                                                 
                                                               

                              
                                                       
                         
                                                   
                 

                              
                                           

                                                            
         

                                







                                       
                                                                  











                                                          
                                                     










                                                              

                                                    
 
                                                   









































                                                                            






































                                                                              





























                                                        





                                                
                                               










                                         

                                                    



















                                                                   
                                               















                                                             

                                                                    









































                                                              
           
                                              
 
                                                 




                                                        

                                                   
 


                                                               












                                                                     
           













                                                                   
                                                                     
                                         

                          

                                         

                                                                           






                                                               
                                                               




                                                                



























                                                                    
                                      

 


                                  
                                                     







                                                            
                                                     




                                                               
          




                                         
                                                          




                                                             


                                                                                






                                                     



                                                               








                                          
                                                          

                         


                                                                                






                                                     



                                                               





                                       

                                    
 
                                                          

                       




                                                             





                                                                           


                                                               
                                                             

                                                   


                                                             

                       

         


                       










                                                  

                                    
 
                                                          

                       




                                                             



                                                                           


                                                               
                                                             

                                                   


                                                             

                       

         


                       




                                                                        












                                                                        
          




                              
                                                                           



                                
                                                         

                         

                              



                                                
 
                                                     
                                              
                                
 
                                                                
                                                        
                                                                    
                 
                                                   






                                                                           







                                              
                                                           



                                                               

                                                               






                                               
                                                             

                                                    
 
                                                                    





                                                               
                                                                        
                 

















                                     
                                                     




                                                  
                                                      


















                                                                  
                                                           






                                                    
                                                           






                                                      
                                                           








                                                                             
                                                      
 
          
                                               

                         






































                                                                                
                                                                         





                                                                    
                                                       

                                      
                                                               






                                               

                         
 
                      

                        
                                                         
                                                       
 

                                             

                                        






                                                              
                                                     

                                                                    
                                                       
                                                 
                                           
 








                                                                    



                                                                            

                 
                                                    
                                                   


                                                  
                                                   

                                                   
                                                              

                                                                         
                                                                     

                                                                       
                                                                       



                                                                        
                                                                           
                                                     
                         

                                                                   


                                                   



                         
                                     
 




                                                        

                                               




                                                                 
                                                                        


                                                      

                 

                                                                        
                                       







                                                                  
                                                              

                                                                      


                                           





                                                                         
                                                                         

                                                                          







                                                                         
 

                                                                    
           




                                             
                                                                
            
                                                                






































                                                                       

                                      



                                                           
 

                                                        
                                                   



                                                                               
                                                                 









                                                                                
           













                                                                          





                                      
                                                  
 




                                                      


































                                                                           




















                                                                          











                                     
                                                          





                                                                
                                                 




                              

                                      

                         



                     
                                               





                                          
                                                         















                                                                        
 







                                                          
                                                                     
                                                                          
                                                                         




















                                                                            
 

                                                       
 

                                             
                                                                        



                                                      

                                                               

                 
                                                           










                                                                          


                                           




                 
                                        

                         



                                         
                                                   
                                                       

              
                                                 



          
                                                   













                                                                              

                                   









                                                                            
                                                       





















                                                                              
                                                   


                

                                   


                                   











                                                                               
                                                         





                                                      

                                               








                                                                             
                                                          




                                               
                                                                            











                                                                      
                                                   
 

                                   
 
                                                        
 

                                                        




























                                                                  
                                                    
 

                

                                   
 
                                                    









                                                 
                                                          






                                                              
                                  








                                                       







                                                        



                                                             




                 
                                             

                         



                   

                                                           
 

                                
                                 


                                    

                                                                          
                                                         

                               




                                             
                                                   
                                                  
                                                                
                                                       
                                                                
                                                       
                                                                

              
                                                         

         


                                                      
















                                                                        








                                         
                                                                             







                                            
                            




                                                                           
                                               






                                             
          
                                                                



                


                                  
                                                 
 


                         
                                          
                                                              
                           
 
                                                    



                                                                             

                                                                      

                                                                         

                                                                       
                                                                               



                                                         
                                                         
 


                              


                                                                     


                 








                                                                               








                                                       


                                             




                                                                 





















                                                                           







                                                 
                      



















                                                                               


                                                                 
 
                                                                  
                                                                 
 

                                                                            
                                                                      
                 











                                                           
                                                                      








                                                                           
                                                     
                                                    

                                                             
 
                                                                  








                                                                         
                                                             









                                                                   
                                                                





                         
                                                         

                


                                               
                                                          
 
                                                         

                                                 
                                                          


                 
                                                                                        

                           
                                                      
                            
                                                                     
                                            


                               
                                                                  
                                                   
                                                         



                                  
                           
                                                    





                                                          
                                                                            
 
                                                      




                                        

                                                                      





                           
                                                                                       

                            
                                                        
                           
                                                                               

                            
                                                                



                               

                                                                                
 


                                                                                


                                   

                          
                                                    
                                                     



                                                          
                                                 



                 
          
                                                                          
 
                                                          
                                           
                       
 

                                                            
                                               










                                                                            
                                                      
 


                                                                          
                                  
                                                                           

                                         

                                   

 
                 
                                            


                 


                                                                
                  




                                                                  

                                                                 
 
                                                        
                                           




                                                  
 
                                             
                               

                                    
                                        




                                                    
                                                         
                                  
 


                                                                           
                                                                      
                                     

                                                    

                                                                            






                                                                           
 
                                                                                 
                                                            

                                   
                                        


                                                      
 
                                                      
                                               



                                                                                



                                              
                                   


                                     
 

                                                             

         

                                  
 
                                                                       
                                                                     



                                                                              
 
                                                    
                                                                     

                                                         
                                                                  

                                                 
         
 
                      

 
           
                                                                       
                                                       


                                              
              
                          
                                   
 




















                                                                       


                                               



                                                                             
 


                                                            

                                                                     







                                                                          

                                  

 
                  

                                                                 
 


                                                

                                              
 
                                                  
                                                     
                                                                          
 
                                                 
 
                               
                                                         
 

                         
 

                                                              
 

                                                                  

                                                          

 
          
                                                                                

                                                                        



                                     
                                                           
                            
                                                                              



                                                                                
                                                                      
                 


                           
                                         
                                                                       

                                             





                                                           

                                              





                                                            

                                               



                                                                            


                                                                      
                                                                   











                                                                               
                                                          
 


                                                                              
                                                                     





                                                                             
                                                         

                                                                         
                                            


                                                                     
                                                                   


                                           
                                                                   

                                                                      







                                                                      

                                          
         


                 
                 
                                            
 

                 


                                                                
                  




                                                                  
          
                                                                 
 
                                                        

                                                                  
                                         
 
                                             

                               





                                                                  
                                          
                           
                                                   
                                    
                                    



                                                    
                                                         
                                  
                               
 



                                                                            

                                   
                                                           
 
                                                                 

                                                             
 
                                      
                                              
                                                
 








                                                          

















                                                                                
                         
 
                                                

                                                
                                                                     
                                              
                                                                             


                                                                

                                          
                                                             


                                                                            
                                              
 
                                                       


                                                            
                                                                           
                                                                           
                                     
 
                                                            

                                                                              
 


                                                             
                                                           
 
                                           



                                     
                                              



                                                               

                                                                              

                                                                      



                                                            
 
                                                                    
                                                    


                         




                                              


                                                                 
                                                             

                              
         

                               
 
                         
                                                                    
 
                                                 
 
                                                         










                                                              
                                     
 

                                               
 
                                        




                                                          

                                                      
 
                                    
 
                           


                  

                                           

                                               
 
                                        




                                                      
                                    




                           
                                           
 

                                               
                                                          






                                                                      
                                                           

                                                  
                                




                                                          




                                                                  
                                                                 

                                                      
 
                                               
                                                          
                                              
         
 
                           

 
                 
                                           
 
                                                        
                                                        
 
                                                           
                                                            
                         












                                                                
 




                                                                         

                                                              




                         





















                                                                        
















                                                                             
                                                                    
 
                                                          

                                                              
 

                                                          
 
                                        






                                                                     
         






                                                                   
 
                                                          
                                          
 
                                                       
                                                                        
 


                         
















                                                                             
                                            








                                                                            

                                                          

                                                                             
                          
                                                          

                   

                                          
                                                                         
 



                                          
                                                                          


                                                                          
                                                          



                                                  
                      
                                                    
                                            
                                                                              

                                                                            
                                                               
                                      
                         

                                                                    
                                                                 
                                                       
 

                                                                    
                                                       

                              

         
                         

 
                                                                   




                                        
                                           
                               
                                  
              
 


                                
                                    



                                                                   

                                                    
                                                           


                                                         

                                                           









                                                                       






                                                                

                                                               













                                                                       
                                                                



                                                           
                                                                   
                      
                                                  
                                                       


                                                                                
                            



                 








                                                                             
                                      

 




























                                                                          
 
                                                

                                                



                                               




                                                          






                                                                                
                                                                          




                                                                                
                                                                          

                          







                                                                             
                                                                          

                               


                                                                                 
                                                                          























                                                             
              





                                                                      
 





                                                    
         

                                                
                                                                          
                            
                                                                         

                            

















                                                                      









                                                                             

                 

 
          

                                                           
 

                                   



                           
                                                 
                                        

                                                                        

                                 



                                                                 
 

                                                                       

                      

                                                                          

         




                                                                 
 

                                                                       

                      

                                                                          


                                      






                                                                       

                      

                                                                          


                                              
                                              


                                                

                            
                                                 
                                         

                                                                        

                 

 
          

                               




                                                                           

                                            

                                                      

                                          
                                                          


                                  
                                          
                                                          


                                  
                                                   
                                                            


                                  
                                                  
                                                          


                                  
                                               
                                                        
 
             
                  


          
                                                        





                                                                         
                      



















                                                                           
                         









                                                      







                                                                           
 


                                                         



                                                      
                                                                    




                                                         
                                                         
                                                         
                                                   






                                                                       

































                                                                               
                                                    

                                                                           


















































































                                                                         
                                                   




































                                                                      
                                          









                                                                               
                                          









                                                       
                                                     









































                                                                              

                                                                           





















                                                                         

                                                                          












                                                                           

                     




                                                                      

                                                                           








                                                                 

                             
                                                       























                                                                         
                                   
                                       
 




                                             


                                               
                                              
 



                                                                     


                                                                         





                                                       
                         

                                               




                                                       


                                                                     
                                                                        

























                                                                            
                                                        
                               

         
               
                                                            





                                                            





















































































































                                                                             
                                                                           









                                             


                                     




                                                                   



                                                                             


                                       

                                                       

                                       
                                                    

                                
                                                              
                 

                                                                    

         
                                                          






                                                        




                                                               








                                                                       
                                                          









                                                            
                                                                  








                                                                            

                                                         












                                                                             


                                                                        
                                                                  






                                                                              

                                                                  
 










                                                                            
                                                                             
                                                     
                                                                              















                                                                   
                                                                  

                                                              
 
























                                                                            

                            


                  
           
                                 
 
                         
 
                                                       



                                                     
 
                                                


                                                                        








                                                                              
                                                              
 

                                                           


                                                  
 

                                                      
         


                                                            

 








                                                                               




                                                
                    


                                                                  





















                                                                       
 
                                                                         
                                                                     
 

                                                                      

                                                      
 



                                                                                



                                                                          
 

                                                                  
 
                                                         
 







                                                                  



                                                                           
                                                       

                                                     
 










                                                                                
                                                                

                                      




                                                             
                                                            


                               
                                                                 
                                                                          

                          
 
                                    
                                
                             

                                                             


                                                 








                                                                              
                                               
                                        



                                                                        
 





                               
                     
                  






                                                                              
                                              
      
                                              




                                       
                                                                       


                                              
                                                                              









                                                          
                                         














                                                                           




                                                
                                      
 


                                           

                            
                                                    



                                                   




                                                       
 























                                                               

                                           



                                                       






                                                                           
                                                                          


                                                     

                                         













                                                                              
                                              

















                                                                              
                                               

                                                   
                                                                 


                                                                 
                                                   
              

                                                                               

         
                                               


                                                    



                                                       
                                                                              


                                        




                                                               



                                                               
                                
                                                         
                                                         

                                                      
                                                                 


                                                            
                                                       

                                                                 


                                                                 
 


                                                                 
 


                                                                  
                                                                 



                                            




                                                         
                                                                                
                                
 
                                                                        



                                              

                                                 
                  

 
           


                                       
                                      
                                      



                                                 
                                      
                                      
 

                                    




                                      



           
                                                                             

                                                    
                                         












                                                                
                                                

                                                      
                                                
 
                                               
                                                
 
                                                      
                                                
 

           
                                                

                           

                                
                                      
 






                                                
 

                                                  
                                                   
 

                                                                       
 

                              
 

                                                                           
 
                                           


           

                                                                             
 
              
                           
 
                                         
                      
 
                                      
                                                               
                                                   

                                                                                
                                         


                                  

                                                                 
         


           
                                                


                            









                                                           
 
                                                                     

                                                                   
                                      





                                                                         
                                                                
                                  

                                                             

                                                                    

                                                                          
                                                             
 
                                                             
                                                                               
 
                                                                    
                                                                               



                                                                               
 
                                                  
                                                                    
 
                                                         
                                                                    
 
                                           
                                                   
                                                                             

                                                                                               
                              
                 


                                                 
                               
 
                                        
                                                
                                                                            

                                                                                         
                              
                 


                                              
                            
 


                                                                               
 



                                                            

 



                                    
                










                                                                              


                                                            

                                              

                                   
                               

                                                                            










                                                                              







                                                                 

 
                                                          
 
                               
 

                                             


                                      
                       





                                      





                                                
                                          

                                
                                                               
 


                                                                          
                                                 


                                   
                                                                              









                                                                                
                                                               

                                       



                                                              
                                                       

                                                                 



                                                                  



                                  



                                                                
 
                                             
                                 
 
                                                
                                                                       
                                                          
                                    





                                          
                                                        
                                                                         

                                                           
 
                                           
 



                                                                           
                                                              
                                                                        


                                                                       
                                           
                 
         






                                  



                                                                
 

                                             
 


                                                                    
 

                                         
 
                                                        
                                                                         

                                                             
 





                                                            



















                                               


                                           
                                



                 
                                             





                                                                    
                                    
                                     
                          

                                                         
                                      



                 














                                                              


                                    
                       
                             

                             
                                 






                                                      



















                                                                      

                                                      
                                                                     



                                                      
                                                      





                                                      


                                                      
















                                                      








                                                      


                                                      
 





































                                                      



                                          

                                                            



                                                          




                                                 
                                                       
 
                                                
 
                                                  







                                                              
                                                         
 
                                                  







                                                              
                                                       


                         
                                                       








                                                      
                                                                               







                                                              
                                                                             
 
                                                                  












                                                  
                                 

                             
                            
                                     
                                     




                                     







                                     
          





                                          






                                                                  
 


                   


                                 
          
                                                     



                                           
                                 




                               
                                                              
                                                        
                                                        

                        
 
                                
                              




                                                      
                                                                 

                                 
                                            



                                          
 
                                                                         
                                                  

                               
                                        
                                             



                                                       


                                                                 


                                   
 


                                                             


                                    
                                                  
 

                     
                                                             






                                                                         

                                                
 

                                                         


                    


                                                             



                                    
                                                                          
                           
 
                                                         
                                        
 
                                            



                                                
                                                 

                             
                              
                                            
 
                                               
                                                

                                                     
                                    

























                                                                        














                                                                         
                             







                                                     





                                 
                                   



































                                                                     


                                    
                                                           



                                 
                                    



                                                
                                      
 









                                  







                                                                  
                                                                           
















                                                                     
                                              




                                          


                                                      









                                                                     
                                                                               











                                                                      
           
                                       
 

                           
                                 
                                    
                                        

                                                                         
                         
 
                                                           
 
                                                       
 
                                           
                                                            

                                                                       
                                                                       
                                                                               
                         
                 

                                                                  
                                                                   
                         
 



                                                 
 
                                                               
                                              
                                                               
 
                                                                        

                 
                                                           
 
                         





                                                                           







                                                                            
         

                                   
 
           

                                       
                                                         

                       
                                                                


                                          
 




                                                                       
 
                                                       
                                           
                                                   
                                                                          
                        
                                                    
                                                  
                                                                   
                 
 
              
                                                           
 



                                   


                                               
 

                                    
 

                                            
 



                                                                           
                                 
 

                                                           
 
                                                      
                                                                    


                                                                       
                                                   

                                                   
                    
                                                   


                   
                                                              

 


                                 
                            

                             
 
                                                    


                                    


                                             
                                                                             
                                                    



                                   



                  
                                
 

                             
 


                                             
                                                                 
                                   
         






                              
                                            
                                          
                                                  

                                           
                                                                             


           
                                                
 
                              
                                                      

                                                    
 



                                                                         
 



                                                                   




                                                 












                                                                     


                       



                               
                                  
                                                                   
                                          
                                                           


                                                                          

 
          

                                                 
                                     
                                                    
 

                                                   


                                              
                                                         
                                                
 

                                                          
                                                    
                                                         
                                                            
                                                                    


                                                                        

                                                              

                 

                                                               
                                                                
 
                                         
                                                                       

 



                                 
                                           

               

                               
                                         

                             


                                                  
                           
                             
                                

                              
 
                                  

                              
 
                                  

                              
 
                                                              


                                     

                                                                       

                            
                                              



                                                          
                                                                                                                                                                                                         

                                             
                                          
 

                                                   
                                                  
 


                                                          
                                 
                                                           
                                              



                                            
                                            
                                                
                                                  
                                                 
 
                                       

                 





                              
                          
                  


           
                                         
 
                                                                      
 


                                      
                       
         
 
                                  
 
                             

                                     
                                   
                      


           


                                         







                                                                                
                                                                             
                                                   

                                                           
                                                       






                                                
                                                                         
                                                                             

                                                                   
                                             

                                                                  


           

                                       
                                           
 

                            



                                                                              
                             

                                                                   
   
                  

                                                            
                                           

                           
                                


                                                








                                                           
 
                                             
                                               
                                         
                                                                         



                                      
                            


                                      
                                                 


                                                            
                                       


                                                                              
 
                                                
                                
                                  
 

                                                     




                                                                        
 












                                                                               
                                          



                                                                            
                 
              
                        
 

                                                                                   



                                    
                                              
                          
                                                     
 
                                             






                                                                        

                                         





                                                              
                                                     

                                 


                                                                                     
                                       
                                                                         
                                            









                                                                  
                                      
 

                                                         


                 
                            
 
                                                                
                                         






                                                                        
                                                                
                                                 


                            








                                                   
                                                                         






                                                             
                                                                               





                                                              





                                  
                                           
 
                                          
 
                                  
                              
                                   
                               
                          

                           
                          

                                   
                                            


                 











                                                     

                                                                     

                                    

                                                    


                                                             
                                             

 

                                                     
 
                                                                 

                                                                 
 
                                                                 

                                                                 
 

                                                                             
 
                                           
 
                                  
                                 
 
                               


                                                               

                               


                                                                

                             
                                                       

                             
                                                        
 
                              
                                                              
 
                               
                                                               
 
                                     

                                                                   
 
                                   

                                                           
 
                                    
                                                                   
 
                                  
                                                             





                                                                        

                                                                        
 

                                              


                                                 
                                                                              


                              
                                                                                           


                                              
                                     


                                                            
 







                                                                  
                                           
                                                   

                                           
                                                           







                                              

                                                            
                                                               
                                                                   
 
         
                             






                                                          

         

                                    
















                                               
                                      





                                         
 


                                                                  
                                           



                                                






                                                            

                                                            
                                    
 





                                                                        


                                             



                                                                
                                                                       



                                                                      



                                                  
                                              


                                                         
                                                    

                                                       
                                                                          
                                                    
                 


                                                                              










                                            





                                                                           
 
               
                                      
 
                   




                                                                      
                                           



                                                   
                                                 

 













                                                                          























                                               





















                                                       


                                                                 
                                           
 
                                           















                                                                 
                                           




                                        
                                                 












                                       
                                           

                 


                                



                                             
                                    
 
                                                           






                                                             
                                                         
                                                   
                                                                
                                              


                           
                                            
 
                                                              

                                                                      

         
                                               
                               
                                                                                
 
                                      



                 







                                           


                                           
                                           
 
                                   

                         
                                    





                                                                      
                                           

               


                                
                                                                









                                                                      
                                           

               


                                
                                                                








                                                                        
                                           




















                                                                        
                                           



                                                       
                                                                     






















                                                                             
                                                 


                                                                            


                                                                    

                                     
                                          
                                     
                                           







                                                                           
                                           
 
                                                      
                                       
                                                               


                                             
                                                      





                                                
                                                      
 
                                     


                                                               
                                          
                                                             
                                    



                                   

                                      

                                     


                                        
                        


                                                  




                                                  
                                  
                 






                                                                     
                                           
         


                 















                                                                             


                                                                              
                                           








                                                                              
                                           













                                                  




                                                 






                                        
                                           






                                                  
                                           




                           


                                              


                                           
                                                               




                                                               


                 
               
                                     
                          











































                                           
                              
                          
                             

  


                                                      

                                                                                        
                                                                    










                                                                         
































                                                                
                                         
                                          
                                  



                                                                
   
                                                     



                            
                      

  




                                                     
                      

  

                        
               










                                        
                                                     
 







                                      




                                                                            
                                           
 

                                         

                                                     

                      
                                          










                                                            
                                                           
                                                           
 

                                               
                      
                                             
                                                   


                                      




                                                   















                                                   

                                                    
















                                                                



                                                      
                                           

                                              
                                                     
                                 





                                                             



                                               
                                                        

                                                        

                                              

                                     




                                               

                                                  

                                            

                                                             


                                    



                                                                 





                                              
                                           


                 

                                         























                                                                          



                                                    


                 





                                                  
                                                              
            
                                                         

 


                                                




                                                     
                               
 



                                                                














                                                                                

 
                                                    


                                                    

                                                    


                                                  
                                                










                                                      
                                                   
                                                    
                                               


                                                   
                                                         
                                                      

                                                       





                                                              
                                                  
                                           









                                            
                                                                 

                                           


                                        
                                            
                                                                           
                                              






                                           
                                                                 

                                           


                                        
                                            
                                                                             
                                              














                                                     
                                           
 


                                                

                                                            
                                                            







                                                    
                                           





                                                                      
                                                                             

 
                                 


                                 
                                           
              
 
                                             




                                                             
         


      









                                                                  
                                                      












                                                                              
                                                              






                                
                                                              




                               








                                                     
                                            





































                                                                               
                                                 


 


                                     
                     
                 
                                            
 

                                     





                                        

                                                                            


                              




                                                         

         


                                                                          
 


                                             
 

                                     
 



                                                                 
 
                                                
 



                                              
 



                                                                  
 
                                                
 

                                                           
                              


                                              




                    




                                                             
                     
                
                                       
                
 
                                        
                              



                          







                                                                     


                                                                    
                                                                            



                                                              
                                   
                                                                           





                                                        
                                                                               






                                                              
                                   
                                                                               



                                     



                                      
                                           


                                   
                                                    

                                                                      
                                                                     





                                                               
                                                                             



                                     

                                         



                                                                            


                                                                


                                               


                                                                     
                                                                           


                                           
                                            
                                                
                                                            


                                                            

                                                           
 
                


                                                                          
                                                                           


                                           
                                                    

         

                                                                           
                                                        

         

                                                                               
                                                       

         

                                                          
                                                               
            
                                                               






                                                                         
                                                                                  

                                           
                                                                          
                                                                               


                                   
                                          
                                       







                                                                
                                                
 
                                   
                                                                              




                                   
                                                          

                                                      


                                                     
                                                                                
              

                                                      


                                                                         
                                                         


                                                         
                                                                        



                                   


                                   
                                                      
                                           

                                 




                                                  









                                                                      
                                                   



                                                  
                                                  

                                          
                                                                         




                                                              
                                                         


                                                    
                                                               
 


                                                   
                                                                




                                                            
 
                                                            


                                          
                                                            





                                           
                                       


                        
                                       
                                    
                              
                          
 

                                       


                              
                                                                           
 
                                                   
 

                         
                                                                     


                                                            
                                                      
 
                               
                                                   
                                          
                                                                   
                                                                   
                                                      

                                    








                                                                            
                                         
                                                              
                                                                            
                 

                                                   
                                                       


                                                 
                                                             
 

                             

                                               

                                                                               
                                              

                            
 











                                                            







                                                                               
                                                                            






                                                                                
 

                                                         






                                                      
                                  

                                                        
                               
                                                        


                                            

                             


                 
                                                
                                                       

                                                    
 

                                     
                                   












                                    




                                           
                                         


                                               
                                               
                                              
                                                    







                                                             









                                                       

                               
              
 
                                             





                                                            
                                              

                                                                          

                               

 



                                                      
                                                   





                                                       
                                 



                                            

                                                                                 
                                    

 
                    




                                                                    
               
                     

                                   
                                       

                                         
                                                           









                                        
                                           
                                         
                                             
 
                              
 

                                   



                                       

                                                
 

                                                                     

                                                             
                                                   

                                                          
                                                                 
                                                       

                                                              
                                              

                                                     
                                          
                                                                    
                           

         






                                                                                  
 
                 













                                                    





                                                       
                                           


                               




                                                    


                                     

                                  
                                                
                                                       

                                                    
 
                         
 





                                    
                                                      

                                                       
                                           
 




                                                                           


                                
                                          
                                  

                                   
                               
                           
                                                                






                                                       
                                           
 
                                


                                
                                         
                                 
                             
                                   


                 
















                                                                         




                                                   
                                 
                                          




















                                                                

                                



                                      
                                                                     










                                                         
         
                      
 
                                                 

                              




                                                                                

         
                      















                                                                       
                                           










                                                     
                                            





                                                       
                                            



                                 
                                                     











                                                
/* bnx2.c: Broadcom NX2 network driver.
 *
 * Copyright (c) 2004-2010 Broadcom Corporation
 *
 * 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.
 *
 * Written by: Michael Chan  (mchan@broadcom.com)
 */

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/module.h>
#include <linux/moduleparam.h>

#include <linux/kernel.h>
#include <linux/timer.h>
#include <linux/errno.h>
#include <linux/ioport.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/dma-mapping.h>
#include <linux/bitops.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/delay.h>
#include <asm/byteorder.h>
#include <asm/page.h>
#include <linux/time.h>
#include <linux/ethtool.h>
#include <linux/mii.h>
#include <linux/if_vlan.h>
#include <net/ip.h>
#include <net/tcp.h>
#include <net/checksum.h>
#include <linux/workqueue.h>
#include <linux/crc32.h>
#include <linux/prefetch.h>
#include <linux/cache.h>
#include <linux/firmware.h>
#include <linux/log2.h>
#include <linux/aer.h>

#if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE)
#define BCM_CNIC 1
#include "cnic_if.h"
#endif
#include "bnx2.h"
#include "bnx2_fw.h"

#define DRV_MODULE_NAME		"bnx2"
#define DRV_MODULE_VERSION	"2.0.21"
#define DRV_MODULE_RELDATE	"Dec 23, 2010"
#define FW_MIPS_FILE_06		"bnx2/bnx2-mips-06-6.2.1.fw"
#define FW_RV2P_FILE_06		"bnx2/bnx2-rv2p-06-6.0.15.fw"
#define FW_MIPS_FILE_09		"bnx2/bnx2-mips-09-6.2.1.fw"
#define FW_RV2P_FILE_09_Ax	"bnx2/bnx2-rv2p-09ax-6.0.17.fw"
#define FW_RV2P_FILE_09		"bnx2/bnx2-rv2p-09-6.0.17.fw"

#define RUN_AT(x) (jiffies + (x))

/* Time in jiffies before concluding the transmitter is hung. */
#define TX_TIMEOUT  (5*HZ)

static char version[] __devinitdata =
	"Broadcom NetXtreme II Gigabit Ethernet Driver " DRV_MODULE_NAME " v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";

MODULE_AUTHOR("Michael Chan <mchan@broadcom.com>");
MODULE_DESCRIPTION("Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver");
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_MODULE_VERSION);
MODULE_FIRMWARE(FW_MIPS_FILE_06);
MODULE_FIRMWARE(FW_RV2P_FILE_06);
MODULE_FIRMWARE(FW_MIPS_FILE_09);
MODULE_FIRMWARE(FW_RV2P_FILE_09);
MODULE_FIRMWARE(FW_RV2P_FILE_09_Ax);

static int disable_msi = 0;

module_param(disable_msi, int, 0);
MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");

typedef enum {
	BCM5706 = 0,
	NC370T,
	NC370I,
	BCM5706S,
	NC370F,
	BCM5708,
	BCM5708S,
	BCM5709,
	BCM5709S,
	BCM5716,
	BCM5716S,
} board_t;

/* indexed by board_t, above */
static struct {
	char *name;
} board_info[] __devinitdata = {
	{ "Broadcom NetXtreme II BCM5706 1000Base-T" },
	{ "HP NC370T Multifunction Gigabit Server Adapter" },
	{ "HP NC370i Multifunction Gigabit Server Adapter" },
	{ "Broadcom NetXtreme II BCM5706 1000Base-SX" },
	{ "HP NC370F Multifunction Gigabit Server Adapter" },
	{ "Broadcom NetXtreme II BCM5708 1000Base-T" },
	{ "Broadcom NetXtreme II BCM5708 1000Base-SX" },
	{ "Broadcom NetXtreme II BCM5709 1000Base-T" },
	{ "Broadcom NetXtreme II BCM5709 1000Base-SX" },
	{ "Broadcom NetXtreme II BCM5716 1000Base-T" },
	{ "Broadcom NetXtreme II BCM5716 1000Base-SX" },
	};

static DEFINE_PCI_DEVICE_TABLE(bnx2_pci_tbl) = {
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706,
	  PCI_VENDOR_ID_HP, 0x3101, 0, 0, NC370T },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706,
	  PCI_VENDOR_ID_HP, 0x3106, 0, 0, NC370I },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5706 },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5708,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5708 },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706S,
	  PCI_VENDOR_ID_HP, 0x3102, 0, 0, NC370F },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5706S,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5706S },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5708S,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5708S },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5709,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5709 },
	{ PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_NX2_5709S,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5709S },
	{ PCI_VENDOR_ID_BROADCOM, 0x163b,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5716 },
	{ PCI_VENDOR_ID_BROADCOM, 0x163c,
	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, BCM5716S },
	{ 0, }
};

static const struct flash_spec flash_table[] =
{
#define BUFFERED_FLAGS		(BNX2_NV_BUFFERED | BNX2_NV_TRANSLATE)
#define NONBUFFERED_FLAGS	(BNX2_NV_WREN)
	/* Slow EEPROM */
	{0x00000000, 0x40830380, 0x009f0081, 0xa184a053, 0xaf000400,
	 BUFFERED_FLAGS, SEEPROM_PAGE_BITS, SEEPROM_PAGE_SIZE,
	 SEEPROM_BYTE_ADDR_MASK, SEEPROM_TOTAL_SIZE,
	 "EEPROM - slow"},
	/* Expansion entry 0001 */
	{0x08000002, 0x4b808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, 0,
	 "Entry 0001"},
	/* Saifun SA25F010 (non-buffered flash) */
	/* strap, cfg1, & write1 need updates */
	{0x04000001, 0x47808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, SAIFUN_FLASH_BASE_TOTAL_SIZE*2,
	 "Non-buffered flash (128kB)"},
	/* Saifun SA25F020 (non-buffered flash) */
	/* strap, cfg1, & write1 need updates */
	{0x0c000003, 0x4f808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, SAIFUN_FLASH_BASE_TOTAL_SIZE*4,
	 "Non-buffered flash (256kB)"},
	/* Expansion entry 0100 */
	{0x11000000, 0x53808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, 0,
	 "Entry 0100"},
	/* Entry 0101: ST M45PE10 (non-buffered flash, TetonII B0) */
	{0x19000002, 0x5b808201, 0x000500db, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, ST_MICRO_FLASH_PAGE_BITS, ST_MICRO_FLASH_PAGE_SIZE,
	 ST_MICRO_FLASH_BYTE_ADDR_MASK, ST_MICRO_FLASH_BASE_TOTAL_SIZE*2,
	 "Entry 0101: ST M45PE10 (128kB non-bufferred)"},
	/* Entry 0110: ST M45PE20 (non-buffered flash)*/
	{0x15000001, 0x57808201, 0x000500db, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, ST_MICRO_FLASH_PAGE_BITS, ST_MICRO_FLASH_PAGE_SIZE,
	 ST_MICRO_FLASH_BYTE_ADDR_MASK, ST_MICRO_FLASH_BASE_TOTAL_SIZE*4,
	 "Entry 0110: ST M45PE20 (256kB non-bufferred)"},
	/* Saifun SA25F005 (non-buffered flash) */
	/* strap, cfg1, & write1 need updates */
	{0x1d000003, 0x5f808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, SAIFUN_FLASH_BASE_TOTAL_SIZE,
	 "Non-buffered flash (64kB)"},
	/* Fast EEPROM */
	{0x22000000, 0x62808380, 0x009f0081, 0xa184a053, 0xaf000400,
	 BUFFERED_FLAGS, SEEPROM_PAGE_BITS, SEEPROM_PAGE_SIZE,
	 SEEPROM_BYTE_ADDR_MASK, SEEPROM_TOTAL_SIZE,
	 "EEPROM - fast"},
	/* Expansion entry 1001 */
	{0x2a000002, 0x6b808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, 0,
	 "Entry 1001"},
	/* Expansion entry 1010 */
	{0x26000001, 0x67808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, 0,
	 "Entry 1010"},
	/* ATMEL AT45DB011B (buffered flash) */
	{0x2e000003, 0x6e808273, 0x00570081, 0x68848353, 0xaf000400,
	 BUFFERED_FLAGS, BUFFERED_FLASH_PAGE_BITS, BUFFERED_FLASH_PAGE_SIZE,
	 BUFFERED_FLASH_BYTE_ADDR_MASK, BUFFERED_FLASH_TOTAL_SIZE,
	 "Buffered flash (128kB)"},
	/* Expansion entry 1100 */
	{0x33000000, 0x73808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, 0,
	 "Entry 1100"},
	/* Expansion entry 1101 */
	{0x3b000002, 0x7b808201, 0x00050081, 0x03840253, 0xaf020406,
	 NONBUFFERED_FLAGS, SAIFUN_FLASH_PAGE_BITS, SAIFUN_FLASH_PAGE_SIZE,
	 SAIFUN_FLASH_BYTE_ADDR_MASK, 0,
	 "Entry 1101"},
	/* Ateml Expansion entry 1110 */
	{0x37000001, 0x76808273, 0x00570081, 0x68848353, 0xaf000400,
	 BUFFERED_FLAGS, BUFFERED_FLASH_PAGE_BITS, BUFFERED_FLASH_PAGE_SIZE,
	 BUFFERED_FLASH_BYTE_ADDR_MASK, 0,
	 "Entry 1110 (Atmel)"},
	/* ATMEL AT45DB021B (buffered flash) */
	{0x3f000003, 0x7e808273, 0x00570081, 0x68848353, 0xaf000400,
	 BUFFERED_FLAGS, BUFFERED_FLASH_PAGE_BITS, BUFFERED_FLASH_PAGE_SIZE,
	 BUFFERED_FLASH_BYTE_ADDR_MASK, BUFFERED_FLASH_TOTAL_SIZE*2,
	 "Buffered flash (256kB)"},
};

static const struct flash_spec flash_5709 = {
	.flags		= BNX2_NV_BUFFERED,
	.page_bits	= BCM5709_FLASH_PAGE_BITS,
	.page_size	= BCM5709_FLASH_PAGE_SIZE,
	.addr_mask	= BCM5709_FLASH_BYTE_ADDR_MASK,
	.total_size	= BUFFERED_FLASH_TOTAL_SIZE*2,
	.name		= "5709 Buffered flash (256kB)",
};

MODULE_DEVICE_TABLE(pci, bnx2_pci_tbl);

static void bnx2_init_napi(struct bnx2 *bp);
static void bnx2_del_napi(struct bnx2 *bp);

static inline u32 bnx2_tx_avail(struct bnx2 *bp, struct bnx2_tx_ring_info *txr)
{
	u32 diff;

	/* Tell compiler to fetch tx_prod and tx_cons from memory. */
	barrier();

	/* The ring uses 256 indices for 255 entries, one of them
	 * needs to be skipped.
	 */
	diff = txr->tx_prod - txr->tx_cons;
	if (unlikely(diff >= TX_DESC_CNT)) {
		diff &= 0xffff;
		if (diff == TX_DESC_CNT)
			diff = MAX_TX_DESC_CNT;
	}
	return bp->tx_ring_size - diff;
}

static u32
bnx2_reg_rd_ind(struct bnx2 *bp, u32 offset)
{
	u32 val;

	spin_lock_bh(&bp->indirect_lock);
	REG_WR(bp, BNX2_PCICFG_REG_WINDOW_ADDRESS, offset);
	val = REG_RD(bp, BNX2_PCICFG_REG_WINDOW);
	spin_unlock_bh(&bp->indirect_lock);
	return val;
}

static void
bnx2_reg_wr_ind(struct bnx2 *bp, u32 offset, u32 val)
{
	spin_lock_bh(&bp->indirect_lock);
	REG_WR(bp, BNX2_PCICFG_REG_WINDOW_ADDRESS, offset);
	REG_WR(bp, BNX2_PCICFG_REG_WINDOW, val);
	spin_unlock_bh(&bp->indirect_lock);
}

static void
bnx2_shmem_wr(struct bnx2 *bp, u32 offset, u32 val)
{
	bnx2_reg_wr_ind(bp, bp->shmem_base + offset, val);
}

static u32
bnx2_shmem_rd(struct bnx2 *bp, u32 offset)
{
	return bnx2_reg_rd_ind(bp, bp->shmem_base + offset);
}

static void
bnx2_ctx_wr(struct bnx2 *bp, u32 cid_addr, u32 offset, u32 val)
{
	offset += cid_addr;
	spin_lock_bh(&bp->indirect_lock);
	if (CHIP_NUM(bp) == CHIP_NUM_5709) {
		int i;

		REG_WR(bp, BNX2_CTX_CTX_DATA, val);
		REG_WR(bp, BNX2_CTX_CTX_CTRL,
		       offset | BNX2_CTX_CTX_CTRL_WRITE_REQ);
		for (i = 0; i < 5; i++) {
			val = REG_RD(bp, BNX2_CTX_CTX_CTRL);
			if ((val & BNX2_CTX_CTX_CTRL_WRITE_REQ) == 0)
				break;
			udelay(5);
		}
	} else {
		REG_WR(bp, BNX2_CTX_DATA_ADR, offset);
		REG_WR(bp, BNX2_CTX_DATA, val);
	}
	spin_unlock_bh(&bp->indirect_lock);
}

#ifdef BCM_CNIC
static int
bnx2_drv_ctl(struct net_device *dev, struct drv_ctl_info *info)
{
	struct bnx2 *bp = netdev_priv(dev);
	struct drv_ctl_io *io = &info->data.io;

	switch (info->cmd) {
	case DRV_CTL_IO_WR_CMD:
		bnx2_reg_wr_ind(bp, io->offset, io->data);
		break;
	case DRV_CTL_IO_RD_CMD:
		io->data = bnx2_reg_rd_ind(bp, io->offset);
		break;
	case DRV_CTL_CTX_WR_CMD:
		bnx2_ctx_wr(bp, io->cid_addr, io->offset, io->data);
		break;
	default:
		return -EINVAL;
	}
	return 0;
}

static void bnx2_setup_cnic_irq_info(struct bnx2 *bp)
{
	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
	struct bnx2_napi *bnapi = &bp->bnx2_napi[0];
	int sb_id;

	if (bp->flags & BNX2_FLAG_USING_MSIX) {
		cp->drv_state |= CNIC_DRV_STATE_USING_MSIX;
		bnapi->cnic_present = 0;
		sb_id = bp->irq_nvecs;
		cp->irq_arr[0].irq_flags |= CNIC_IRQ_FL_MSIX;
	} else {
		cp->drv_state &= ~CNIC_DRV_STATE_USING_MSIX;
		bnapi->cnic_tag = bnapi->last_status_idx;
		bnapi->cnic_present = 1;
		sb_id = 0;
		cp->irq_arr[0].irq_flags &= ~CNIC_IRQ_FL_MSIX;
	}

	cp->irq_arr[0].vector = bp->irq_tbl[sb_id].vector;
	cp->irq_arr[0].status_blk = (void *)
		((unsigned long) bnapi->status_blk.msi +
		(BNX2_SBLK_MSIX_ALIGN_SIZE * sb_id));
	cp->irq_arr[0].status_blk_num = sb_id;
	cp->num_irq = 1;
}

static int bnx2_register_cnic(struct net_device *dev, struct cnic_ops *ops,
			      void *data)
{
	struct bnx2 *bp = netdev_priv(dev);
	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;

	if (ops == NULL)
		return -EINVAL;

	if (cp->drv_state & CNIC_DRV_STATE_REGD)
		return -EBUSY;

	bp->cnic_data = data;
	rcu_assign_pointer(bp->cnic_ops, ops);

	cp->num_irq = 0;
	cp->drv_state = CNIC_DRV_STATE_REGD;

	bnx2_setup_cnic_irq_info(bp);

	return 0;
}

static int bnx2_unregister_cnic(struct net_device *dev)
{
	struct bnx2 *bp = netdev_priv(dev);
	struct bnx2_napi *bnapi = &bp->bnx2_napi[0];
	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;

	mutex_lock(&bp->cnic_lock);
	cp->drv_state = 0;
	bnapi->cnic_present = 0;
	rcu_assign_pointer(bp->cnic_ops, NULL);
	mutex_unlock(&bp->cnic_lock);
	synchronize_rcu();
	return 0;
}

struct cnic_eth_dev *bnx2_cnic_probe(struct net_device *dev)
{
	struct bnx2 *bp = netdev_priv(dev);
	struct cnic_eth_dev *cp = &bp->cnic_eth_dev;

	cp->drv_owner = THIS_MODULE;
	cp->chip_id = bp->chip_id;
	cp->pdev = bp->pdev;
	cp->io_base = bp->regview;
	cp->drv_ctl = bnx2_drv_ctl;
	cp->drv_register_cnic = bnx2_register_cnic;
	cp->drv_unregister_cnic = bnx2_unregister_cnic;

	return cp;
}
EXPORT_SYMBOL(bnx2_cnic_probe);

static void
bnx2_cnic_stop(struct bnx2 *bp)
{
	struct cnic_ops *c_ops;
	struct cnic_ctl_info info;

	mutex_lock(&bp->cnic_lock);
	c_ops = bp->cnic_ops;
	if (c_ops) {
		info.cmd = CNIC_CTL_STOP_CMD;
		c_ops->cnic_ctl(bp->cnic_data, &info);
	}
	mutex_unlock(&bp->cnic_lock);
}

static void
bnx2_cnic_start(struct bnx2 *bp)
{
	struct cnic_ops *c_ops;
	struct cnic_ctl_info info;

	mutex_lock(&bp->cnic_lock);
	c_ops = bp->cnic_ops;
	if (c_ops) {
		if (!(bp->flags & BNX2_FLAG_USING_MSIX)) {
			struct bnx2_napi *bnapi = &bp->bnx2_napi[0];

			bnapi->cnic_tag = bnapi->last_status_idx;
		}
		info.cmd = CNIC_CTL_START_CMD;
		c_ops->cnic_ctl(bp->cnic_data, &info);
	}
	mutex_unlock(&bp->cnic_lock);
}

#else

static void
bnx2_cnic_stop(struct bnx2 *bp)
{
}

static void
bnx2_cnic_start(struct bnx2 *bp)
{
}

#endif

static int
bnx2_read_phy(struct bnx2 *bp, u32 reg, u32 *val)
{
	u32 val1;
	int i, ret;

	if (bp->phy_flags & BNX2_PHY_FLAG_INT_MODE_AUTO_POLLING) {
		val1 = REG_RD(bp, BNX2_EMAC_MDIO_MODE);
		val1 &= ~BNX2_EMAC_MDIO_MODE_AUTO_POLL;

		REG_WR(bp, BNX2_EMAC_MDIO_MODE, val1);
		REG_RD(bp, BNX2_EMAC_MDIO_MODE);

		udelay(40);
	}

	val1 = (bp->phy_addr << 21) | (reg << 16) |
		BNX2_EMAC_MDIO_COMM_COMMAND_READ | BNX2_EMAC_MDIO_COMM_DISEXT |
		BNX2_EMAC_MDIO_COMM_START_BUSY;
	REG_WR(bp, BNX2_EMAC_MDIO_COMM, val1);

	for (i = 0; i < 50; i++) {
		udelay(10);

		val1 = REG_RD(bp, BNX2_EMAC_MDIO_COMM);
		if (!(val1 & BNX2_EMAC_MDIO_COMM_START_BUSY)) {
			udelay(5);

			val1 = REG_RD(bp, BNX2_EMAC_MDIO_COMM);
			val1 &= BNX2_EMAC_MDIO_COMM_DATA;

			break;
		}
	}

	if (val1 & BNX2_EMAC_MDIO_COMM_START_BUSY) {
		*val = 0x0;
		ret = -EBUSY;
	}
	else {
		*val = val1;
		ret = 0;
	}

	if (bp->phy_flags & BNX2_PHY_FLAG_INT_MODE_AUTO_POLLING) {
		val1 = REG_RD(bp, BNX2_EMAC_MDIO_MODE);
		val1 |= BNX2_EMAC_MDIO_MODE_AUTO_POLL;

		REG_WR(bp, BNX2_EMAC_MDIO_MODE, val1);
		REG_RD(bp, BNX2_EMAC_MDIO_MODE);

		udelay(40);
	}

	return ret;
}

static int
bnx2_write_phy(struct bnx2 *bp, u32 reg, u32 val)
{
	u32 val1;
	int i, ret;

	if (bp->phy_flags & BNX2_PHY_FLAG_INT_MODE_AUTO_POLLING) {
		val1 = REG_RD(bp, BNX2_EMAC_MDIO_MODE);
		val1 &= ~BNX2_EMAC_MDIO_MODE_AUTO_POLL;

		REG_WR(bp, BNX2_EMAC_MDIO_MODE, val1);
		REG_RD(bp, BNX2_EMAC_MDIO_MODE);

		udelay(40);
	}

	val1 = (bp->phy_addr << 21) | (reg << 16) | val |
		BNX2_EMAC_MDIO_COMM_COMMAND_WRITE |
		BNX2_EMAC_MDIO_COMM_START_BUSY | BNX2_EMAC_MDIO_COMM_DISEXT;
	REG_WR(bp, BNX2_EMAC_MDIO_COMM, val1);

	for (i = 0; i < 50; i++) {
		udelay(10);

		val1 = REG_RD(bp, BNX2_EMAC_MDIO_COMM);
		if (!(val1 & BNX2_EMAC_MDIO_COMM_START_BUSY)) {
			udelay(5);
			break;
		}
	}

	if (val1 & BNX2_EMAC_MDIO_COMM_START_BUSY)
        	ret = -EBUSY;
	else