devices/e1000/e1000_osdep-2.6.31-orig.h
author Knud Baastrup <kba@deif.com>
Tue, 14 Apr 2015 13:12:24 -0400
changeset 2629 a2701af27fde
parent 1996 852668fdae6a
permissions -rw-r--r--
Internal SDO requests now synchronized with external requests.
Internal SDO requests are managed by master FSM and can conflict with
external requests managed by slave FSM. The internal SDO requests
includes SDO requests created by an application and external request are
typical created by EtherCAT Tool for SDO upload/download or a directory
fetch initiated with ethercat sdos command. The conflict will cause a
FPWR from an external request to be overwritten by a FPWR from an
internal SDO request (or oppersite) in the same "train" of datagrams.
1996
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     1
/*******************************************************************************
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     2
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     3
  Intel PRO/1000 Linux driver
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     4
  Copyright(c) 1999 - 2006 Intel Corporation.
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     5
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     6
  This program is free software; you can redistribute it and/or modify it
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     7
  under the terms and conditions of the GNU General Public License,
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     8
  version 2, as published by the Free Software Foundation.
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
     9
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    10
  This program is distributed in the hope it will be useful, but WITHOUT
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    11
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    12
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    13
  more details.
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    14
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    15
  You should have received a copy of the GNU General Public License along with
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    16
  this program; if not, write to the Free Software Foundation, Inc.,
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    17
  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    18
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    19
  The full GNU General Public License is included in this distribution in
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    20
  the file called "COPYING".
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    21
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    22
  Contact Information:
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    23
  Linux NICS <linux.nics@intel.com>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    24
  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    25
  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    26
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    27
*******************************************************************************/
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    28
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    29
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    30
/* glue for the OS independent part of e1000
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    31
 * includes register access macros
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    32
 */
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    33
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    34
#ifndef _E1000_OSDEP_H_
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    35
#define _E1000_OSDEP_H_
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    36
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    37
#include <linux/types.h>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    38
#include <linux/pci.h>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    39
#include <linux/delay.h>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    40
#include <asm/io.h>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    41
#include <linux/interrupt.h>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    42
#include <linux/sched.h>
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    43
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    44
#ifdef DBG
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    45
#define DEBUGOUT(S)		printk(KERN_DEBUG S "\n")
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    46
#define DEBUGOUT1(S, A...)	printk(KERN_DEBUG S "\n", A)
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    47
#else
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    48
#define DEBUGOUT(S)
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    49
#define DEBUGOUT1(S, A...)
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    50
#endif
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    51
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    52
#define DEBUGFUNC(F) DEBUGOUT(F "\n")
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    53
#define DEBUGOUT2 DEBUGOUT1
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    54
#define DEBUGOUT3 DEBUGOUT2
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    55
#define DEBUGOUT7 DEBUGOUT3
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    56
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    57
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    58
#define er32(reg)							\
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    59
	(readl(hw->hw_addr + ((hw->mac_type >= e1000_82543)		\
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    60
			       ? E1000_##reg : E1000_82542_##reg)))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    61
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    62
#define ew32(reg, value)						\
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    63
	(writel((value), (hw->hw_addr + ((hw->mac_type >= e1000_82543)	\
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    64
					 ? E1000_##reg : E1000_82542_##reg))))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    65
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    66
#define E1000_WRITE_REG_ARRAY(a, reg, offset, value) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    67
    writel((value), ((a)->hw_addr + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    68
        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    69
        ((offset) << 2))))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    70
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    71
#define E1000_READ_REG_ARRAY(a, reg, offset) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    72
    readl((a)->hw_addr + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    73
        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    74
        ((offset) << 2)))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    75
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    76
#define E1000_READ_REG_ARRAY_DWORD E1000_READ_REG_ARRAY
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    77
#define E1000_WRITE_REG_ARRAY_DWORD E1000_WRITE_REG_ARRAY
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    78
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    79
#define E1000_WRITE_REG_ARRAY_WORD(a, reg, offset, value) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    80
    writew((value), ((a)->hw_addr + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    81
        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    82
        ((offset) << 1))))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    83
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    84
#define E1000_READ_REG_ARRAY_WORD(a, reg, offset) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    85
    readw((a)->hw_addr + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    86
        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    87
        ((offset) << 1)))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    88
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    89
#define E1000_WRITE_REG_ARRAY_BYTE(a, reg, offset, value) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    90
    writeb((value), ((a)->hw_addr + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    91
        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    92
        (offset))))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    93
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    94
#define E1000_READ_REG_ARRAY_BYTE(a, reg, offset) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    95
    readb((a)->hw_addr + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    96
        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    97
        (offset)))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    98
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
    99
#define E1000_WRITE_FLUSH() er32(STATUS)
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   100
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   101
#define E1000_WRITE_ICH_FLASH_REG(a, reg, value) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   102
    writel((value), ((a)->flash_address + reg)))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   103
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   104
#define E1000_READ_ICH_FLASH_REG(a, reg) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   105
    readl((a)->flash_address + reg))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   106
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   107
#define E1000_WRITE_ICH_FLASH_REG16(a, reg, value) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   108
    writew((value), ((a)->flash_address + reg)))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   109
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   110
#define E1000_READ_ICH_FLASH_REG16(a, reg) ( \
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   111
    readw((a)->flash_address + reg))
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   112
852668fdae6a Added e1000 port for 2.6.31
Christoph Mathys <ch1010832@ch10pc602>
parents:
diff changeset
   113
#endif /* _E1000_OSDEP_H_ */