bcm-v4

[Specification

N PHY RF Control Override (u16 field, u16 value, u8 core, u8 off)

  1. If PHY Revision >= 3 and PHY Revision < 7

    1. Set en_mask to field
    2. Loop 2 times with index i
      1. If field is 0x0001
        1. Set val_mask to 0x8000
        2. Set val_shift to 15
        3. If i is zero
          1. Set addr to 0xE5
          2. Set val_addr to 0xF9
        4. Otherwise
          1. Set addr to 0xE6
          2. Set val_addr to 0xFB
      2. Else if field is 0x0002
        1. Set val_mask to 1
        2. Set val_shift to 0
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      3. Else if field is 0x0004
        1. Set val_mask to 2
        2. Set val_shift to 1
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      4. Else if field is 0x0008
        1. Set val_mask to 4
        2. Set val_shift to 2
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      5. Else if field is 0x0010
        1. Set val_mask to 16
        2. Set val_shift to 4
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      6. Else if field is 0x0020
        1. Set val_mask to 0x0020
        2. Set val_shift to 5
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      7. Else if field is 0x0040
        1. Set val_mask to 0x0040
        2. Set val_shift to 6
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      8. Else if field is 0x0080
        1. Set val_mask to 0x0080
        2. Set val_shift to 7
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      9. Else if field is 0x0100
        1. Set val_mask to 0x0100
        2. Set val_shift to 8
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      10. Else if field is 0x0200
        1. Set val_mask to 0x0007
        2. Set val_shift to 0
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0xF8
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0xFA
      11. Else if field is 0x0400
        1. Set val_mask to 0x0070
        2. Set val_shift to 4
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0xF8
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0xFA
      12. Else if field is 0x0800
        1. Set val_mask to 0xE000
        2. Set val_shift to 13
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7A
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7D
      13. Else if field is 0x1000
        1. Set val_mask to 0xFFFF
        2. Set val_shift to 0
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7B
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7E
      14. Else if field is 0x2000
        1. Set val_mask to 0xFFFF
        2. Set val_shift to 0
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0x7C
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0x7F
      15. Else if field is 0x4000
        1. Set val_mask to 0x00C0
        2. Set val_shift to 6
        3. If i is zero
          1. Set addr to 0xE7
          2. Set val_addr to 0xF9
        4. Otherwise
          1. Set addr to 0xEC
          2. Set val_addr to 0xFB
      16. Otherwise
        1. Set addr to 0xFFFF
      17. If off is not zero
        1. Mask PHY Register addr with mask ~(en_mask)
        2. Mask PHY Register val_addr with mask ~(val_mask)
      18. Otherwise
        1. If core is zero or ((1 << i) & core) is not zero

          1. Set bits en_mask in PHY Register addr
          2. If addr is not 0xFFFF
            1. MaskSet PHY Register val_addr with mask ~(val_mask) and set with value << val_shift

  2. Otherwise
    1. if off is not zero
      1. Mask PHY Register 0xEC with ~(field)
      2. Set value to 0
    2. Otherwise
      1. Set the bits in field in PHY Register 0xEC
    3. Loop 2 times with index i
      1. If field is 0x0002, 0x0200, 0x1000, 0x2000, or 0x4000
        1. Set addr to 0x78
        2. Set core to 1
      2. Else if field is 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, or 0x0100
        1. If i is 0
          1. Set addr to 0x7A
        2. Otherwise
          1. Set addr to 0x7D
      3. Else if field is 0x0400
        1. If i is 0
          1. Set addr to 0x7B
        2. Otherwise
          1. Set addr to 0x7E
      4. Else if field is 0x0800
        1. If i is 0
          1. Set addr to 0x7C
        2. Otherwise
          1. Set addr to 0x7F
      5. Otherwise
        1. Set addr to 0xFFFF
      6. If field is 0x0002
        1. Set bmask to 0x0038
        2. Set shift to 3
      7. Else if field is 0x0200
        1. Set bmask to 0x0004
        2. Set shift to 2
      8. Else if field is 0x1000
        1. Set bmask to 0x0100
        2. Set shift to 8
      9. Else if field is 0x2000
        1. Set bmask to 0x0200
        2. Set shift to 9
      10. Else if field is 0x4000
        1. Set bmask to 0xF000
        2. Set shift to 12
      11. Else if field is 0x0004
        1. Set bmask to 0x0001
        2. Set shift to 0
      12. Else if field is 0x0008
        1. Set bmask to 0x0002
        2. Set shift to 1
      13. Else if field is 0x0010
        1. Set bmask to 0x0004
        2. Set shift to 2
      14. Else if field is 0x0020
        1. Set bmask to 0x0030
        2. Set shift to 4
      15. Else if field is 0x0040
        1. Set bmask to 0x00C0
        2. Set shift to 6
      16. Else if field is 0x0080
        1. Set bmask to 0x0100
        2. Set shift to 8
      17. Else if field is 0x0100
        1. Set bmask to 0x0200
        2. Set shift to 9
      18. Else if field is 0x0400 or 0x0800
        1. Set bmask to 0x1FFF
        2. Set shift to 0
      19. Otherwise
        1. Set bmask to 0
        2. Set shift to 0
      20. If addr is not 0xFFFF and (core & (1 << i) is not zero)

        1. MaskSet PHY Address addr with mask ~(bmask) and set with value << shift

      21. Set bit 1 in PHY Register 0xEC
      22. Set bit 1 in PHY Register 0x78
      23. Delay 1 usec
      24. Mask PHY Register 0xEC with mask 0xFFFE

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