bcm-v4

[Specification

N PHY RF Ctrl Override Rev7 (u16 field, u16 value, u8 core_mask, u8 off, u8 override)

  1. If PHY Revision >= 7

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

          1. Set bits en_mask in PHY Register en_addr
          2. If addr not equal 0xFFFF
            1. Maskset PHY Register val_addr with mask ~val_mask and set with (value << shift)


Exported/Archived from the wiki to HTML on 2016-10-27