phyter.inl
来自「eCos操作系统源码」· INL 代码 · 共 187 行
INL
187 行
#ifndef CYGONCE_DEVS_ETH_PHYTER_PHYTER_INL#define CYGONCE_DEVS_ETH_PHYTER_PHYTER_INL//==========================================================================//// phyther.inl//// Generic Phyter definitions and helpers////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s): jskov// Contributors: jskov// Date: 2002-02-19// Purpose: phy/MII definitions // Description: ////####DESCRIPTIONEND####////==========================================================================// Caller must define _MII_WRITE and _MII_READ macros#ifndef _MII_WRITE# error "_MII_WRITE(_priv_, _id_, _reg_, _val_) and _MII_READ(_priv_, _id_, _reg_) must be defined"#endif// Caller can define _MII_HAS_EXTENDED to add support for extended registers//-----------------------------------------------------------------------------// Helpers// Renegotiate link// This function will delay for up to 2 seconds waiting for a renegotiation// of the link.#define _MII_RENEGOTIATE(_priv_, _id_) \ CYG_MACRO_START \ _MII_WRITE(_priv_, _id_, CYGARC_REG_MII_BMCR, CYGARC_REG_MII_BMCR_RENEGOTIATE); \ _MII_RENEGOTIATION_WAIT(_priv_, _id_); \ CYG_MACRO_END// Wait for renegotiation to complete// This function will delay for up to 2 seconds waiting for a renegotiation// of the link.#define _MII_RENEGOTIATION_WAIT(_priv_, _id_) \ CYG_MACRO_START \ int _i; \ cyg_uint16 _r; \ for (_i = 0; _i < 2000; _i++) { \ HAL_DELAY_US(1000); \ _r = _MII_READ(_priv_, _id_, CYGARC_REG_MII_BMSR); \ if (_r & CYGARC_REG_MII_BMSR_AN_COMPLETE) break; \ } \ CYG_MACRO_END// Link state query#define _MII_LINK_STATE(_priv_, _id_) \ ({ int _i; \ if (_MII_READ(_priv_, _id_, CYGARC_REG_MII_BMSR) & CYGARC_REG_MII_BMSR_LINK) \ (_i) = 1; \ else \ (_i) = 0; \ _i; })// Clear 100MB capability advertisement bits// Caller has to start a new renegoatiation#define _MII_SPEED_FORCE_10MB(_priv_, _id_) \ CYG_MACRO_START \ cyg_uint16 _d; \ _d = _MII_READ(_priv_, _id_, CYGARC_REG_MII_ANAR); \ _d &= ~(CYGARC_REG_MII_ANAR_T4|CYGARC_REG_MII_ANAR_TX_FD|CYGARC_REG_MII_ANAR_TX); \ _MII_WRITE(_priv_, _id_, CYGARC_REG_MII_ANAR, _d); \ CYG_MACRO_END#ifdef _MII_HAS_EXTENDED// Speed state query// 0 = 10Mb, 1 = 100Mb#define _MII_SPEED_STATE(_priv_, _id_) \ ({ int _i; \ if (_MII_READ(_priv_, _id_, CYGARC_REG_MII_PHYSTS) & CYGARC_REG_MII_PHYSTS_SPEED) \ (_i) = 0; \ else \ (_i) = 1; \ _i; })// Duplex state query// 0 = simplex, 1 = duplex#define _MII_DUPLEX_STATE(_priv_, _id_) \ ({ int _i; \ if (_MII_READ(_priv_, _id_, CYGARC_REG_MII_PHYSTS) & CYGARC_REG_MII_PHYSTS_DUPLEX) \ (_i) = 1; \ else \ (_i) = 0; \ _i; })#endif // _MII_HAS_EXTENDED// Dump registers// Useful for debugging#define _MII_DUMP_REGS(_priv_, _id_) \ CYG_MACRO_START \ int _i; \ diag_printf("PHY registers:\n"); \ for(_i = 0; _i <= CYGARC_REG_MII_LAST; _i++) \ diag_printf(" %02d %04x\n", _i, _MII_READ(_priv_, _id_, _i)); \ CYG_MACRO_END//-----------------------------------------------------------------------------// Phyter Registers// Generic#define CYGARC_REG_MII_BMCR 0x00#define CYGARC_REG_MII_BMSR 0x01#define CYGARC_REG_MII_PHYIDR1 0x02#define CYGARC_REG_MII_PHYIDR2 0x03#define CYGARC_REG_MII_ANAR 0x04#define CYGARC_REG_MII_ANLPAR 0x05#define CYGARC_REG_MII_ANER 0x06#define CYGARC_REG_MII_ANNPTR 0x07#define CYGARC_REG_MII_BMCR_RESET 0x8000#define CYGARC_REG_MII_BMCR_LOOPBACK 0x4000#define CYGARC_REG_MII_BMCR_RENEGOTIATE 0x3300#define CYGARC_REG_MII_BMSR_AN_COMPLETE 0x0020#define CYGARC_REG_MII_BMSR_LINK 0x0004#define CYGARC_REG_MII_ANAR_T4 0x0200#define CYGARC_REG_MII_ANAR_TX_FD 0x0100#define CYGARC_REG_MII_ANAR_TX 0x0080#define CYGARC_REG_MII_ANAR_10_FD 0x0040#define CYGARC_REG_MII_ANAR_10 0x0020// Extended registers#ifndef _MII_HAS_EXTENDED# define CYGARC_REG_MII_LAST 0x0f#else# define CYGARC_REG_MII_PHYSTS 0x10# define CYGARC_REG_MII_FCSCR 0x14# define CYGARC_REG_MII_RECR 0x15# define CYGARC_REG_MII_PCSR 0x16# define CYGARC_REG_MII_PHYCTRL 0x19# define CYGARC_REG_MII_10BTSCR 0x1a# define CYGARC_REG_MII_CDCTRL 0x1b# define CYGARC_REG_MII_LAST 0x1f# define CYGARC_REG_MII_PHYSTS_SPEED 0x00000002# define CYGARC_REG_MII_PHYSTS_DUPLEX 0x00000004#endif#endif // CYGONCE_DEVS_ETH_PHYTER_PHYTER_INL
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?