|
|
|
#ifndef _ADDRESS_TABLE_H
|
|
|
|
#define _ADDRESS_TABLE_H 1
|
|
|
|
|
|
|
|
/*
|
|
|
|
* ----------------------------------------------------------------------------
|
|
|
|
* addressTable.h - this file has all the declarations of the address table
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define _8K_TABLE 0
|
|
|
|
#define ADDRESS_TABLE_ALIGNMENT 8
|
|
|
|
#define HASH_DEFAULT_MODE 14
|
|
|
|
#define HASH_MODE 13
|
|
|
|
#define HASH_SIZE 12
|
|
|
|
#define HOP_NUMBER 12
|
|
|
|
#define MAC_ADDRESS_STRING_SIZE 12
|
|
|
|
#define MAC_ENTRY_SIZE sizeof(addrTblEntry)
|
|
|
|
#define MAX_NUMBER_OF_ADDRESSES_TO_STORE 1000
|
|
|
|
#define PROMISCUOUS_MODE 0
|
|
|
|
#define SKIP 1<<1
|
|
|
|
#define SKIP_BIT 1
|
|
|
|
#define VALID 1
|
|
|
|
|
|
|
|
/*
|
|
|
|
* ----------------------------------------------------------------------------
|
|
|
|
* XXX_MIKE - potential sign-extension bugs lurk here...
|
|
|
|
*/
|
|
|
|
#define NIBBLE_SWAPPING_32_BIT(X) ( (((X) & 0xf0f0f0f0) >> 4) \
|
|
|
|
| (((X) & 0x0f0f0f0f) << 4) )
|
|
|
|
|
|
|
|
#define NIBBLE_SWAPPING_16_BIT(X) ( (((X) & 0x0000f0f0) >> 4) \
|
|
|
|
| (((X) & 0x00000f0f) << 4) )
|
|
|
|
|
|
|
|
#define FLIP_4_BITS(X) ( (((X) & 0x01) << 3) | (((X) & 0x002) << 1) \
|
|
|
|
| (((X) & 0x04) >> 1) | (((X) & 0x008) >> 3) )
|
|
|
|
|
|
|
|
#define FLIP_6_BITS(X) ( (((X) & 0x01) << 5) | (((X) & 0x020) >> 5) \
|
|
|
|
| (((X) & 0x02) << 3) | (((X) & 0x010) >> 3) \
|
|
|
|
| (((X) & 0x04) << 1) | (((X) & 0x008) >> 1) )
|
|
|
|
|
|
|
|
#define FLIP_9_BITS(X) ( (((X) & 0x01) << 8) | (((X) & 0x100) >> 8) \
|
|
|
|
| (((X) & 0x02) << 6) | (((X) & 0x080) >> 6) \
|
|
|
|
| (((X) & 0x04) << 4) | (((X) & 0x040) >> 4) \
|
|
|
|
| ((X) & 0x10) | (((X) & 0x08) << 2) | (((X) & 0x020) >> 2) )
|
|
|
|
|
|
|
|
/*
|
|
|
|
* V: value we're operating on
|
|
|
|
* O: offset of rightmost bit in field
|
|
|
|
* W: width of field to shift
|
|
|
|
* S: distance to shift left
|
|
|
|
*/
|
|
|
|
#define MASK( fieldWidth ) ((1 << (fieldWidth)) - 1)
|
|
|
|
#define leftShiftedBitfield( V,O,W,S) (((V) & (MASK(W) << (O))) << (S))
|
|
|
|
#define rightShiftedBitfield(V,O,W,S) (((u32)((V) & (MASK(W) << (O)))) >> (S))
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Push to main memory all cache lines associated with
|
|
|
|
* the specified range of virtual memory addresses
|
|
|
|
*
|
|
|
|
* A: Address of first byte in range to flush
|
|
|
|
* N: Number of bytes to flush
|
|
|
|
* Note - flush_dcache_range() does a "sync", does NOT invalidate
|
|
|
|
*/
|
|
|
|
#define DCACHE_FLUSH_N_SYNC( A, N ) flush_dcache_range( (A), ((A)+(N)) )
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct addressTableEntryStruct {
|
|
|
|
u32 hi;
|
|
|
|
u32 lo;
|
|
|
|
} addrTblEntry;
|
|
|
|
|
|
|
|
u32
|
|
|
|
uncachedPages( u32 pages );
|
|
|
|
u32
|
|
|
|
hashTableFunction( u32 macH, u32 macL, u32 HashSize, u32 hash_mode );
|
|
|
|
|
|
|
|
unsigned int
|
|
|
|
initAddressTable( u32 port, u32 hashMode, u32 hashSize );
|
|
|
|
|
|
|
|
int
|
|
|
|
addAddressTableEntry( u32 port, u32 macH, u32 macL, u32 rd, u32 skip );
|
|
|
|
|
|
|
|
#endif /* #ifndef _ADDRESS_TABLE_H */
|