N PHY RF Ctrl Override Rev7 (u16 field, u16 value, u8 core_mask, u8 off, u8 override)
If PHY Revision >= 7
- Set en_mask to field
- Set addr to 0
- Loop for core = 0, 1
- If overide is 0
- Set en_addr to (core == 0) ? 0xE7 : 0xEC
- If field is 0x4
- Set val_addr to (core == 0) ? 0x7A : 0x7D
- Set val_mask to 2
- Set shift to 1
- Else if field is 0x8
- Set val_addr to (core == 0) ? 0x7A : 0x7D
- Set val_mask to 4
- Set shift to 2
- Else if field is 0x10
- Set val_addr to (core == 0) ? 0x7A : 0x7D
- Set val_mask to 0x10
- Set shift to 4
- Else if field is 0x20
- Set val_addr to (core == 0) ? 0x7A : 0x7D
- Set val_mask to 0x20
- Set shift to 5
- Else if field is 0x40
- Set val_addr to (core == 0) ? 0x7A : 0x7D
- Set val_mask to 0x40
- Set shift to 6
- Else if field is 0x80
- Set val_addr to (core == 0) ? 0xF8 : 0xFA
- Set val_mask to 0x80
- Set shift to 7
- Else if field is 0x400
- Set val_addr to (core == 0) ? 0xF8 : 0xFA
- Set val_mask to 0x70
- Set shift to 4
- Else if field is 0x800
- Set val_addr to (core == 0) ? 0x7B : 0x7E
- Set val_mask to 0xFFFF
- Set shift to 0
- Else if field is 0x1000
- Set val_addr to (core == 0) ? 0x7C : 0x7F
- Set val_mask to 0xFFFF
- Set shift to 0
- Else if field is 0x6000
- Set val_addr to (core == 0) ? 0x348 : 0x349
- Set val_mask to 0xFFFF
- Set shift to 0
- Else if field is 0x2000
- Set val_addr to (core == 0) ? 0x348 : 0x349
- Set val_mask to 0xF
- Set shift to 0
- Otherwise
- Set addr to 0xFFFF
- Else if override is 1
- Set en_addr to (core == 0) ? 0x342 : 0x343
- Set val_addr to (core == 0) ? 0x340 : 0x341
- If field is 0x2
- Set val_mask to 0x2
- Set shift to 1
- Else if field is 0x8
- Set val_mask to 0x8
- Set shift to 3
- Else if field is 0x20
- Set val_mask to 0x20
- Set shift to 5
- Else if field is 0x10
- Set val_mask to 0x10
- Set shift to 4
- Else if field is 0x4
- Set val_mask to 0x4
- Set shift to 2
- Else if field is 0x80
- Set val_mask to 0x700
- Set shift to 8
- Else if field is 0x800
- Set val_mask to 0x4000
- Set shift to 14
- Else if field is 0x400
- Set val_mask to 0x2000
- Set shift to 13
- Else if field is 0x200
- Set val_mask to 0x800
- Set shift to 12
- Else if field is 0x100
- Set val_mask to 0x100
- Set shift to 11
- Else if field is 0x40
- Set val_mask to 0x40
- Set shift to 6
- Else if field is 0x1
- Set val_mask to 0x1
- Set shift to 0
- Otherwise
- Set addr to 0xFFFF
- Else if override is 2
- Set en_addr to (core == 0) ? 0x346 : 0x347
- Set val_addr to (core == 0) ? 0x344 : 0x345
- If field is 0x8
- Set val_mask to 0x8
- Set shift to 3
- Else if field is 0x2
- Set val_mask to 0x2
- Set shift to 1
- Else if field is 0x1
- Set val_mask to 0x1
- Set shift to 0
- Else if field is 0x4
- Set val_mask to 0x4
- Set shift to 2
- Else if field is 0x10
- Set val_mask to 0x10
- Set shift to 4
- Else
- Set addr to 0xFFFF
- If off
- Mask PHY Register en_addr with mask ~en_mask
- Mask PHY Register val_addr with mask ~val_mask
- Otherwise
If !core_mask OR (core_mask & (1 << core)
- Set bits en_mask in PHY Register en_addr
- If addr not equal 0xFFFF
Maskset PHY Register val_addr with mask ~val_mask and set with (value << shift)
- If overide is 0