dd0816f21d
Demanded by: DES Encouraged by: scottl
165 lines
6.8 KiB
C
165 lines
6.8 KiB
C
/***************************************************************************\
|
|
|* *|
|
|
|* Copyright 2001-2004 NVIDIA Corporation. All Rights Reserved. *|
|
|
|* *|
|
|
|* THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND CONFIDENTIAL *|
|
|
|* TO NVIDIA, CORPORATION. USE, REPRODUCTION OR DISCLOSURE TO ANY *|
|
|
|* THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP. *|
|
|
|* *|
|
|
|* THE INFORMATION CONTAINED HEREIN IS PROVIDED "AS IS" WITHOUT *|
|
|
|* EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED *|
|
|
|* WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A *|
|
|
|* PARTICULAR PURPOSE. *|
|
|
|* *|
|
|
\***************************************************************************/
|
|
|
|
/*
|
|
FILE: phy.h
|
|
DATE: 2/7/00
|
|
|
|
This file contains the functional interface to the PHY.
|
|
*/
|
|
#ifndef _PHY_H_
|
|
#define _PHY_H_
|
|
|
|
//#include "basetype.h"
|
|
//#include "nvevent.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define DEFAULT_PHY_ADDRESS 1
|
|
|
|
|
|
#define HDP_VERSION_STRING "HDR P: $Revision: #23 $"
|
|
|
|
//
|
|
// Defaults for PHY timeout values.
|
|
//
|
|
#define PHY_POWER_ISOLATION_MS_TIMEOUT_DEFAULT 50
|
|
#define PHY_RESET_MS_TIMEOUT_DEFAULT 50
|
|
#define PHY_AUTONEG_MS_TIMEOUT_DEFAULT 3000
|
|
#define PHY_LINK_UP_MS_TIMEOUT_DEFAULT 2400
|
|
#define PHY_RDWR_US_TIMEOUT_DEFAULT 2048
|
|
#define PHY_POWER_DOWN_US_TIMEOUT_DEFAULT 500
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// The phy module knows the values that need to go into the phy registers
|
|
// but typically the method of writing those registers is controlled by
|
|
// another module (usually the adapter because it is really the hardware
|
|
// interface.) Hence, the phy needs routines to call to read and write the
|
|
// phy registers. This structure with appropriate routines will be provided
|
|
// in the PHY_Open call.
|
|
|
|
typedef NV_API_CALL NV_SINT32 (* PFN_READ_PHY) (PNV_VOID pvData, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 *pulValue);
|
|
typedef NV_API_CALL NV_SINT32 (* PFN_WRITE_PHY) (PNV_VOID pvData, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 ulValue);
|
|
|
|
typedef struct PHY_SUPPORT_API
|
|
{
|
|
PNV_VOID pADCX;
|
|
PFN_READ_PHY pfnRead;
|
|
PFN_WRITE_PHY pfnWrite;
|
|
// PFN_EVENT_OCCURED pfnEventOccurred;
|
|
|
|
//
|
|
// These fields are passed down via the FD. FD get's them
|
|
// from the registry. They allow one to fine tune the timeout
|
|
// values in the PHY.
|
|
//
|
|
NV_UINT32 PhyPowerIsolationTimeoutInms;
|
|
NV_UINT32 PhyResetTimeoutInms;
|
|
NV_UINT32 PhyAutonegotiateTimeoutInms;
|
|
NV_UINT32 PhyLinkupTimeoutInms;
|
|
NV_UINT32 PhyPowerdownOnCloseInus;
|
|
|
|
} PHY_SUPPORT_API, *PPHY_SUPPORT_API;
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// The functional typedefs for the PHY Api
|
|
typedef NV_SINT32 (* PFN_PHY_INIT) (PNV_VOID pvContext, NV_UINT32 *pulLinkState, NV_UINT32 PhyMode);
|
|
typedef NV_SINT32 (* PFN_PHY_DEINIT) (PNV_VOID pvContext);
|
|
typedef NV_SINT32 (* PFN_PHY_CLOSE) (PNV_VOID pvContext);
|
|
typedef NV_SINT32 (* PFN_GET_LINK_SPEED) (PNV_VOID pvContext);
|
|
typedef NV_SINT32 (* PFN_GET_LINK_MODE) (PNV_VOID pvContext);
|
|
typedef NV_SINT32 (* PFN_GET_LINK_STATE) (PNV_VOID pvContext, NV_UINT32 *pulLinkState);
|
|
typedef NV_SINT32 (* PFN_IS_LINK_INITIALIZING) (PNV_VOID pvContext);
|
|
typedef NV_SINT32 (* PFN_RESET_PHY_INIT_STATE) (PNV_VOID pvContext);
|
|
typedef NV_SINT32 (* PFN_FORCE_SPEED_DUPLEX) (PNV_VOID pvContext, NV_UINT16 usSpeed, NV_UINT8 ucForceDpx, NV_UINT8 ucForceMode);
|
|
typedef NV_SINT32 (* PFN_PHY_POWERDOWN) (PNV_VOID pvContext);
|
|
typedef NV_SINT32 (* PFN_SET_LOW_SPEED_FOR_PM) (PNV_VOID pvContext);
|
|
|
|
|
|
typedef struct _PHY_API
|
|
{
|
|
// This is the context to pass back in as the first arg on all
|
|
// the calls in the API below.
|
|
PNV_VOID pPHYCX;
|
|
|
|
PFN_PHY_INIT pfnInit;
|
|
PFN_PHY_INIT pfnInitFast;
|
|
PFN_PHY_DEINIT pfnDeinit;
|
|
PFN_PHY_CLOSE pfnClose;
|
|
PFN_GET_LINK_SPEED pfnGetLinkSpeed;
|
|
PFN_GET_LINK_MODE pfnGetLinkMode;
|
|
PFN_GET_LINK_STATE pfnGetLinkState;
|
|
PFN_IS_LINK_INITIALIZING pfnIsLinkInitializing;
|
|
PFN_RESET_PHY_INIT_STATE pfnResetPhyInitState;
|
|
PFN_FORCE_SPEED_DUPLEX pfnForceSpeedDuplex;
|
|
PFN_PHY_POWERDOWN pfnPowerdown;
|
|
PFN_SET_LOW_SPEED_FOR_PM pfnSetLowSpeedForPM;
|
|
} PHY_API, *PPHY_API;
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// This is the one function in the PHY interface that is publicly
|
|
// available. The rest of the interface is returned in the pPhyApi;
|
|
// The first argument needs to be cast to a POS_API structure ptr.
|
|
// On input the second argument is a ptr to a PPHY_SUPPORT_API.
|
|
// On output, the second argument should be treated as a ptr to a
|
|
// PPHY_API and set appropriately.
|
|
extern NV_SINT32 PHY_Open (PNV_VOID pvOSApi, PNV_VOID pPhyApi, NV_UINT32 *pulPhyAddr, NV_UINT32 *pulPhyConnected);
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Here are the error codes the phy functions can return.
|
|
#define PHYERR_NONE 0x0000
|
|
#define PHYERR_COULD_NOT_ALLOC_CONTEXT 0x0001
|
|
#define PHYERR_RESET_NEVER_FINISHED 0x0002
|
|
#define PHYERR_NO_AVAILABLE_LINK_SPEED 0x0004
|
|
#define PHYERR_INVALID_SETTINGS 0x0005
|
|
#define PHYERR_READ_FAILED 0x0006
|
|
#define PHYERR_WRITE_FAILED 0x0007
|
|
#define PHYERR_NO_PHY 0x0008
|
|
#define PHYERR_NO_RESOURCE 0x0009
|
|
#define PHYERR_POWER_ISOLATION_TIMEOUT 0x000A
|
|
#define PHYERR_POWER_DOWN_TIMEOUT 0x000B
|
|
#define PHYERR_AUTONEG_TIMEOUT 0x000C
|
|
#define PHYERR_PHY_LINK_SPEED_UNCHANGED 0x000D
|
|
|
|
#define PHY_INVALID_PHY_ADDR 0xFFFF;
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
// This value can be used in the ulPhyLinkSpeed field.
|
|
#define PHY_LINK_SPEED_UNKNOWN 0x0FFFFFFFF
|
|
|
|
//
|
|
// Values used to configure PHY mode.
|
|
//
|
|
#define PHY_MODE_MII 1
|
|
#define PHY_MODE_RGMII 2
|
|
|
|
typedef NV_VOID (* PTIMER_FUNC) (PNV_VOID pvContext);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif //_PHY_H_
|