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,
        )
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.