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