11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  Intel PRO/1000 Linux driver
40abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  Copyright(c) 1999 - 2006 Intel Corporation.
50abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
60abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  This program is free software; you can redistribute it and/or modify it
70abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  under the terms and conditions of the GNU General Public License,
80abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  version 2, as published by the Free Software Foundation.
90abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
100abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  This program is distributed in the hope it will be useful, but WITHOUT
110abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
120abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  more details.
140abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  You should have received a copy of the GNU General Public License along with
160abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  this program; if not, write to the Free Software Foundation, Inc.,
170abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
180abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
190abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  The full GNU General Public License is included in this distribution in
200abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok  the file called "COPYING".
210abb6eb12806cf99ea815810d470423083c3b9f4Auke Kok
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  Contact Information:
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  Linux NICS <linux.nics@intel.com>
243d41e30aa3dde76c81ecbbf0e3a25392fcd90469Auke Kok  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*******************************************************************************/
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* glue for the OS independent part of e1000
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * includes register access macros
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _E1000_OSDEP_H_
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _E1000_OSDEP_H_
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/io.h>
385377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
395377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define CONFIG_RAM_BASE         0x60000
405377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define GBE_CONFIG_OFFSET       0x0
415377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
425377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define GBE_CONFIG_RAM_BASE \
435377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	((unsigned int)(CONFIG_RAM_BASE + GBE_CONFIG_OFFSET))
445377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
452db1badfa5d100dd9f7c7a716911250a735cf2e8Stephen Hemminger#define GBE_CONFIG_BASE_VIRT \
462db1badfa5d100dd9f7c7a716911250a735cf2e8Stephen Hemminger	((void __iomem *)phys_to_virt(GBE_CONFIG_RAM_BASE))
475377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
485377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define GBE_CONFIG_FLASH_WRITE(base, offset, count, data) \
495377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	(iowrite16_rep(base + offset, data, count))
505377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie
515377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie#define GBE_CONFIG_FLASH_READ(base, offset, count, data) \
525377a4160bb65ee4dd11b4b1d081d86d56d92bffDirk Brandewie	(ioread16_rep(base + (offset << 1), data, count))
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
54e982f17c87488a98df6bc4f5454a176646b4d00bJoe Perches#define er32(reg)							\
551dc329180fe22ff8651e0ef550ba17ca1cc7bf22Joe Perches	(readl(hw->hw_addr + ((hw->mac_type >= e1000_82543)		\
561dc329180fe22ff8651e0ef550ba17ca1cc7bf22Joe Perches			       ? E1000_##reg : E1000_82542_##reg)))
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
581dc329180fe22ff8651e0ef550ba17ca1cc7bf22Joe Perches#define ew32(reg, value)						\
591dc329180fe22ff8651e0ef550ba17ca1cc7bf22Joe Perches	(writel((value), (hw->hw_addr + ((hw->mac_type >= e1000_82543)	\
601dc329180fe22ff8651e0ef550ba17ca1cc7bf22Joe Perches					 ? E1000_##reg : E1000_82542_##reg))))
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_WRITE_REG_ARRAY(a, reg, offset, value) ( \
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    writel((value), ((a)->hw_addr + \
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds        ((offset) << 2))))
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define E1000_READ_REG_ARRAY(a, reg, offset) ( \
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    readl((a)->hw_addr + \
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds        ((offset) << 2)))
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
722d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_READ_REG_ARRAY_DWORD E1000_READ_REG_ARRAY
732d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_WRITE_REG_ARRAY_DWORD E1000_WRITE_REG_ARRAY
742d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
752d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_WRITE_REG_ARRAY_WORD(a, reg, offset, value) ( \
762d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    writew((value), ((a)->hw_addr + \
772d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
782d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        ((offset) << 1))))
792d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
802d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_READ_REG_ARRAY_WORD(a, reg, offset) ( \
812d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    readw((a)->hw_addr + \
822d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
832d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        ((offset) << 1)))
842d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
852d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_WRITE_REG_ARRAY_BYTE(a, reg, offset, value) ( \
862d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    writeb((value), ((a)->hw_addr + \
872d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
882d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        (offset))))
892d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
902d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala#define E1000_READ_REG_ARRAY_BYTE(a, reg, offset) ( \
912d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala    readb((a)->hw_addr + \
922d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        (((a)->mac_type >= e1000_82543) ? E1000_##reg : E1000_82542_##reg) + \
932d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala        (offset)))
942d7edb923a823660b081bd4c660300ee19adca8dMalli Chilakala
951dc329180fe22ff8651e0ef550ba17ca1cc7bf22Joe Perches#define E1000_WRITE_FLUSH() er32(STATUS)
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
972df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define E1000_WRITE_ICH_FLASH_REG(a, reg, value) ( \
98d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok    writel((value), ((a)->flash_address + reg)))
99d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1002df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define E1000_READ_ICH_FLASH_REG(a, reg) ( \
101d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok    readl((a)->flash_address + reg))
102d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1032df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define E1000_WRITE_ICH_FLASH_REG16(a, reg, value) ( \
104d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok    writew((value), ((a)->flash_address + reg)))
105d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1062df7d59f287236a636fb2d7e05879e65c8c56492Jeff Kirsher#define E1000_READ_ICH_FLASH_REG16(a, reg) ( \
107d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok    readw((a)->flash_address + reg))
108d37ea5d56293b7a883d2a993df5d8b9fb660ed3bAuke Kok
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _E1000_OSDEP_H_ */
110