#ifndef _MIPS_BUS_SPACE_DEFS_H_
#define _MIPS_BUS_SPACE_DEFS_H_
#include <sys/types.h>
#ifdef _KERNEL
#define __BUS_SPACE_HAS_STREAM_METHODS 1
#if defined(DEBUG) && !defined(BUS_SPACE_DEBUG)
#define BUS_SPACE_DEBUG
#endif
#ifdef BUS_SPACE_DEBUG
#include <sys/systm.h>
#define __BUS_SPACE_ALIGNED_ADDRESS(p, t) \
((((u_long)(p)) & (sizeof(t)-1)) == 0)
#define __BUS_SPACE_ADDRESS_SANITY(p, t, d) \
({ \
if (__BUS_SPACE_ALIGNED_ADDRESS((p), t) == 0) { \
printf("%s 0x%lx not aligned to %lu bytes %s:%d\n", \
d, (u_long)(p), (u_long)sizeof(t), \
__FILE__, __LINE__); \
} \
(void) 0; \
})
#define BUS_SPACE_ALIGNED_POINTER(p, t) __BUS_SPACE_ALIGNED_ADDRESS(p, t)
#else
#define __BUS_SPACE_ADDRESS_SANITY(p, t, d) (void) 0
#define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
#endif
#endif
struct mips_bus_space_translation;
#ifdef __mips_n32
typedef int64_t bus_addr_t;
typedef uint64_t bus_size_t;
#define PRIxBUSADDR PRIx64
#define PRIxBUSSIZE PRIx64
#define PRIuBUSSIZE PRIu64
#else
typedef paddr_t bus_addr_t;
typedef psize_t bus_size_t;
#define PRIxBUSADDR PRIxPADDR
#define PRIxBUSSIZE PRIxPSIZE
#define PRIuBUSSIZE PRIuPSIZE
#endif
typedef struct mips_bus_space *bus_space_tag_t;
#if defined(__mips_n32) && defined(_MIPS_PADDR_T_64BIT)
typedef int64_t bus_space_handle_t;
#define PRIxBSH PRIx64
#else
typedef intptr_t bus_space_handle_t;
#define PRIxBSH PRIxPTR
#endif
struct mips_bus_space {
void *bs_cookie;
int (*bs_map)(void *, bus_addr_t, bus_size_t, int,
bus_space_handle_t *, int);
void (*bs_unmap)(void *, bus_space_handle_t, bus_size_t,
int);
int (*bs_subregion)(void *, bus_space_handle_t, bus_size_t,
bus_size_t, bus_space_handle_t *);
int (*bs_translate)(void *, bus_addr_t, bus_size_t, int,
struct mips_bus_space_translation *);
int (*bs_get_window)(void *, int,
struct mips_bus_space_translation *);
int (*bs_alloc)(void *, bus_addr_t, bus_addr_t,
bus_size_t, bus_size_t, bus_size_t, int,
bus_addr_t *, bus_space_handle_t *);
void (*bs_free)(void *, bus_space_handle_t, bus_size_t);
void * (*bs_vaddr)(void *, bus_space_handle_t);
paddr_t (*bs_mmap)(void *, bus_addr_t, off_t, int, int);
void (*bs_barrier)(void *, bus_space_handle_t,
bus_size_t, bus_size_t, int);
uint8_t (*bs_r_1)(void *, bus_space_handle_t, bus_size_t);
uint16_t (*bs_r_2)(void *, bus_space_handle_t, bus_size_t);
uint32_t (*bs_r_4)(void *, bus_space_handle_t, bus_size_t);
uint64_t (*bs_r_8)(void *, bus_space_handle_t, bus_size_t);
void (*bs_rm_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t *, bus_size_t);
void (*bs_rm_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t *, bus_size_t);
void (*bs_rm_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t *, bus_size_t);
void (*bs_rm_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t *, bus_size_t);
void (*bs_rr_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t *, bus_size_t);
void (*bs_rr_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t *, bus_size_t);
void (*bs_rr_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t *, bus_size_t);
void (*bs_rr_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t *, bus_size_t);
void (*bs_w_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t);
void (*bs_w_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t);
void (*bs_w_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t);
void (*bs_w_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t);
void (*bs_wm_1)(void *, bus_space_handle_t, bus_size_t,
const uint8_t *, bus_size_t);
void (*bs_wm_2)(void *, bus_space_handle_t, bus_size_t,
const uint16_t *, bus_size_t);
void (*bs_wm_4)(void *, bus_space_handle_t, bus_size_t,
const uint32_t *, bus_size_t);
void (*bs_wm_8)(void *, bus_space_handle_t, bus_size_t,
const uint64_t *, bus_size_t);
void (*bs_wr_1)(void *, bus_space_handle_t, bus_size_t,
const uint8_t *, bus_size_t);
void (*bs_wr_2)(void *, bus_space_handle_t, bus_size_t,
const uint16_t *, bus_size_t);
void (*bs_wr_4)(void *, bus_space_handle_t, bus_size_t,
const uint32_t *, bus_size_t);
void (*bs_wr_8)(void *, bus_space_handle_t, bus_size_t,
const uint64_t *, bus_size_t);
uint8_t (*bs_rs_1)(void *, bus_space_handle_t, bus_size_t);
uint16_t (*bs_rs_2)(void *, bus_space_handle_t, bus_size_t);
uint32_t (*bs_rs_4)(void *, bus_space_handle_t, bus_size_t);
uint64_t (*bs_rs_8)(void *, bus_space_handle_t, bus_size_t);
void (*bs_rms_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t *, bus_size_t);
void (*bs_rms_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t *, bus_size_t);
void (*bs_rms_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t *, bus_size_t);
void (*bs_rms_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t *, bus_size_t);
void (*bs_rrs_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t *, bus_size_t);
void (*bs_rrs_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t *, bus_size_t);
void (*bs_rrs_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t *, bus_size_t);
void (*bs_rrs_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t *, bus_size_t);
void (*bs_ws_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t);
void (*bs_ws_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t);
void (*bs_ws_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t);
void (*bs_ws_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t);
void (*bs_wms_1)(void *, bus_space_handle_t, bus_size_t,
const uint8_t *, bus_size_t);
void (*bs_wms_2)(void *, bus_space_handle_t, bus_size_t,
const uint16_t *, bus_size_t);
void (*bs_wms_4)(void *, bus_space_handle_t, bus_size_t,
const uint32_t *, bus_size_t);
void (*bs_wms_8)(void *, bus_space_handle_t, bus_size_t,
const uint64_t *, bus_size_t);
void (*bs_wrs_1)(void *, bus_space_handle_t, bus_size_t,
const uint8_t *, bus_size_t);
void (*bs_wrs_2)(void *, bus_space_handle_t, bus_size_t,
const uint16_t *, bus_size_t);
void (*bs_wrs_4)(void *, bus_space_handle_t, bus_size_t,
const uint32_t *, bus_size_t);
void (*bs_wrs_8)(void *, bus_space_handle_t, bus_size_t,
const uint64_t *, bus_size_t);
void (*bs_sm_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t, bus_size_t);
void (*bs_sm_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t, bus_size_t);
void (*bs_sm_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t, bus_size_t);
void (*bs_sm_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t, bus_size_t);
void (*bs_sr_1)(void *, bus_space_handle_t, bus_size_t,
uint8_t, bus_size_t);
void (*bs_sr_2)(void *, bus_space_handle_t, bus_size_t,
uint16_t, bus_size_t);
void (*bs_sr_4)(void *, bus_space_handle_t, bus_size_t,
uint32_t, bus_size_t);
void (*bs_sr_8)(void *, bus_space_handle_t, bus_size_t,
uint64_t, bus_size_t);
void (*bs_c_1)(void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t);
void (*bs_c_2)(void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t);
void (*bs_c_4)(void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t);
void (*bs_c_8)(void *, bus_space_handle_t, bus_size_t,
bus_space_handle_t, bus_size_t, bus_size_t);
};
struct mips_bus_space_translation {
bus_addr_t mbst_bus_start;
bus_addr_t mbst_bus_end;
paddr_t mbst_sys_start;
paddr_t mbst_sys_end;
int mbst_align_stride;
int mbst_flags;
};
#define BUS_SPACE_MAP_CACHEABLE 0x01
#define BUS_SPACE_MAP_LINEAR 0x02
#define BUS_SPACE_MAP_PREFETCHABLE 0x04
#ifdef _KERNEL
#define BUS_SPACE_BARRIER_READ 0x01
#define BUS_SPACE_BARRIER_WRITE 0x02
#endif
#endif