|  | #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 */ |