Add support for bus_space_read_region and bus_space_write_region. This is
needed for the dwc USB controller driver. Sponsored by: ABT Systems Ltd
This commit is contained in:
parent
ab4d08c3d3
commit
edc2af7807
@ -49,6 +49,15 @@ void generic_bs_rm_4(void *, bus_space_handle_t, bus_size_t, uint32_t *,
|
||||
void generic_bs_rm_8(void *, bus_space_handle_t, bus_size_t, uint64_t *,
|
||||
bus_size_t);
|
||||
|
||||
void generic_bs_rr_1(void *, bus_space_handle_t, bus_size_t, uint8_t *,
|
||||
bus_size_t);
|
||||
void generic_bs_rr_2(void *, bus_space_handle_t, bus_size_t, uint16_t *,
|
||||
bus_size_t);
|
||||
void generic_bs_rr_4(void *, bus_space_handle_t, bus_size_t, uint32_t *,
|
||||
bus_size_t);
|
||||
void generic_bs_rr_8(void *, bus_space_handle_t, bus_size_t, uint64_t *,
|
||||
bus_size_t);
|
||||
|
||||
void generic_bs_w_1(void *, bus_space_handle_t, bus_size_t, uint8_t);
|
||||
void generic_bs_w_2(void *, bus_space_handle_t, bus_size_t, uint16_t);
|
||||
void generic_bs_w_4(void *, bus_space_handle_t, bus_size_t, uint32_t);
|
||||
@ -63,6 +72,15 @@ void generic_bs_wm_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *,
|
||||
void generic_bs_wm_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *,
|
||||
bus_size_t);
|
||||
|
||||
void generic_bs_wr_1(void *, bus_space_handle_t, bus_size_t, const uint8_t *,
|
||||
bus_size_t);
|
||||
void generic_bs_wr_2(void *, bus_space_handle_t, bus_size_t, const uint16_t *,
|
||||
bus_size_t);
|
||||
void generic_bs_wr_4(void *, bus_space_handle_t, bus_size_t, const uint32_t *,
|
||||
bus_size_t);
|
||||
void generic_bs_wr_8(void *, bus_space_handle_t, bus_size_t, const uint64_t *,
|
||||
bus_size_t);
|
||||
|
||||
static int
|
||||
generic_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flags,
|
||||
bus_space_handle_t *bshp)
|
||||
@ -126,6 +144,12 @@ struct bus_space memmap_bus = {
|
||||
.bs_rm_4 = generic_bs_rm_4,
|
||||
.bs_rm_8 = generic_bs_rm_8,
|
||||
|
||||
/* read region */
|
||||
.bs_rr_1 = generic_bs_rr_1,
|
||||
.bs_rr_2 = generic_bs_rr_2,
|
||||
.bs_rr_4 = generic_bs_rr_4,
|
||||
.bs_rr_8 = generic_bs_rr_8,
|
||||
|
||||
/* write single */
|
||||
.bs_w_1 = generic_bs_w_1,
|
||||
.bs_w_2 = generic_bs_w_2,
|
||||
@ -139,10 +163,10 @@ struct bus_space memmap_bus = {
|
||||
.bs_wm_8 = generic_bs_wm_8,
|
||||
|
||||
/* write region */
|
||||
.bs_wr_1 = NULL,
|
||||
.bs_wr_2 = NULL,
|
||||
.bs_wr_4 = NULL,
|
||||
.bs_wr_8 = NULL,
|
||||
.bs_wr_1 = generic_bs_wr_1,
|
||||
.bs_wr_2 = generic_bs_wr_2,
|
||||
.bs_wr_4 = generic_bs_wr_4,
|
||||
.bs_wr_8 = generic_bs_wr_8,
|
||||
|
||||
/* set multiple */
|
||||
.bs_sm_1 = NULL,
|
||||
|
@ -133,6 +133,90 @@ ENTRY(generic_bs_rm_8)
|
||||
2: ret
|
||||
END(generic_bs_rm_8)
|
||||
|
||||
ENTRY(generic_bs_rr_1)
|
||||
/* Is there is anything to read. */
|
||||
cbz x4, 2f
|
||||
|
||||
/* Calculate the device address. */
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Read the data. */
|
||||
1: ldrb w1, [x0], #1
|
||||
strb w1, [x3], #1
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_rr_1)
|
||||
|
||||
ENTRY(generic_bs_rr_2)
|
||||
/* Is there is anything to read. */
|
||||
cbz x4, 2f
|
||||
|
||||
/* Calculate the device address. */
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Read the data. */
|
||||
1: ldrh w1, [x0], #2
|
||||
strh w1, [x3], #2
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_rr_2)
|
||||
|
||||
ENTRY(generic_bs_rr_4)
|
||||
/* Is there is anything to read. */
|
||||
cbz x4, 2f
|
||||
|
||||
/* Calculate the device address. */
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Read the data. */
|
||||
1: ldr w1, [x0], #4
|
||||
str w1, [x3], #4
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_rr_4)
|
||||
|
||||
ENTRY(generic_bs_rr_8)
|
||||
/* Is there is anything to read. */
|
||||
cbz x4, 2f
|
||||
|
||||
/* Calculate the device address. */
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Read the data. */
|
||||
1: ldr x1, [x0], #8
|
||||
str x1, [x3], #8
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_rr_8)
|
||||
|
||||
|
||||
ENTRY(generic_bs_w_1)
|
||||
strb w3, [x1, x2]
|
||||
@ -233,3 +317,83 @@ ENTRY(generic_bs_wm_8)
|
||||
|
||||
2: ret
|
||||
END(generic_bs_wm_8)
|
||||
|
||||
ENTRY(generic_bs_wr_1)
|
||||
/* Is there is anything to write. */
|
||||
cbz x4, 2f
|
||||
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Write the data */
|
||||
1: ldrb w1, [x3], #1
|
||||
strb w1, [x0], #1
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_wr_1)
|
||||
|
||||
ENTRY(generic_bs_wr_2)
|
||||
/* Is there is anything to write. */
|
||||
cbz x4, 2f
|
||||
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Write the data */
|
||||
1: ldrh w1, [x3], #2
|
||||
strh w1, [x0], #2
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_wr_2)
|
||||
|
||||
ENTRY(generic_bs_wr_4)
|
||||
/* Is there is anything to write. */
|
||||
cbz x4, 2f
|
||||
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Write the data */
|
||||
1: ldr w1, [x3], #4
|
||||
str w1, [x0], #4
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_wr_4)
|
||||
|
||||
ENTRY(generic_bs_wr_8)
|
||||
/* Is there is anything to write. */
|
||||
cbz x4, 2f
|
||||
|
||||
add x0, x1, x2
|
||||
/*
|
||||
* x0 = The device address.
|
||||
* x3 = The kernel address.
|
||||
* x4 = Count
|
||||
*/
|
||||
|
||||
/* Write the data */
|
||||
1: ldr x1, [x3], #8
|
||||
str x1, [x0], #8
|
||||
subs x4, x4, #1
|
||||
b.ne 1b
|
||||
|
||||
2: ret
|
||||
END(generic_bs_wr_8)
|
||||
|
Loading…
x
Reference in New Issue
Block a user