docs: def get_chip_info(self, x, y):
          """Get general information about the resources available on a chip.
  
          Returns
          -------
          :py:class:`.ChipInfo`
              A named tuple indicating the number of working cores, the states of
              all working cores, the set of working links and the size of the
              largest free block in SDRAM and SRAM.
          """
          info = self._send_scp(x, y, 0, SCPCommands.info, expected_args=3)
  
          # Unpack values encoded in the argument fields
          num_cores = info.arg1 & 0x1F
          working_links = set(link for link in Links
                              if (info.arg1 >> (8 + link)) & 1)
          largest_free_rtr_mc_block = (info.arg1 >> 14) & 0x7FF
          ethernet_up = bool(info.arg1 & (1 << 25))
  
          # Unpack the values in the data payload
          data = struct.unpack_from("<18BHI", info.data)
          core_states = [consts.AppState(c) for c in data[:18]]
          local_ethernet_chip = ((data[18] >> 8) & 0xFF,
                                 (data[18] >> 0) & 0xFF)
          ip_address = ".".join(str((data[19] >> i) & 0xFF)
                                for i in range(0, 32, 8))
  
          return ChipInfo(
              num_cores=num_cores,
              core_states=core_states[:num_cores],
              working_links=working_links,
              largest_free_sdram_block=info.arg2,
              largest_free_sram_block=info.arg3,
              largest_free_rtr_mc_block=largest_free_rtr_mc_block,
              ethernet_up=ethernet_up,
              ip_address=ip_address,
              local_ethernet_chip=local_ethernet_chip,
          )