Example #1
0
void
__C(CHIP,_mem_unmap)(
    void *v,
    bus_space_handle_t memh,
    bus_size_t memsize,
    int acct)
{
    bus_addr_t memaddr;
    int error;

    if (acct == 0)
        return;

#ifdef EXTENT_DEBUG
    printf("mem: freeing handle 0x%lx for 0x%lx\n", memh, memsize);
#endif

    memaddr = memh - ALPHA_PHYS_TO_K0SEG(CHIP_MEM_SYS_START(v));

#ifdef EXTENT_DEBUG
    printf("mem: freeing 0x%lx to 0x%lx\n", memaddr, memaddr + memsize - 1);
#endif

    error = extent_free(CHIP_MEM_EXTENT(v), memaddr, memsize,
                        EX_NOWAIT | (CHIP_EX_MALLOC_SAFE(v) ? EX_MALLOCOK : 0));
    if (error) {
        printf("%s: WARNING: could not unmap 0x%lx-0x%lx (error %d)\n",
               __S(__C(CHIP,_mem_unmap)), memaddr, memaddr + memsize - 1,
               error);
#ifdef EXTENT_DEBUG
        extent_print(CHIP_MEM_EXTENT(v));
#endif
    }
}
Example #2
0
int
__C(CHIP,_mem_get_window)(
    void *v,
    int window,
    struct alpha_bus_space_translation *abst)
{

    switch (window) {
    case 0:
        abst->abst_bus_start = 0;
        abst->abst_bus_end = 0xffffffffUL;
        abst->abst_sys_start = CHIP_MEM_SYS_START(v);
        abst->abst_sys_end = CHIP_MEM_SYS_START(v) + abst->abst_bus_end;
        abst->abst_addr_shift = 0;
        abst->abst_size_shift = 0;
        abst->abst_flags = ABST_DENSE|ABST_BWX;
        break;

    default:
        panic(__S(__C(CHIP,_mem_get_window)) ": invalid window %d",
              window);
    }

