static uint64_t l2x0_priv_read(void *opaque, target_phys_addr_t offset,

                               unsigned size)

{

    uint32_t cache_data;

    l2x0_state *s = (l2x0_state *)opaque;

    offset &= 0xfff;

    if (offset >= 0x730 && offset < 0x800) {

        return 0; /* cache ops complete */

    }

    switch (offset) {

    case 0:

        return CACHE_ID;

    case 0x4:

        /* aux_ctrl values affect cache_type values */

        cache_data = (s->aux_ctrl & (7 << 17)) >> 15;

        cache_data |= (s->aux_ctrl & (1 << 16)) >> 16;

        return s->cache_type |= (cache_data << 18) | (cache_data << 6);

    case 0x100:

        return s->ctrl;

    case 0x104:

        return s->aux_ctrl;

    case 0x108:

        return s->tag_ctrl;

    case 0x10C:

        return s->data_ctrl;

    case 0xC00:

        return s->filter_start;

    case 0xC04:

        return s->filter_end;

    case 0xF40:

        return 0;

    case 0xF60:

        return 0;

    case 0xF80:

        return 0;

    default:

        fprintf(stderr, "l2x0_priv_read: Bad offset %x\n", (int)offset);

        break;

    }

    return 0;

}

static uint64_t l2x0_priv_read(void *opaque, target_phys_addr_t offset,

                               unsigned size)

{

    uint32_t cache_data;

    l2x0_state *s = (l2x0_state *)opaque;

    offset &= 0xfff;

    if (offset >= 0x730 && offset < 0x800) {

        return 0; 

    }

    switch (offset) {

    case 0:

        return CACHE_ID;

    case 0x4:

        

        cache_data = (s->aux_ctrl & (7 << 17)) >> 15;

        cache_data |= (s->aux_ctrl & (1 << 16)) >> 16;

        return s->cache_type |= (cache_data << 18) | (cache_data << 6);

    case 0x100:

        return s->ctrl;

    case 0x104:

        return s->aux_ctrl;

    case 0x108:

        return s->tag_ctrl;

    case 0x10C:

        return s->data_ctrl;

    case 0xC00:

        return s->filter_start;

    case 0xC04:

        return s->filter_end;

    case 0xF40:

        return 0;

    case 0xF60:

        return 0;

    case 0xF80:

        return 0;

    default:

        fprintf(stderr, "l2x0_priv_read: Bad offset %x\n", (int)offset);

        break;

    }

    return 0;

}

static uint64_t FUNC_0(void *opaque, target_phys_addr_t offset,

                               unsigned size)

{

    uint32_t cache_data;

    l2x0_state *s = (l2x0_state *)opaque;

    offset &= 0xfff;

    if (offset >= 0x730 && offset < 0x800) {

        return 0; 

    }

    switch (offset) {

    case 0:

        return CACHE_ID;

    case 0x4:

        

        cache_data = (s->aux_ctrl & (7 << 17)) >> 15;

        cache_data |= (s->aux_ctrl & (1 << 16)) >> 16;

        return s->cache_type |= (cache_data << 18) | (cache_data << 6);

    case 0x100:

        return s->ctrl;

    case 0x104:

        return s->aux_ctrl;

    case 0x108:

        return s->tag_ctrl;

    case 0x10C:

        return s->data_ctrl;

    case 0xC00:

        return s->filter_start;

    case 0xC04:

        return s->filter_end;

    case 0xF40:

        return 0;

    case 0xF60:

        return 0;

    case 0xF80:

        return 0;

    default:

        fprintf(stderr, "FUNC_0: Bad offset %x\n", (int)offset);

        break;

    }

    return 0;

}

static uint64_t FUNC_0(void *opaque, target_phys_addr_t offset,
unsigned size)
{ uint32_t cache_data; l2x0_state *s = (l2x0_state *)opaque; offset &= 0xfff; if (offset >= 0x730 && offset < 0x800) { return 0; } switch (offset) { case 0:
return CACHE_ID; case 0x4:
cache_data = (s->aux_ctrl & (7 << 17)) >> 15; cache_data |= (s->aux_ctrl & (1 << 16)) >> 16; return s->cache_type |= (cache_data << 18) | (cache_data << 6); case 0x100:
return s->ctrl; case 0x104:
return s->aux_ctrl; case 0x108:
return s->tag_ctrl; case 0x10C:
return s->data_ctrl; case 0xC00:
return s->filter_start; case 0xC04:
return s->filter_end; case 0xF40:
return 0; case 0xF60:
return 0; case 0xF80:
return 0; default:
fprintf(stderr, "FUNC_0: Bad offset %x\n", (int)offset); break; } return 0; }