igb_api.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002 
00003   Intel(R) Gigabit Ethernet Linux driver
00004   Copyright(c) 2007-2009 Intel Corporation.
00005 
00006   This program is free software; you can redistribute it and/or modify it
00007   under the terms and conditions of the GNU General Public License,
00008   version 2, as published by the Free Software Foundation.
00009 
00010   This program is distributed in the hope it will be useful, but WITHOUT
00011   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
00013   more details.
00014 
00015   You should have received a copy of the GNU General Public License along with
00016   this program; if not, write to the Free Software Foundation, Inc.,
00017   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
00018 
00019   The full GNU General Public License is included in this distribution in
00020   the file called "COPYING".
00021 
00022   Contact Information:
00023   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
00024   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
00025 
00026 *******************************************************************************/
00027 
00028 FILE_LICENCE ( GPL2_ONLY );
00029 
00030 #ifndef _IGB_API_H_
00031 #define _IGB_API_H_
00032 
00033 #include <stdint.h>
00034 #include <stdlib.h>
00035 #include <stdio.h>
00036 #include <string.h>
00037 #include <unistd.h>
00038 #include <gpxe/io.h>
00039 #include <errno.h>
00040 #include <byteswap.h>
00041 #include <gpxe/pci.h>
00042 #include <gpxe/malloc.h>
00043 #include <gpxe/if_ether.h>
00044 #include <gpxe/ethernet.h>
00045 #include <gpxe/iobuf.h>
00046 #include <gpxe/netdevice.h>
00047 
00048 #include "igb_hw.h"
00049 
00050 extern void    igb_init_function_pointers_82575(struct e1000_hw *hw) __attribute__((weak));
00051 extern void    igb_rx_fifo_flush_82575(struct e1000_hw *hw) __attribute__((weak));
00052 extern void    igb_init_function_pointers_vf(struct e1000_hw *hw) __attribute__((weak));
00053 extern void    igb_shutdown_fiber_serdes_link(struct e1000_hw *hw) __attribute__((weak));
00054 
00055 s32  igb_set_mac_type(struct e1000_hw *hw);
00056 s32  igb_setup_init_funcs(struct e1000_hw *hw, bool init_device);
00057 s32  igb_init_mac_params(struct e1000_hw *hw);
00058 s32  igb_init_nvm_params(struct e1000_hw *hw);
00059 s32  igb_init_phy_params(struct e1000_hw *hw);
00060 s32  igb_init_mbx_params(struct e1000_hw *hw);
00061 s32  igb_get_bus_info(struct e1000_hw *hw);
00062 void igb_clear_vfta(struct e1000_hw *hw);
00063 void igb_write_vfta(struct e1000_hw *hw, u32 offset, u32 value);
00064 s32  igb_force_mac_fc(struct e1000_hw *hw);
00065 s32  igb_check_for_link(struct e1000_hw *hw);
00066 s32  igb_reset_hw(struct e1000_hw *hw);
00067 s32  igb_init_hw(struct e1000_hw *hw);
00068 s32  igb_setup_link(struct e1000_hw *hw);
00069 s32  igb_get_speed_and_duplex(struct e1000_hw *hw, u16 *speed,
00070                                 u16 *duplex);
00071 s32  igb_disable_pcie_master(struct e1000_hw *hw);
00072 void igb_config_collision_dist(struct e1000_hw *hw);
00073 void igb_rar_set(struct e1000_hw *hw, u8 *addr, u32 index);
00074 void igb_mta_set(struct e1000_hw *hw, u32 hash_value);
00075 u32  igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr);
00076 void igb_update_mc_addr_list(struct e1000_hw *hw,
00077                                u8 *mc_addr_list, u32 mc_addr_count);
00078 s32  igb_setup_led(struct e1000_hw *hw);
00079 s32  igb_cleanup_led(struct e1000_hw *hw);
00080 s32  igb_check_reset_block(struct e1000_hw *hw);
00081 s32  igb_blink_led(struct e1000_hw *hw);
00082 s32  igb_led_on(struct e1000_hw *hw);
00083 s32  igb_led_off(struct e1000_hw *hw);
00084 s32 igb_id_led_init(struct e1000_hw *hw);
00085 void igb_reset_adaptive(struct e1000_hw *hw);
00086 void igb_update_adaptive(struct e1000_hw *hw);
00087 #if 0
00088 s32  igb_get_cable_length(struct e1000_hw *hw);
00089 #endif
00090 s32  igb_validate_mdi_setting(struct e1000_hw *hw);
00091 s32  igb_read_phy_reg(struct e1000_hw *hw, u32 offset, u16 *data);
00092 s32  igb_write_phy_reg(struct e1000_hw *hw, u32 offset, u16 data);
00093 s32  igb_write_8bit_ctrl_reg(struct e1000_hw *hw, u32 reg,
00094                                u32 offset, u8 data);
00095 s32  igb_get_phy_info(struct e1000_hw *hw);
00096 void igb_release_phy(struct e1000_hw *hw);
00097 s32  igb_acquire_phy(struct e1000_hw *hw);
00098 s32  igb_phy_hw_reset(struct e1000_hw *hw);
00099 s32  igb_phy_commit(struct e1000_hw *hw);
00100 void igb_power_up_phy(struct e1000_hw *hw);
00101 void igb_power_down_phy(struct e1000_hw *hw);
00102 s32  igb_read_mac_addr(struct e1000_hw *hw);
00103 s32  igb_read_pba_num(struct e1000_hw *hw, u32 *part_num);
00104 void igb_reload_nvm(struct e1000_hw *hw);
00105 s32  igb_update_nvm_checksum(struct e1000_hw *hw);
00106 s32  igb_validate_nvm_checksum(struct e1000_hw *hw);
00107 s32  igb_read_nvm(struct e1000_hw *hw, u16 offset, u16 words, u16 *data);
00108 s32  igb_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data);
00109 s32  igb_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data);
00110 s32  igb_write_nvm(struct e1000_hw *hw, u16 offset, u16 words,
00111                      u16 *data);
00112 s32  igb_wait_autoneg(struct e1000_hw *hw);
00113 s32  igb_set_d3_lplu_state(struct e1000_hw *hw, bool active);
00114 s32  igb_set_d0_lplu_state(struct e1000_hw *hw, bool active);
00115 bool igb_check_mng_mode(struct e1000_hw *hw);
00116 bool igb_enable_tx_pkt_filtering(struct e1000_hw *hw);
00117 s32  igb_mng_enable_host_if(struct e1000_hw *hw);
00118 s32  igb_mng_host_if_write(struct e1000_hw *hw,
00119                              u8 *buffer, u16 length, u16 offset, u8 *sum);
00120 s32  igb_mng_write_cmd_header(struct e1000_hw *hw,
00121                                 struct e1000_host_mng_command_header *hdr);
00122 s32  igb_mng_write_dhcp_info(struct e1000_hw * hw,
00123                                     u8 *buffer, u16 length);
00124 
00125 /*
00126  * TBI_ACCEPT macro definition:
00127  *
00128  * This macro requires:
00129  *      adapter = a pointer to struct e1000_hw
00130  *      status = the 8 bit status field of the Rx descriptor with EOP set
00131  *      error = the 8 bit error field of the Rx descriptor with EOP set
00132  *      length = the sum of all the length fields of the Rx descriptors that
00133  *               make up the current frame
00134  *      last_byte = the last byte of the frame DMAed by the hardware
00135  *      max_frame_length = the maximum frame length we want to accept.
00136  *      min_frame_length = the minimum frame length we want to accept.
00137  *
00138  * This macro is a conditional that should be used in the interrupt
00139  * handler's Rx processing routine when RxErrors have been detected.
00140  *
00141  * Typical use:
00142  *  ...
00143  *  if (TBI_ACCEPT) {
00144  *      accept_frame = true;
00145  *      e1000_tbi_adjust_stats(adapter, MacAddress);
00146  *      frame_length--;
00147  *  } else {
00148  *      accept_frame = false;
00149  *  }
00150  *  ...
00151  */
00152 
00153 /* The carrier extension symbol, as received by the NIC. */
00154 #define CARRIER_EXTENSION   0x0F
00155 
00156 #define TBI_ACCEPT(a, status, errors, length, last_byte, min_frame_size, max_frame_size) \
00157     (e1000_tbi_sbp_enabled_82543(a) && \
00158      (((errors) & E1000_RXD_ERR_FRAME_ERR_MASK) == E1000_RXD_ERR_CE) && \
00159      ((last_byte) == CARRIER_EXTENSION) && \
00160      (((status) & E1000_RXD_STAT_VP) ? \
00161           (((length) > (min_frame_size - VLAN_TAG_SIZE)) && \
00162            ((length) <= (max_frame_size + 1))) : \
00163           (((length) > min_frame_size) && \
00164            ((length) <= (max_frame_size + VLAN_TAG_SIZE + 1)))))
00165 
00166 #endif /* _IGB_API_H_ */

Generated on Tue Apr 6 20:01:00 2010 for gPXE by  doxygen 1.5.7.1