    return (0);
}
Example #3
0
void
__C(CHIP,_mem_free)(
    void *v,
    bus_space_handle_t bsh,
    bus_size_t size)
{

    /* Unmap does all we need to do. */
    __C(CHIP,_mem_unmap)(v, bsh, size, 1);
}
Example #4
0
static inline void
__C(CHIP,_mem_write_8)(
    void *v,
    bus_space_handle_t memh,
    bus_size_t off,
    uint64_t val)
{

    /* XXX XXX XXX */
    panic("%s not implemented", __S(__C(CHIP,_mem_write_8)));
    alpha_mb();
}
Example #5
0
static inline uint64_t
__C(CHIP,_mem_read_8)(
    void *v,
    bus_space_handle_t memh,
    bus_size_t off)
{

    alpha_mb();

    /* XXX XXX XXX */
    panic("%s not implemented", __S(__C(CHIP,_mem_read_8)));
}
Example #6
0
static inline uint32_t
__C(CHIP,_mem_read_4)(
    void *v,
    bus_space_handle_t memh,
    bus_size_t off)
{
    bus_addr_t addr;

    addr = memh + off;
#ifdef DIAGNOSTIC
    if (addr & 3)
        panic(__S(__C(CHIP,_mem_read_4)) ": addr 0x%lx not aligned",
              addr);
#endif
    alpha_mb();
    return (*(uint32_t *)addr);
}
Example #7
0
static inline void
__C(CHIP,_mem_write_4)(
    void *v,
    bus_space_handle_t memh,
    bus_size_t off,
    uint32_t val)
{
    bus_addr_t addr;

    addr = memh + off;
#ifdef DIAGNOSTIC
    if (addr & 3)
        panic(__S(__C(CHIP,_mem_write_4)) ": addr 0x%lx not aligned",
              addr);
#endif
    *(uint32_t *)addr = val;
    alpha_mb();
}
void
__C(CHIP,_bus_mem_init)(bus_space_tag_t t, void *v)
{
#ifdef CHIP_D_MEM_W1_SYS_START
	struct extent *dex;
#endif
	struct extent *sex;

	/*
	 * Initialize the bus space tag.
	 */

	/* cookie */
	t->abs_cookie =		v;

	/* mapping/unmapping */
	t->abs_map =		__C(CHIP,_mem_map);
	t->abs_unmap =		__C(CHIP,_mem_unmap);
	t->abs_subregion =	__C(CHIP,_mem_subregion);

	t->abs_translate =	__C(CHIP,_mem_translate);
	t->abs_get_window =	__C(CHIP,_mem_get_window);

	/* allocation/deallocation */
	t->abs_alloc =		__C(CHIP,_mem_alloc);
	t->abs_free = 		__C(CHIP,_mem_free);

	/* get kernel virtual address */
	t->abs_vaddr =		__C(CHIP,_mem_vaddr);

	/* mmap for user */
	t->abs_mmap =		__C(CHIP,_mem_mmap);

	/* barrier */
	t->abs_barrier =	__C(CHIP,_mem_barrier);
	
	/* read (single) */
	t->abs_r_1 =		__C(CHIP,_mem_read_1);
	t->abs_r_2 =		__C(CHIP,_mem_read_2);
	t->abs_r_4 =		__C(CHIP,_mem_read_4);
	t->abs_r_8 =		__C(CHIP,_mem_read_8);
	
	/* read multiple */
	t->abs_rm_1 =		__C(CHIP,_mem_read_multi_1);
	t->abs_rm_2 =		__C(CHIP,_mem_read_multi_2);
	t->abs_rm_4 =		__C(CHIP,_mem_read_multi_4);
	t->abs_rm_8 =		__C(CHIP,_mem_read_multi_8);
	
	/* read region */
	t->abs_rr_1 =		__C(CHIP,_mem_read_region_1);
	t->abs_rr_2 =		__C(CHIP,_mem_read_region_2);
	t->abs_rr_4 =		__C(CHIP,_mem_read_region_4);
	t->abs_rr_8 =		__C(CHIP,_mem_read_region_8);
	
	/* write (single) */
	t->abs_w_1 =		__C(CHIP,_mem_write_1);
	t->abs_w_2 =		__C(CHIP,_mem_write_2);
	t->abs_w_4 =		__C(CHIP,_mem_write_4);
	t->abs_w_8 =		__C(CHIP,_mem_write_8);
	
	/* write multiple */
	t->abs_wm_1 =		__C(CHIP,_mem_write_multi_1);
	t->abs_wm_2 =		__C(CHIP,_mem_write_multi_2);
	t->abs_wm_4 =		__C(CHIP,_mem_write_multi_4);
	t->abs_wm_8 =		__C(CHIP,_mem_write_multi_8);
	
	/* write region */
	t->abs_wr_1 =		__C(CHIP,_mem_write_region_1);
	t->abs_wr_2 =		__C(CHIP,_mem_write_region_2);
	t->abs_wr_4 =		__C(CHIP,_mem_write_region_4);
	t->abs_wr_8 =		__C(CHIP,_mem_write_region_8);

	/* set multiple */
	t->abs_sm_1 =		__C(CHIP,_mem_set_multi_1);
	t->abs_sm_2 =		__C(CHIP,_mem_set_multi_2);
	t->abs_sm_4 =		__C(CHIP,_mem_set_multi_4);
	t->abs_sm_8 =		__C(CHIP,_mem_set_multi_8);
	
	/* set region */
	t->abs_sr_1 =		__C(CHIP,_mem_set_region_1);
	t->abs_sr_2 =		__C(CHIP,_mem_set_region_2);
	t->abs_sr_4 =		__C(CHIP,_mem_set_region_4);
	t->abs_sr_8 =		__C(CHIP,_mem_set_region_8);

	/* copy */
	t->abs_c_1 =		__C(CHIP,_mem_copy_region_1);
	t->abs_c_2 =		__C(CHIP,_mem_copy_region_2);
	t->abs_c_4 =		__C(CHIP,_mem_copy_region_4);
	t->abs_c_8 =		__C(CHIP,_mem_copy_region_8);

#ifdef CHIP_D_MEM_W1_SYS_START
	/* XXX WE WANT EXTENT_NOCOALESCE, BUT WE CAN'T USE IT. XXX */
	dex = extent_create(__S(__C(CHIP,_bus_dmem)), 0x0UL,
	    0xffffffffffffffffUL,
	    (void *)CHIP_D_MEM_EX_STORE(v), CHIP_D_MEM_EX_STORE_SIZE(v),
	    EX_NOWAIT);
	extent_alloc_region(dex, 0, 0xffffffffffffffffUL, EX_NOWAIT);

#ifdef CHIP_D_MEM_W1_BUS_START
#ifdef EXTENT_DEBUG
	printf("dmem: freeing from 0x%lx to 0x%lx\n",
	    CHIP_D_MEM_W1_BUS_START(v), CHIP_D_MEM_W1_BUS_END(v));
#endif
	extent_free(dex, CHIP_D_MEM_W1_BUS_START(v),
	    CHIP_D_MEM_W1_BUS_END(v) - CHIP_D_MEM_W1_BUS_START(v) + 1,
	    EX_NOWAIT);
#endif

#ifdef EXTENT_DEBUG
	extent_print(dex);
#endif
	CHIP_D_MEM_EXTENT(v) = dex;
#endif /* CHIP_D_MEM_W1_SYS_START */

	/* XXX WE WANT EXTENT_NOCOALESCE, BUT WE CAN'T USE IT. XXX */
	sex = extent_create(__S(__C(CHIP,_bus_smem)), 0x0UL,
	    0xffffffffffffffffUL,
	    (void *)CHIP_S_MEM_EX_STORE(v), CHIP_S_MEM_EX_STORE_SIZE(v),
	    EX_NOWAIT);
	extent_alloc_region(sex, 0, 0xffffffffffffffffUL, EX_NOWAIT);

#ifdef CHIP_S_MEM_W1_BUS_START
#ifdef EXTENT_DEBUG
	printf("smem: freeing from 0x%lx to 0x%lx\n",
	    CHIP_S_MEM_W1_BUS_START(v), CHIP_S_MEM_W1_BUS_END(v));
#endif
	extent_free(sex, CHIP_S_MEM_W1_BUS_START(v),
	    CHIP_S_MEM_W1_BUS_END(v) - CHIP_S_MEM_W1_BUS_START(v) + 1,
	    EX_NOWAIT);
#endif
#ifdef CHIP_S_MEM_W2_BUS_START
	if (CHIP_S_MEM_W2_BUS_START(v) != CHIP_S_MEM_W1_BUS_START(v)) {
#ifdef EXTENT_DEBUG
		printf("smem: freeing from 0x%lx to 0x%lx\n",
		    CHIP_S_MEM_W2_BUS_START(v), CHIP_S_MEM_W2_BUS_END(v));
#endif
		extent_free(sex, CHIP_S_MEM_W2_BUS_START(v),
		    CHIP_S_MEM_W2_BUS_END(v) - CHIP_S_MEM_W2_BUS_START(v) + 1,
		    EX_NOWAIT);
	} else {
#ifdef EXTENT_DEBUG
		printf("smem: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
		    CHIP_S_MEM_W2_BUS_START(v), CHIP_S_MEM_W2_BUS_END(v));
#endif
	}
#endif
#ifdef CHIP_S_MEM_W3_BUS_START
	if (CHIP_S_MEM_W3_BUS_START(v) != CHIP_S_MEM_W1_BUS_START(v) &&
	    CHIP_S_MEM_W3_BUS_START(v) != CHIP_S_MEM_W2_BUS_START(v)) {
#ifdef EXTENT_DEBUG
		printf("smem: freeing from 0x%lx to 0x%lx\n",
		    CHIP_S_MEM_W3_BUS_START(v), CHIP_S_MEM_W3_BUS_END(v));
#endif
		extent_free(sex, CHIP_S_MEM_W3_BUS_START(v),
		    CHIP_S_MEM_W3_BUS_END(v) - CHIP_S_MEM_W3_BUS_START(v) + 1,
		    EX_NOWAIT);
	} else {
#ifdef EXTENT_DEBUG
		printf("smem: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
		    CHIP_S_MEM_W2_BUS_START(v), CHIP_S_MEM_W2_BUS_END(v));
#endif
	}
#endif

#ifdef EXTENT_DEBUG
	extent_print(sex);
#endif
	CHIP_S_MEM_EXTENT(v) = sex;
}
Example #9
0
void
__C(CHIP,_bus_mem_init)(
    bus_space_tag_t t,
    void *v)
{
    struct extent *ex;

    /*
     * Initialize the bus space tag.
     */

    /* cookie */
    t->abs_cookie =		v;

    /* mapping/unmapping */
    t->abs_map =		__C(CHIP,_mem_map);
    t->abs_unmap =		__C(CHIP,_mem_unmap);
    t->abs_subregion =	__C(CHIP,_mem_subregion);

    t->abs_translate =	__C(CHIP,_mem_translate);
    t->abs_get_window =	__C(CHIP,_mem_get_window);

    /* allocation/deallocation */
    t->abs_alloc =		__C(CHIP,_mem_alloc);
    t->abs_free = 		__C(CHIP,_mem_free);

    /* get kernel virtual address */
    t->abs_vaddr =		__C(CHIP,_mem_vaddr);

    /* mmap for user */
    t->abs_mmap =		__C(CHIP,_mem_mmap);

    /* barrier */
    t->abs_barrier =	__C(CHIP,_mem_barrier);

    /* read (single) */
    t->abs_r_1 =		__C(CHIP,_mem_read_1);
    t->abs_r_2 =		__C(CHIP,_mem_read_2);
    t->abs_r_4 =		__C(CHIP,_mem_read_4);
    t->abs_r_8 =		__C(CHIP,_mem_read_8);

    /* read multiple */
    t->abs_rm_1 =		__C(CHIP,_mem_read_multi_1);
    t->abs_rm_2 =		__C(CHIP,_mem_read_multi_2);
    t->abs_rm_4 =		__C(CHIP,_mem_read_multi_4);
    t->abs_rm_8 =		__C(CHIP,_mem_read_multi_8);

    /* read region */
    t->abs_rr_1 =		__C(CHIP,_mem_read_region_1);
    t->abs_rr_2 =		__C(CHIP,_mem_read_region_2);
    t->abs_rr_4 =		__C(CHIP,_mem_read_region_4);
    t->abs_rr_8 =		__C(CHIP,_mem_read_region_8);

    /* write (single) */
    t->abs_w_1 =		__C(CHIP,_mem_write_1);
    t->abs_w_2 =		__C(CHIP,_mem_write_2);
    t->abs_w_4 =		__C(CHIP,_mem_write_4);
    t->abs_w_8 =		__C(CHIP,_mem_write_8);

    /* write multiple */
    t->abs_wm_1 =		__C(CHIP,_mem_write_multi_1);
    t->abs_wm_2 =		__C(CHIP,_mem_write_multi_2);
    t->abs_wm_4 =		__C(CHIP,_mem_write_multi_4);
    t->abs_wm_8 =		__C(CHIP,_mem_write_multi_8);

    /* write region */
    t->abs_wr_1 =		__C(CHIP,_mem_write_region_1);
    t->abs_wr_2 =		__C(CHIP,_mem_write_region_2);
    t->abs_wr_4 =		__C(CHIP,_mem_write_region_4);
    t->abs_wr_8 =		__C(CHIP,_mem_write_region_8);

    /* set multiple */
    t->abs_sm_1 =		__C(CHIP,_mem_set_multi_1);
    t->abs_sm_2 =		__C(CHIP,_mem_set_multi_2);
    t->abs_sm_4 =		__C(CHIP,_mem_set_multi_4);
    t->abs_sm_8 =		__C(CHIP,_mem_set_multi_8);

    /* set region */
    t->abs_sr_1 =		__C(CHIP,_mem_set_region_1);
    t->abs_sr_2 =		__C(CHIP,_mem_set_region_2);
    t->abs_sr_4 =		__C(CHIP,_mem_set_region_4);
    t->abs_sr_8 =		__C(CHIP,_mem_set_region_8);

    /* copy */
    t->abs_c_1 =		__C(CHIP,_mem_copy_region_1);
    t->abs_c_2 =		__C(CHIP,_mem_copy_region_2);
    t->abs_c_4 =		__C(CHIP,_mem_copy_region_4);
    t->abs_c_8 =		__C(CHIP,_mem_copy_region_8);

    ex = extent_create(__S(__C(CHIP,_bus_mem)), 0x0UL, 0xffffffffUL,
                       (void *)CHIP_MEM_EX_STORE(v), CHIP_MEM_EX_STORE_SIZE(v),
                       EX_NOWAIT|EX_NOCOALESCE);

    CHIP_MEM_EXTENT(v) = ex;
}
Example #10
0
void		__C(CHIP,_io_write_raw_multi_4) __P((void *,
		    bus_space_handle_t, bus_size_t, const u_int8_t *,
		    bus_size_t));
void		__C(CHIP,_io_write_raw_multi_8) __P((void *,
		    bus_space_handle_t, bus_size_t, const u_int8_t *,
		    bus_size_t));

static long
    __C(CHIP,_io_ex_storage)[EXTENT_FIXED_STORAGE_SIZE(8) / sizeof(long)];

static struct alpha_bus_space __C(CHIP,_io_space) = {
	/* cookie */
	NULL,

	/* mapping/unmapping */
	__C(CHIP,_io_map),
	__C(CHIP,_io_unmap),
	__C(CHIP,_io_subregion),

	/* allocation/deallocation */
	__C(CHIP,_io_alloc),
	__C(CHIP,_io_free),

	/* barrier */
	__C(CHIP,_io_barrier),
	
	/* read (single) */
	__C(CHIP,_io_read_1),
	__C(CHIP,_io_read_2),
	__C(CHIP,_io_read_4),
	__C(CHIP,_io_read_8),