📄 peephole.c
字号:
/*++
Copyright (c) 2000 Microsoft Corporation. All rights reserved.
File: peephole.c
Developed for Toshiba by Elisa Research Inc., CA
http://www.elisaresearch.com
(510) 770-4920
Abstract:
This file contains routines to read/write off-chip SRAM and devices.
Author:
A. Wang
Environment:
Kernel mode
Revision History:
01/16/97 awang Initial of Toshiba ATM 155 Device Driver.
--*/
#include "precomp.h"
#pragma hdrstop
#define MODULE_NUMBER MODULE_PEEPHOLE
//
// The contents of this table is related to line speed.
// (no document provided about the setting of this table.)
//
USHORT AcrLookUpTbl[0x200] = {
/*** PCR = 64b1 ***/
/*** Line rate ( 1 + 0xb1/0x200)*2^18 = 353208 cell/sec ***/
0x2b2, 0x2b1, 0x2b0, 0x2ae, 0x2ad, 0x2ac, 0x2aa, 0x2a9, // 0x00
0x2a8, 0x2a6, 0x2a5, 0x2a4, 0x2a3, 0x2a1, 0x2a0, 0x29f, // 0x08
0x29d, 0x29c, 0x29b, 0x29a, 0x298, 0x297, 0x296, 0x295, // 0x10
0x293, 0x292, 0x291, 0x290, 0x28f, 0x28d, 0x28c, 0x28b, // 0x18
0x28a, 0x289, 0x287, 0x286, 0x285, 0x284, 0x283, 0x282, // 0x20
0x280, 0x27f, 0x27e, 0x27d, 0x27c, 0x27b, 0x279, 0x278, // 0x28
0x277, 0x276, 0x275, 0x274, 0x273, 0x272, 0x271, 0x26f, // 0x30
0x26e, 0x26d, 0x26c, 0x26b, 0x26a, 0x269, 0x268, 0x267, // 0x38
0x266, 0x265, 0x264, 0x263, 0x261, 0x260, 0x25f, 0x25e, // 0x40
0x25d, 0x25c, 0x25b, 0x25a, 0x259, 0x258, 0x257, 0x256, // 0x48
0x255, 0x254, 0x253, 0x252, 0x251, 0x250, 0x24f, 0x24e, // 0x50
0x24d, 0x24c, 0x24b, 0x24a, 0x249, 0x248, 0x247, 0x246, // 0x58
0x245, 0x244, 0x244, 0x243, 0x242, 0x241, 0x240, 0x23f, // 0x60
0x23e, 0x23d, 0x23c, 0x23b, 0x23a, 0x239, 0x238, 0x237, // 0x68
0x237, 0x236, 0x235, 0x234, 0x233, 0x232, 0x231, 0x230, // 0x70
0x22f, 0x22e, 0x22e, 0x22d, 0x22c, 0x22b, 0x22a, 0x229, // 0x78
0x228, 0x228, 0x227, 0x226, 0x225, 0x224, 0x223, 0x222, // 0x80
0x222, 0x221, 0x220, 0x21f, 0x21e, 0x21d, 0x21d, 0x21c, // 0x88
0x21b, 0x21a, 0x219, 0x218, 0x218, 0x217, 0x216, 0x215, // 0x90
0x214, 0x214, 0x213, 0x212, 0x211, 0x210, 0x210, 0x20f, // 0x98
0x20e, 0x20d, 0x20d, 0x20c, 0x20b, 0x20a, 0x209, 0x209, // 0xA0
0x208, 0x207, 0x206, 0x206, 0x205, 0x204, 0x203, 0x203, // 0xA8
0x202, 0x201, 0x200, 0x200, 0x1ff, 0x1fe, 0x1fd, 0x1fd, // 0xB0
0x1fc, 0x1fb, 0x1fb, 0x1fa, 0x1f9, 0x1f8, 0x1f8, 0x1f7, // 0xB8
0x1f6, 0x1f6, 0x1f5, 0x1f4, 0x1f3, 0x1f3, 0x1f2, 0x1f1, // 0xC0
0x1f1, 0x1f0, 0x1ef, 0x1ee, 0x1ee, 0x1ed, 0x1ec, 0x1ec, // 0xC8
0x1eb, 0x1ea, 0x1ea, 0x1e9, 0x1e8, 0x1e8, 0x1e7, 0x1e6, // 0xD0
0x1e6, 0x1e5, 0x1e4, 0x1e4, 0x1e3, 0x1e2, 0x1e2, 0x1e1, // 0xD8
0x1e0, 0x1e0, 0x1df, 0x1de, 0x1de, 0x1dd, 0x1dd, 0x1dc, // 0xE0
0x1db, 0x1db, 0x1da, 0x1d9, 0x1d9, 0x1d8, 0x1d7, 0x1d7, // 0xE8
0x1d6, 0x1d6, 0x1d5, 0x1d4, 0x1d4, 0x1d3, 0x1d2, 0x1d2, // 0xF0
0x1d1, 0x1d1, 0x1d0, 0x1cf, 0x1cf, 0x1ce, 0x1ce, 0x1cd, // 0xF8
0x1cc, 0x1cc, 0x1cb, 0x1cb, 0x1ca, 0x1c9, 0x1c9, 0x1c8, // 0x100
0x1c8, 0x1c7, 0x1c6, 0x1c6, 0x1c5, 0x1c5, 0x1c4, 0x1c4, // 0x108
0x1c3, 0x1c2, 0x1c2, 0x1c1, 0x1c1, 0x1c0, 0x1c0, 0x1bf, // 0x110
0x1be, 0x1be, 0x1bd, 0x1bd, 0x1bc, 0x1bc, 0x1bb, 0x1bb, // 0x118
0x1ba, 0x1b9, 0x1b9, 0x1b8, 0x1b8, 0x1b7, 0x1b7, 0x1b6, // 0x120
0x1b6, 0x1b5, 0x1b5, 0x1b4, 0x1b3, 0x1b3, 0x1b2, 0x1b2, // 0x128
0x1b1, 0x1b1, 0x1b0, 0x1b0, 0x1af, 0x1af, 0x1ae, 0x1ae, // 0x130
0x1ad, 0x1ad, 0x1ac, 0x1ac, 0x1ab, 0x1ab, 0x1aa, 0x1aa, // 0x138
0x1a9, 0x1a9, 0x1a8, 0x1a8, 0x1a7, 0x1a6, 0x1a6, 0x1a5, // 0x140
0x1a5, 0x1a4, 0x1a4, 0x1a3, 0x1a3, 0x1a2, 0x1a2, 0x1a2, // 0x148
0x1a1, 0x1a1, 0x1a0, 0x1a0, 0x19f, 0x19f, 0x19e, 0x19e, // 0x150
0x19d, 0x19d, 0x19c, 0x19c, 0x19b, 0x19b, 0x19a, 0x19a, // 0x158
0x199, 0x199, 0x198, 0x198, 0x197, 0x197, 0x196, 0x196, // 0x160
0x196, 0x195, 0x195, 0x194, 0x194, 0x193, 0x193, 0x192, // 0x168
0x192, 0x191, 0x191, 0x191, 0x190, 0x190, 0x18f, 0x18f, // 0x170
0x18e, 0x18e, 0x18d, 0x18d, 0x18c, 0x18c, 0x18c, 0x18b, // 0x178
0x18b, 0x18a, 0x18a, 0x189, 0x189, 0x189, 0x188, 0x188, // 0x180
0x187, 0x187, 0x186, 0x186, 0x185, 0x185, 0x185, 0x184, // 0x188
0x184, 0x183, 0x183, 0x183, 0x182, 0x182, 0x181, 0x181, // 0x190
0x180, 0x180, 0x180, 0x17f, 0x17f, 0x17e, 0x17e, 0x17e, // 0x198
0x17d, 0x17d, 0x17c, 0x17c, 0x17b, 0x17b, 0x17b, 0x17a, // 0x1A0
0x17a, 0x179, 0x179, 0x179, 0x178, 0x178, 0x177, 0x177, // 0x1A8
0x177, 0x176, 0x176, 0x175, 0x175, 0x175, 0x174, 0x174, // 0x1B0
0x174, 0x173, 0x173, 0x172, 0x172, 0x172, 0x171, 0x171, // 0x1B8
0x170, 0x170, 0x170, 0x16f, 0x16f, 0x16f, 0x16e, 0x16e, // 0x1C0
0x16d, 0x16d, 0x16d, 0x16c, 0x16c, 0x16c, 0x16b, 0x16b, // 0x1C8
0x16a, 0x16a, 0x16a, 0x169, 0x169, 0x169, 0x168, 0x168, // 0x1D0
0x167, 0x167, 0x167, 0x166, 0x166, 0x166, 0x165, 0x165, // 0x1D8
0x165, 0x164, 0x164, 0x163, 0x163, 0x163, 0x162, 0x162, // 0x1E0
0x162, 0x161, 0x161, 0x161, 0x160, 0x160, 0x160, 0x15f, // 0x1E8
0x15f, 0x15f, 0x15e, 0x15e, 0x15e, 0x15d, 0x15d, 0x15c, // 0x1F0
0x15c, 0x15c, 0x15b, 0x15b, 0x15b, 0x15a, 0x15a, 0x15a, // 0x1F8
};
NDIS_STATUS
tbAtm155_ChkPhCompleteStatus(
IN PHARDWARE_INFO pHwInfo,
OUT PULONG pData
)
/*++
Routine Description:
This routine will check peephole command has been completed
by checking ph_done bit or time-out happened.
Arguments:
pHwInfo - Pointer to the Hardware Information block.
pData - Point to be written to Peephole_Data.
Return Value:
NDIS_STATUS_SUCCESS - if data has been written successfully.
NDIS_STATUS_FAILURE - if the Peephole operation failed.
--*/
{
NDIS_STATUS Status = NDIS_STATUS_FAILURE;
ULONG counter;
//
// if peephole operation is done.
//
for (*pData = 0, counter = 0;
counter != TBATM155_TIMEOUT_PHY_DONE;
counter++)
{
TBATM155_READ_PORT(
&pHwInfo->TbAtm155_SAR->PeepHole_Data,
pData);
if (*pData & TBATM155_PH_DONE)
{
Status = NDIS_STATUS_SUCCESS;
break;
}
}
return(Status);
}
NDIS_STATUS
tbAtm155_Ph_Write_WORD(
IN PADAPTER_BLOCK pAdapter,
IN ULONG Dst_and_CntrlCmd,
IN USHORT Data
)
/*++
Routine Description:
This routine will write data to off-chip SRAM & off-chip devices
through Peephole registers and make sure the peephole operation
is done by checking the Ph_Done bit of Peephole_Data register.
Arguments:
pAdapter - Pointer to the adapter block.
Dst_and_CntrlCmd - Destination address and control command
to issue to Peephole_Cmd.
Data - To be written to Peephole_Data.
Return Value:
NDIS_STATUS_SUCCESS - if data has been written successfully.
NDIS_STATUS_FAILURE - if the Peephole operation failed.
--*/
{
PHARDWARE_INFO pHwInfo = pAdapter->HardwareInfo;
ULONG temp;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
temp = (ULONG)Data;
NdisAcquireSpinLock(&pHwInfo->Lock);
TBATM155_WRITE_PORT(
&pHwInfo->TbAtm155_SAR->PeepHole_Data,
temp);
TBATM155_WRITE_PORT(
&pHwInfo->TbAtm155_SAR->PeepHole_Cmd,
Dst_and_CntrlCmd);
NdisReleaseSpinLock(&pHwInfo->Lock);
Status = tbAtm155_ChkPhCompleteStatus(pHwInfo, &temp);
return (Status);
}
NDIS_STATUS
tbAtm155_Ph_Read_WORD(
IN PADAPTER_BLOCK pAdapter,
IN ULONG Dst_and_CntrlCmd,
OUT PUSHORT pData
)
/*++
Routine Description:
This routine will read data from off-chip SRAM & devices through
Peephole registers and make sure the peephole operation is done by
checking the Ph_Done bit of Peephole_Data.
Arguments:
pAdapter - Pointer to the adapter block.
Dst_and_CntrlCmd - Destination address in SRAM address.
pData - Pointer of SRAM data for return to caller.
Return Value:
NDIS_STATUS_SUCCESS - if data has been read successfully.
NDIS_STATUS_FAILURE - if the Peephole operation failed.
--*/
{
PHARDWARE_INFO pHwInfo = pAdapter->HardwareInfo;
ULONG temp;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
NdisAcquireSpinLock(&pHwInfo->Lock);
TBATM155_WRITE_PORT(
&pHwInfo->TbAtm155_SAR->PeepHole_Cmd,
Dst_and_CntrlCmd);
Status = tbAtm155_ChkPhCompleteStatus(pHwInfo, &temp);
NdisReleaseSpinLock(&pHwInfo->Lock);
// clear Ph_Done bit
*pData = (USHORT)(temp & 0x0FFFF);
return (Status);
}
//////////////////////////////////////////////////////////////////////////
//
// Related Routines of reading node address from EEPROM
//
//////////////////////////////////////////////////////////////////////////
VOID
SetRead93C46StructureWord(
IN PUSHORT OperateArray,
IN USHORT address,
OUT PUCHAR length
)
/*++
Routine Description:
This routine sets up array of EEPORM operation for reading node address.
Arguments:
Return Value:
--*/
{
UCHAR OpBitStr[RD_INSTRUCTION_LEN_93C46];
UCHAR AddrBitStr[ADDRESS_LENGTH2_93C46];
UCHAR i, j, temp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -