1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright(c) 2007-2010 Intel Corporation. All rights reserved.
  24  */
  25 
  26 /*
  27  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  28  */
  29 
  30 /* IntelVersion: 1.446.2.1 v3_3_14_3_BHSW1 */
  31 
  32 #ifndef _IGB_HW_H
  33 #define _IGB_HW_H
  34 
  35 #ifdef __cplusplus
  36 extern "C" {
  37 #endif
  38 
  39 #include "igb_osdep.h"
  40 #include "igb_regs.h"
  41 #include "igb_defines.h"
  42 
  43 struct e1000_hw;
  44 
  45 #define E1000_DEV_ID_82576                      0x10C9
  46 #define E1000_DEV_ID_82576_FIBER                0x10E6
  47 #define E1000_DEV_ID_82576_SERDES               0x10E7
  48 #define E1000_DEV_ID_82576_QUAD_COPPER          0x10E8
  49 #define E1000_DEV_ID_82576_NS                   0x150A
  50 #define E1000_DEV_ID_82576_NS_SERDES            0x1518
  51 #define E1000_DEV_ID_82576_SERDES_QUAD          0x150D
  52 #define E1000_DEV_ID_82575EB_COPPER             0x10A7
  53 #define E1000_DEV_ID_82575EB_FIBER_SERDES       0x10A9
  54 #define E1000_DEV_ID_82575GB_QUAD_COPPER        0x10D6
  55 #define E1000_DEV_ID_82580_COPPER               0x150E
  56 #define E1000_DEV_ID_82580_FIBER                0x150F
  57 #define E1000_DEV_ID_82580_SERDES               0x1510
  58 #define E1000_DEV_ID_82580_SGMII                0x1511
  59 #define E1000_DEV_ID_82580_COPPER_DUAL          0x1516
  60 
  61 #define E1000_REVISION_0 0
  62 #define E1000_REVISION_1 1
  63 #define E1000_REVISION_2 2
  64 #define E1000_REVISION_3 3
  65 #define E1000_REVISION_4 4
  66 
  67 #define E1000_FUNC_0    0
  68 #define E1000_FUNC_1    1
  69 #define E1000_FUNC_2    2
  70 #define E1000_FUNC_3    3
  71 
  72 #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0       0
  73 #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1       3
  74 #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2       6
  75 #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3       9
  76 
  77 enum e1000_mac_type {
  78         e1000_undefined = 0,
  79         e1000_82575,
  80         e1000_82576,
  81         e1000_82580,
  82         e1000_num_macs  /* List is 1-based, so subtract 1 for true count. */
  83 };
  84 
  85 enum e1000_media_type {
  86         e1000_media_type_unknown = 0,
  87         e1000_media_type_copper = 1,
  88         e1000_media_type_fiber = 2,
  89         e1000_media_type_internal_serdes = 3,
  90         e1000_num_media_types
  91 };
  92 
  93 enum e1000_nvm_type {
  94         e1000_nvm_unknown = 0,
  95         e1000_nvm_none,
  96         e1000_nvm_eeprom_spi,
  97         e1000_nvm_eeprom_microwire,
  98         e1000_nvm_flash_hw,
  99         e1000_nvm_flash_sw
 100 };
 101 
 102 enum e1000_nvm_override {
 103         e1000_nvm_override_none = 0,
 104         e1000_nvm_override_spi_small,
 105         e1000_nvm_override_spi_large,
 106         e1000_nvm_override_microwire_small,
 107         e1000_nvm_override_microwire_large
 108 };
 109 
 110 enum e1000_phy_type {
 111         e1000_phy_unknown = 0,
 112         e1000_phy_none,
 113         e1000_phy_m88,
 114         e1000_phy_igp,
 115         e1000_phy_igp_2,
 116         e1000_phy_gg82563,
 117         e1000_phy_igp_3,
 118         e1000_phy_ife,
 119         e1000_phy_82580,
 120         e1000_phy_vf
 121 };
 122 
 123 enum e1000_bus_type {
 124         e1000_bus_type_unknown = 0,
 125         e1000_bus_type_pci,
 126         e1000_bus_type_pcix,
 127         e1000_bus_type_pci_express,
 128         e1000_bus_type_reserved
 129 };
 130 
 131 enum e1000_bus_speed {
 132         e1000_bus_speed_unknown = 0,
 133         e1000_bus_speed_33,
 134         e1000_bus_speed_66,
 135         e1000_bus_speed_100,
 136         e1000_bus_speed_120,
 137         e1000_bus_speed_133,
 138         e1000_bus_speed_2500,
 139         e1000_bus_speed_5000,
 140         e1000_bus_speed_reserved
 141 };
 142 
 143 enum e1000_bus_width {
 144         e1000_bus_width_unknown = 0,
 145         e1000_bus_width_pcie_x1,
 146         e1000_bus_width_pcie_x2,
 147         e1000_bus_width_pcie_x4 = 4,
 148         e1000_bus_width_pcie_x8 = 8,
 149         e1000_bus_width_32,
 150         e1000_bus_width_64,
 151         e1000_bus_width_reserved
 152 };
 153 
 154 enum e1000_1000t_rx_status {
 155         e1000_1000t_rx_status_not_ok = 0,
 156         e1000_1000t_rx_status_ok,
 157         e1000_1000t_rx_status_undefined = 0xFF
 158 };
 159 
 160 enum e1000_rev_polarity {
 161         e1000_rev_polarity_normal = 0,
 162         e1000_rev_polarity_reversed,
 163         e1000_rev_polarity_undefined = 0xFF
 164 };
 165 
 166 enum e1000_fc_mode {
 167         e1000_fc_none = 0,
 168         e1000_fc_rx_pause,
 169         e1000_fc_tx_pause,
 170         e1000_fc_full,
 171         e1000_fc_default = 0xFF
 172 };
 173 
 174 enum e1000_ms_type {
 175         e1000_ms_hw_default = 0,
 176         e1000_ms_force_master,
 177         e1000_ms_force_slave,
 178         e1000_ms_auto
 179 };
 180 
 181 enum e1000_smart_speed {
 182         e1000_smart_speed_default = 0,
 183         e1000_smart_speed_on,
 184         e1000_smart_speed_off
 185 };
 186 
 187 enum e1000_serdes_link_state {
 188         e1000_serdes_link_down = 0,
 189         e1000_serdes_link_autoneg_progress,
 190         e1000_serdes_link_autoneg_complete,
 191         e1000_serdes_link_forced_up
 192 };
 193 
 194 /* Receive Descriptor */
 195 struct e1000_rx_desc {
 196         __le64 buffer_addr; /* Address of the descriptor's data buffer */
 197         __le16 length;  /* Length of data DMAed into data buffer */
 198         __le16 csum;    /* Packet checksum */
 199         u8  status;     /* Descriptor status */
 200         u8  errors;     /* Descriptor Errors */
 201         __le16 special;
 202 };
 203 
 204 /* Receive Descriptor - Extended */
 205 union e1000_rx_desc_extended {
 206         struct {
 207                 __le64 buffer_addr;
 208                 __le64 reserved;
 209         } read;
 210         struct {
 211                 struct {
 212                         __le32 mrq;     /* Multiple Rx Queues */
 213                         union {
 214                                 __le32 rss;     /* RSS Hash */
 215                                 struct {
 216                                         __le16 ip_id;  /* IP id */
 217                                         __le16 csum;   /* Packet Checksum */
 218                                 } csum_ip;
 219                         } hi_dword;
 220                 } lower;
 221                 struct {
 222                         __le32 status_error;    /* ext status/error */
 223                         __le16 length;
 224                         __le16 vlan;            /* VLAN tag */
 225                 } upper;
 226         } wb;  /* writeback */
 227 };
 228 
 229 #define MAX_PS_BUFFERS 4
 230 /* Receive Descriptor - Packet Split */
 231 union e1000_rx_desc_packet_split {
 232         struct {
 233                 /* one buffer for protocol header(s), three data buffers */
 234                 __le64 buffer_addr[MAX_PS_BUFFERS];
 235         } read;
 236         struct {
 237                 struct {
 238                         __le32 mrq;     /* Multiple Rx Queues */
 239                         union {
 240                                 __le32 rss;     /* RSS Hash */
 241                                 struct {
 242                                         __le16 ip_id;   /* IP id */
 243                                         __le16 csum;    /* Packet Checksum */
 244                                 } csum_ip;
 245                         } hi_dword;
 246                 } lower;
 247                 struct {
 248                         __le32 status_error;    /* ext status/error */
 249                         __le16 length0; /* length of buffer 0 */
 250                         __le16 vlan;    /* VLAN tag */
 251                 } middle;
 252                 struct {
 253                         __le16 header_status;
 254                         __le16 length[3];       /* length of buffers 1-3 */
 255                 } upper;
 256                 __le64 reserved;
 257         } wb; /* writeback */
 258 };
 259 
 260 /* Transmit Descriptor */
 261 struct e1000_tx_desc {
 262         __le64 buffer_addr;     /* Address of the descriptor's data buffer */
 263         union {
 264                 __le32 data;
 265                 struct {
 266                         __le16 length;  /* Data buffer length */
 267                         u8 cso;         /* Checksum offset */
 268                         u8 cmd;         /* Descriptor control */
 269                 } flags;
 270         } lower;
 271         union {
 272                 __le32 data;
 273                 struct {
 274                         u8 status;      /* Descriptor status */
 275                         u8 css;         /* Checksum start */
 276                         __le16 special;
 277                 } fields;
 278         } upper;
 279 };
 280 
 281 /* Offload Context Descriptor */
 282 struct e1000_context_desc {
 283         union {
 284                 __le32 ip_config;
 285                 struct {
 286                         u8 ipcss;       /* IP checksum start */
 287                         u8 ipcso;       /* IP checksum offset */
 288                         __le16 ipcse;   /* IP checksum end */
 289                 } ip_fields;
 290         } lower_setup;
 291         union {
 292                 __le32 tcp_config;
 293                 struct {
 294                         u8 tucss;       /* TCP checksum start */
 295                         u8 tucso;       /* TCP checksum offset */
 296                         __le16 tucse;   /* TCP checksum end */
 297                 } tcp_fields;
 298         } upper_setup;
 299         __le32 cmd_and_length;
 300         union {
 301                 __le32 data;
 302                 struct {
 303                         u8 status;      /* Descriptor status */
 304                         u8 hdr_len;     /* Header length */
 305                         __le16 mss;     /* Maximum segment size */
 306                 } fields;
 307         } tcp_seg_setup;
 308 };
 309 
 310 /* Offload data descriptor */
 311 struct e1000_data_desc {
 312         __le64 buffer_addr;   /* Address of the descriptor's buffer address */
 313         union {
 314                 __le32 data;
 315                 struct {
 316                         __le16 length;    /* Data buffer length */
 317                         u8 typ_len_ext;
 318                         u8 cmd;
 319                 } flags;
 320         } lower;
 321         union {
 322                 __le32 data;
 323                 struct {
 324                         u8 status;      /* Descriptor status */
 325                         u8 popts;       /* Packet Options */
 326                         __le16 special;
 327                 } fields;
 328         } upper;
 329 };
 330 
 331 /* Statistics counters collected by the MAC */
 332 struct e1000_hw_stats {
 333         u64 crcerrs;
 334         u64 algnerrc;
 335         u64 symerrs;
 336         u64 rxerrc;
 337         u64 mpc;
 338         u64 scc;
 339         u64 ecol;
 340         u64 mcc;
 341         u64 latecol;
 342         u64 colc;
 343         u64 dc;
 344         u64 tncrs;
 345         u64 sec;
 346         u64 cexterr;
 347         u64 rlec;
 348         u64 xonrxc;
 349         u64 xontxc;
 350         u64 xoffrxc;
 351         u64 xofftxc;
 352         u64 fcruc;
 353         u64 prc64;
 354         u64 prc127;
 355         u64 prc255;
 356         u64 prc511;
 357         u64 prc1023;
 358         u64 prc1522;
 359         u64 gprc;
 360         u64 bprc;
 361         u64 mprc;
 362         u64 gptc;
 363         u64 gorc;
 364         u64 gotc;
 365         u64 rnbc;
 366         u64 ruc;
 367         u64 rfc;
 368         u64 roc;
 369         u64 rjc;
 370         u64 mgprc;
 371         u64 mgpdc;
 372         u64 mgptc;
 373         u64 tor;
 374         u64 tot;
 375         u64 tpr;
 376         u64 tpt;
 377         u64 ptc64;
 378         u64 ptc127;
 379         u64 ptc255;
 380         u64 ptc511;
 381         u64 ptc1023;
 382         u64 ptc1522;
 383         u64 mptc;
 384         u64 bptc;
 385         u64 tsctc;
 386         u64 tsctfc;
 387         u64 iac;
 388         u64 icrxptc;
 389         u64 icrxatc;
 390         u64 ictxptc;
 391         u64 ictxatc;
 392         u64 ictxqec;
 393         u64 ictxqmtc;
 394         u64 icrxdmtc;
 395         u64 icrxoc;
 396         u64 cbtmpc;
 397         u64 htdpmc;
 398         u64 cbrdpc;
 399         u64 cbrmpc;
 400         u64 rpthc;
 401         u64 hgptc;
 402         u64 htcbdpc;
 403         u64 hgorc;
 404         u64 hgotc;
 405         u64 lenerrs;
 406         u64 scvpc;
 407         u64 hrmpc;
 408         u64 doosync;
 409 };
 410 
 411 struct e1000_phy_stats {
 412         u32 idle_errors;
 413         u32 receive_errors;
 414 };
 415 
 416 struct e1000_host_mng_dhcp_cookie {
 417         u32 signature;
 418         u8  status;
 419         u8  reserved0;
 420         u16 vlan_id;
 421         u32 reserved1;
 422         u16 reserved2;
 423         u8  reserved3;
 424         u8  checksum;
 425 };
 426 
 427 /* Host Interface "Rev 1" */
 428 struct e1000_host_command_header {
 429         u8 command_id;
 430         u8 command_length;
 431         u8 command_options;
 432         u8 checksum;
 433 };
 434 
 435 #define E1000_HI_MAX_DATA_LENGTH        252
 436 struct e1000_host_command_info {
 437         struct e1000_host_command_header command_header;
 438         u8 command_data[E1000_HI_MAX_DATA_LENGTH];
 439 };
 440 
 441 /* Host Interface "Rev 2" */
 442 struct e1000_host_mng_command_header {
 443         u8  command_id;
 444         u8  checksum;
 445         u16 reserved1;
 446         u16 reserved2;
 447         u16 command_length;
 448 };
 449 
 450 #define E1000_HI_MAX_MNG_DATA_LENGTH 0x6F8
 451 struct e1000_host_mng_command_info {
 452         struct e1000_host_mng_command_header command_header;
 453         u8 command_data[E1000_HI_MAX_MNG_DATA_LENGTH];
 454 };
 455 
 456 #include "igb_mac.h"
 457 #include "igb_phy.h"
 458 #include "igb_nvm.h"
 459 #include "igb_manage.h"
 460 
 461 struct e1000_mac_operations {
 462         /* Function pointers for the MAC. */
 463         s32  (*init_params)(struct e1000_hw *);
 464         s32  (*id_led_init)(struct e1000_hw *);
 465         s32  (*blink_led)(struct e1000_hw *);
 466         s32  (*check_for_link)(struct e1000_hw *);
 467         bool (*check_mng_mode)(struct e1000_hw *hw);
 468         s32  (*cleanup_led)(struct e1000_hw *);
 469         void (*clear_hw_cntrs)(struct e1000_hw *);
 470         void (*clear_vfta)(struct e1000_hw *);
 471         s32  (*get_bus_info)(struct e1000_hw *);
 472         void (*set_lan_id)(struct e1000_hw *);
 473         s32  (*get_link_up_info)(struct e1000_hw *, u16 *, u16 *);
 474         s32  (*led_on)(struct e1000_hw *);
 475         s32  (*led_off)(struct e1000_hw *);
 476         void (*update_mc_addr_list)(struct e1000_hw *, u8 *, u32);
 477         s32  (*reset_hw)(struct e1000_hw *);
 478         s32  (*init_hw)(struct e1000_hw *);
 479         void (*shutdown_serdes)(struct e1000_hw *);
 480         s32  (*setup_link)(struct e1000_hw *);
 481         s32  (*setup_physical_interface)(struct e1000_hw *);
 482         s32  (*setup_led)(struct e1000_hw *);
 483         void (*write_vfta)(struct e1000_hw *, u32, u32);
 484         void (*mta_set)(struct e1000_hw *, u32);
 485         void (*config_collision_dist)(struct e1000_hw *);
 486         void (*rar_set)(struct e1000_hw *, u8*, u32);
 487         s32  (*read_mac_addr)(struct e1000_hw *);
 488         s32  (*validate_mdi_setting)(struct e1000_hw *);
 489         s32  (*mng_host_if_write)(struct e1000_hw *, u8*, u16, u16, u8*);
 490         s32  (*mng_write_cmd_header)(struct e1000_hw *hw,
 491             struct e1000_host_mng_command_header *);
 492         s32  (*mng_enable_host_if)(struct e1000_hw *);
 493         s32  (*wait_autoneg)(struct e1000_hw *);
 494 };
 495 
 496 struct e1000_phy_operations {
 497         s32  (*init_params)(struct e1000_hw *);
 498         s32  (*acquire)(struct e1000_hw *);
 499         s32  (*check_polarity)(struct e1000_hw *);
 500         s32  (*check_reset_block)(struct e1000_hw *);
 501         s32  (*commit)(struct e1000_hw *);
 502         s32  (*force_speed_duplex)(struct e1000_hw *);
 503         s32  (*get_cfg_done)(struct e1000_hw *hw);
 504         s32  (*get_cable_length)(struct e1000_hw *);
 505         s32  (*get_info)(struct e1000_hw *);
 506         s32  (*read_reg)(struct e1000_hw *, u32, u16 *);
 507         s32  (*read_reg_locked)(struct e1000_hw *, u32, u16 *);
 508         void (*release)(struct e1000_hw *);
 509         s32  (*reset)(struct e1000_hw *);
 510         s32  (*set_d0_lplu_state)(struct e1000_hw *, bool);
 511         s32  (*set_d3_lplu_state)(struct e1000_hw *, bool);
 512         s32  (*write_reg)(struct e1000_hw *, u32, u16);
 513         s32  (*write_reg_locked)(struct e1000_hw *, u32, u16);
 514         void (*power_up)(struct e1000_hw *);
 515         void (*power_down)(struct e1000_hw *);
 516 };
 517 
 518 struct e1000_nvm_operations {
 519         s32  (*init_params)(struct e1000_hw *);
 520         s32  (*acquire)(struct e1000_hw *);
 521         s32  (*read)(struct e1000_hw *, u16, u16, u16 *);
 522         void (*release)(struct e1000_hw *);
 523         void (*reload)(struct e1000_hw *);
 524         s32  (*update)(struct e1000_hw *);
 525         s32  (*valid_led_default)(struct e1000_hw *, u16 *);
 526         s32  (*validate)(struct e1000_hw *);
 527         s32  (*write)(struct e1000_hw *, u16, u16, u16 *);
 528 };
 529 
 530 struct e1000_mac_info {
 531         struct e1000_mac_operations ops;
 532         u8 addr[6];
 533         u8 perm_addr[6];
 534 
 535         enum e1000_mac_type type;
 536 
 537         u32 collision_delta;
 538         u32 ledctl_default;
 539         u32 ledctl_mode1;
 540         u32 ledctl_mode2;
 541         u32 mc_filter_type;
 542         u32 tx_packet_delta;
 543         u32 txcw;
 544 
 545         u16 current_ifs_val;
 546         u16 ifs_max_val;
 547         u16 ifs_min_val;
 548         u16 ifs_ratio;
 549         u16 ifs_step_size;
 550         u16 mta_reg_count;
 551         u16 uta_reg_count;
 552 
 553         /* Maximum size of the MTA register table in all supported adapters */
 554 #define MAX_MTA_REG 128
 555         u32 mta_shadow[MAX_MTA_REG];
 556         u16 rar_entry_count;
 557 
 558         u8  forced_speed_duplex;
 559 
 560         bool adaptive_ifs;
 561         bool arc_subsystem_valid;
 562         bool asf_firmware_present;
 563         bool autoneg;
 564         bool autoneg_failed;
 565         bool get_link_status;
 566         bool in_ifs_mode;
 567         enum e1000_serdes_link_state serdes_link_state;
 568         bool serdes_has_link;
 569         bool tx_pkt_filtering;
 570 };
 571 
 572 struct e1000_phy_info {
 573         struct e1000_phy_operations ops;
 574         enum e1000_phy_type type;
 575 
 576         enum e1000_1000t_rx_status local_rx;
 577         enum e1000_1000t_rx_status remote_rx;
 578         enum e1000_ms_type ms_type;
 579         enum e1000_ms_type original_ms_type;
 580         enum e1000_rev_polarity cable_polarity;
 581         enum e1000_smart_speed smart_speed;
 582 
 583         u32 addr;
 584         u32 id;
 585         u32 reset_delay_us; /* in usec */
 586         u32 revision;
 587 
 588         enum e1000_media_type media_type;
 589 
 590         u16 autoneg_advertised;
 591         u16 autoneg_mask;
 592         u16 cable_length;
 593         u16 max_cable_length;
 594         u16 min_cable_length;
 595 
 596         u8 mdix;
 597 
 598         bool disable_polarity_correction;
 599         bool is_mdix;
 600         bool polarity_correction;
 601         bool reset_disable;
 602         bool speed_downgraded;
 603         bool autoneg_wait_to_complete;
 604 };
 605 
 606 struct e1000_nvm_info {
 607         struct e1000_nvm_operations ops;
 608         enum e1000_nvm_type type;
 609         enum e1000_nvm_override override;
 610 
 611         u32 flash_bank_size;
 612         u32 flash_base_addr;
 613 
 614         u16 word_size;
 615         u16 delay_usec;
 616         u16 address_bits;
 617         u16 opcode_bits;
 618         u16 page_size;
 619 };
 620 
 621 struct e1000_bus_info {
 622         enum e1000_bus_type type;
 623         enum e1000_bus_speed speed;
 624         enum e1000_bus_width width;
 625 
 626         u16 func;
 627         u16 pci_cmd_word;
 628 };
 629 
 630 struct e1000_fc_info {
 631         u32 high_water;         /* Flow control high-water mark */
 632         u32 low_water;          /* Flow control low-water mark */
 633         u16 pause_time;         /* Flow control pause timer */
 634         bool send_xon;          /* Flow control send XON */
 635         bool strict_ieee;       /* Strict IEEE mode */
 636         enum e1000_fc_mode current_mode; /* FC mode in effect */
 637         enum e1000_fc_mode requested_mode; /* FC mode requested by caller */
 638 };
 639 
 640 struct e1000_dev_spec_82575 {
 641         bool sgmii_active;
 642         bool global_device_reset;
 643 };
 644 
 645 struct e1000_dev_spec_vf {
 646         u32     vf_number;
 647         u32     v2p_mailbox;
 648 };
 649 
 650 struct e1000_hw {
 651         void *back;
 652 
 653         u8 *hw_addr;
 654         u8 *flash_address;
 655         unsigned long io_base;
 656 
 657         struct e1000_mac_info  mac;
 658         struct e1000_fc_info   fc;
 659         struct e1000_phy_info  phy;
 660         struct e1000_nvm_info  nvm;
 661         struct e1000_bus_info  bus;
 662         struct e1000_host_mng_dhcp_cookie mng_cookie;
 663 
 664         union {
 665                 struct e1000_dev_spec_82575     _82575;
 666                 struct e1000_dev_spec_vf        vf;
 667         } dev_spec;
 668 
 669         u16 device_id;
 670         u16 subsystem_vendor_id;
 671         u16 subsystem_device_id;
 672         u16 vendor_id;
 673 
 674         u8  revision_id;
 675 };
 676 
 677 #include "igb_82575.h"
 678 
 679 /* These functions must be implemented by drivers */
 680 s32  e1000_read_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value);
 681 s32  e1000_write_pcie_cap_reg(struct e1000_hw *hw, u32 reg, u16 *value);
 682 
 683 #ifdef __cplusplus
 684 }
 685 #endif
 686 
 687 #endif  /* _IGB_HW_H */