N PHY RF Control Override (u16 field, u16 value, u8 core, u8 off)
If PHY Revision >= 3 and PHY Revision < 7
- Set en_mask to field
- Loop 2 times with index i
- If field is 0x0001
- Set val_mask to 0x8000
- Set val_shift to 15
- If i is zero
- Set addr to 0xE5
- Set val_addr to 0xF9
- Otherwise
- Set addr to 0xE6
- Set val_addr to 0xFB
- Else if field is 0x0002
- Set val_mask to 1
- Set val_shift to 0
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0004
- Set val_mask to 2
- Set val_shift to 1
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0008
- Set val_mask to 4
- Set val_shift to 2
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0010
- Set val_mask to 16
- Set val_shift to 4
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0020
- Set val_mask to 0x0020
- Set val_shift to 5
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0040
- Set val_mask to 0x0040
- Set val_shift to 6
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0080
- Set val_mask to 0x0080
- Set val_shift to 7
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0100
- Set val_mask to 0x0100
- Set val_shift to 8
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x0200
- Set val_mask to 0x0007
- Set val_shift to 0
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0xF8
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0xFA
- Else if field is 0x0400
- Set val_mask to 0x0070
- Set val_shift to 4
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0xF8
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0xFA
- Else if field is 0x0800
- Set val_mask to 0xE000
- Set val_shift to 13
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7A
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7D
- Else if field is 0x1000
- Set val_mask to 0xFFFF
- Set val_shift to 0
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7B
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7E
- Else if field is 0x2000
- Set val_mask to 0xFFFF
- Set val_shift to 0
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0x7C
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0x7F
- Else if field is 0x4000
- Set val_mask to 0x00C0
- Set val_shift to 6
- If i is zero
- Set addr to 0xE7
- Set val_addr to 0xF9
- Otherwise
- Set addr to 0xEC
- Set val_addr to 0xFB
- Otherwise
- Set addr to 0xFFFF
- If off is not zero
- Mask PHY Register addr with mask ~(en_mask)
- Mask PHY Register val_addr with mask ~(val_mask)
- Otherwise
If core is zero or ((1 << i) & core) is not zero
- Set bits en_mask in PHY Register addr
- If addr is not 0xFFFF
MaskSet PHY Register val_addr with mask ~(val_mask) and set with value << val_shift
- If field is 0x0001
- Otherwise
- if off is not zero
- Mask PHY Register 0xEC with ~(field)
- Set value to 0
- Otherwise
- Set the bits in field in PHY Register 0xEC
- Loop 2 times with index i
- If field is 0x0002, 0x0200, 0x1000, 0x2000, or 0x4000
- Set addr to 0x78
- Set core to 1
- Else if field is 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, or 0x0100
- If i is 0
- Set addr to 0x7A
- Otherwise
- Set addr to 0x7D
- If i is 0
- Else if field is 0x0400
- If i is 0
- Set addr to 0x7B
- Otherwise
- Set addr to 0x7E
- If i is 0
- Else if field is 0x0800
- If i is 0
- Set addr to 0x7C
- Otherwise
- Set addr to 0x7F
- If i is 0
- Otherwise
- Set addr to 0xFFFF
- If field is 0x0002
- Set bmask to 0x0038
- Set shift to 3
- Else if field is 0x0200
- Set bmask to 0x0004
- Set shift to 2
- Else if field is 0x1000
- Set bmask to 0x0100
- Set shift to 8
- Else if field is 0x2000
- Set bmask to 0x0200
- Set shift to 9
- Else if field is 0x4000
- Set bmask to 0xF000
- Set shift to 12
- Else if field is 0x0004
- Set bmask to 0x0001
- Set shift to 0
- Else if field is 0x0008
- Set bmask to 0x0002
- Set shift to 1
- Else if field is 0x0010
- Set bmask to 0x0004
- Set shift to 2
- Else if field is 0x0020
- Set bmask to 0x0030
- Set shift to 4
- Else if field is 0x0040
- Set bmask to 0x00C0
- Set shift to 6
- Else if field is 0x0080
- Set bmask to 0x0100
- Set shift to 8
- Else if field is 0x0100
- Set bmask to 0x0200
- Set shift to 9
- Else if field is 0x0400 or 0x0800
- Set bmask to 0x1FFF
- Set shift to 0
- Otherwise
- Set bmask to 0
- Set shift to 0
If addr is not 0xFFFF and (core & (1 << i) is not zero)
MaskSet PHY Address addr with mask ~(bmask) and set with value << shift
- Set bit 1 in PHY Register 0xEC
- Set bit 1 in PHY Register 0x78
- Delay 1 usec
- Mask PHY Register 0xEC with mask 0xFFFE
- If field is 0x0002, 0x0200, 0x1000, 0x2000, or 0x4000
- if off is not zero