1/* 2 * Copyright (c) 2008, ETH Zurich. All rights reserved. 3 * 4 * This file is distributed under the terms in the attached LICENSE file. 5 * If you do not find this file, copies can be found by writing to: 6 * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group. 7 */ 8/* 9 * e1000_helpers.c 10 * 11 * Created on: Feb 14, 2013 12 * Author: mao 13 */ 14#include "e1000n.h" 15#include <pci/devids.h> 16 17/***************************************************************** 18 * 19 * 20 ****************************************************************/ 21e1000_mac_type_t e1000_get_mac_type(uint32_t vendor, uint32_t device_id) 22{ 23 if (vendor == PCI_VENDOR_INTEL) { 24 25 switch (device_id) { 26 case E1000_DEVICE_82542: 27 return e1000_82542; 28 case E1000_DEVICE_82543GC_FIBER: 29 case E1000_DEVICE_82543GC_COPPER: 30 return e1000_82543; 31 case E1000_DEVICE_82544EI_COPPER: 32 case E1000_DEVICE_82544EI_FIBER: 33 case E1000_DEVICE_82544GC_COPPER: 34 case E1000_DEVICE_82544GC_LOM: 35 return e1000_82544; 36 case E1000_DEVICE_82540EM: 37 case E1000_DEVICE_82540EM_LOM: 38 case E1000_DEVICE_82540EP: 39 case E1000_DEVICE_82540EP_LOM: 40 case E1000_DEVICE_82540EP_LP: 41 return e1000_82540; 42 case E1000_DEVICE_82545EM_COPPER: 43 case E1000_DEVICE_82545EM_FIBER: 44 return e1000_82545; 45 case E1000_DEVICE_82545GM_COPPER: 46 case E1000_DEVICE_82545GM_FIBER: 47 case E1000_DEVICE_82545GM_SERDES: 48 return e1000_82545_rev_3; 49 case E1000_DEVICE_82546EB_COPPER: 50 case E1000_DEVICE_82546EB_FIBER: 51 case E1000_DEVICE_82546EB_QUAD_COPPER: 52 return e1000_82546; 53 case E1000_DEVICE_82546GB_COPPER: 54 case E1000_DEVICE_82546GB_FIBER: 55 case E1000_DEVICE_82546GB_SERDES: 56 case E1000_DEVICE_82546GB_PCIE: 57 case E1000_DEVICE_82546GB_QUAD_COPPER: 58 case E1000_DEVICE_82546GB_QUAD_COPPER_KSP3: 59 return e1000_82546_rev_3; 60 case E1000_DEVICE_82541EI: 61 case E1000_DEVICE_82541EI_MOBILE: 62 case E1000_DEVICE_82541ER_LOM: 63 return e1000_82541; 64 case E1000_DEVICE_82541ER: 65 case E1000_DEVICE_82541GI: 66 case E1000_DEVICE_82541GI_LF: 67 case E1000_DEVICE_82541GI_MOBILE: 68 return e1000_82541_rev_2; 69 case E1000_DEVICE_82547EI: 70 case E1000_DEVICE_82547EI_MOBILE: 71 return e1000_82547; 72 case E1000_DEVICE_82547GI: 73 return e1000_82547_rev_2; 74 case E1000_DEVICE_82563EB: 75 return e1000_82563; 76 case E1000_DEVICE_82571EB_COPPER: 77 case E1000_DEVICE_82571EB_FIBER: 78 case E1000_DEVICE_82571EB_SERDES: 79 case E1000_DEVICE_82571EB_SERDES_DUAL: 80 case E1000_DEVICE_82571EB_SERDES_QUAD: 81 case E1000_DEVICE_82571EB_QUAD_COPPER: 82 case E1000_DEVICE_82571EB_QUAD_FIBER: 83 case E1000_DEVICE_82571EB_QUAD_COPPER_LOWPROFILE: 84 return e1000_82571; 85 case E1000_DEVICE_82572EI_COPPER: 86 case E1000_DEVICE_82572EI_FIBER: 87 case E1000_DEVICE_82572EI_SERDES: 88 case E1000_DEVICE_82572EI: 89 return e1000_82572; 90 case E1000_DEVICE_82573E: 91 case E1000_DEVICE_82573E_IAMT: 92 case E1000_DEVICE_82573L: 93 return e1000_82573; 94 case E1000_DEVICE_82574L: 95 return e1000_82574; 96 case E1000_DEVICE_82575EB: 97 return e1000_82575; 98 case E1000_DEVICE_82576EG: 99 return e1000_82576; 100 case E1000_DEVICE_I210: 101 case E1000_DEVICE_I219: 102 return e1000_I210; 103 case E1000_DEVICE_I350_EEPROM_LESS: 104 case E1000_DEVICE_I350_COPPER: 105 case E1000_DEVICE_I350_FIBER: 106 case E1000_DEVICE_I350_BACKPANE: 107 case E1000_DEVICE_I350_SGMII: 108 case E1000_DEVICE_I350_DUMMY: 109 return e1000_I350; 110 default: 111 E1000_DEBUG("Unsupported device: vendor: 0x%x, device id: 0x%x\n", PCI_VENDOR_INTEL, device_id); 112 return e1000_undefined; 113 } 114 } 115 116 return e1000_undefined; 117} 118 119char * e1000_mac_type_to_str(e1000_mac_type_t mt){ 120 char * names[] = { 121 "undefined", 122 "82542", 123 "82543", 124 "82544", 125 "82540", 126 "82545", 127 "82545_rev_3", 128 "82546", 129 "82546_rev_3", 130 "82541", 131 "82541_rev_2", 132 "82547", 133 "82547_rev_2", 134 "82563", 135 "82571", 136 "82572", 137 "82573", 138 "82574", 139 "82575", 140 "82576", 141 "I210", 142 "I219", 143 "I350" 144 }; 145 if(mt >= e1000_num_macs) return NULL; 146 return names[mt]; 147}; 148 149bool e1000_supports_msix(e1000_mac_type_t mt) 150{ 151 switch (mt) { 152 case e1000_82575: 153 case e1000_82576: 154 case e1000_82574: 155 //case e1000_I350: 156 case e1000_I210: 157 return true; 158 default: 159 return false; 160 } 161} 162 163 164cycles_t tscperms; 165 166 167 168 169