1.1 --- a/pkg/devices/lib/msc/src/jz4780.cc Fri Feb 16 23:11:25 2024 +0100
1.2 +++ b/pkg/devices/lib/msc/src/jz4780.cc Sat Feb 17 23:04:12 2024 +0100
1.3 @@ -21,28 +21,20 @@
1.4
1.5 #include <l4/sys/err.h>
1.6
1.7 +#include "msc-defs.h"
1.8 #include "msc-jz4780.h"
1.9
1.10
1.11
1.12 -// Register locations for each channel.
1.13 -
1.14 -enum Regs : unsigned
1.15 -{
1.16 - // Channel block size/offset.
1.17 -
1.18 - Msc_channel_offset = 0x10000,
1.19 -};
1.20 -
1.21 -
1.22 -
1.23 // Channel abstraction.
1.24
1.25 Msc_jz4780_channel::Msc_jz4780_channel(l4_addr_t msc_start, l4_addr_t addr,
1.26 - l4_cap_idx_t irq, Dma_jz4780_channel *dma,
1.27 + l4_cap_idx_t irq,
1.28 + Cpm_chip *cpm, enum Clock_identifiers clock,
1.29 + Dma_jz4780_channel *dma,
1.30 enum Dma_jz4780_request_type request_type_in,
1.31 enum Dma_jz4780_request_type request_type_out)
1.32 -: Msc_channel(msc_start, addr, irq),
1.33 +: Msc_channel(msc_start, addr, irq, cpm, clock),
1.34 _dma(dma),
1.35 _request_type_in(request_type_in),
1.36 _request_type_out(request_type_out)
1.37 @@ -77,25 +69,20 @@
1.38
1.39 // Peripheral abstraction.
1.40
1.41 -Msc_jz4780_chip::Msc_jz4780_chip(l4_addr_t msc_start, l4_addr_t start, l4_addr_t end)
1.42 -: Msc_chip(msc_start, start, end)
1.43 +Msc_jz4780_chip::Msc_jz4780_chip(l4_addr_t msc_start, l4_addr_t start,
1.44 + l4_addr_t end, Cpm_chip *cpm)
1.45 +: Msc_chip(msc_start, start, end, cpm)
1.46 {
1.47 }
1.48
1.49 Msc_channel *Msc_jz4780_chip::get_channel(uint8_t channel, l4_cap_idx_t irq,
1.50 Dma_jz4780_channel *dma)
1.51 {
1.52 - const enum Dma_jz4780_request_type in_types[] =
1.53 - {Dma_request_msc0_in, Dma_request_msc1_in, Dma_request_msc2_in};
1.54 -
1.55 - const enum Dma_jz4780_request_type out_types[] =
1.56 - {Dma_request_msc0_out, Dma_request_msc1_out, Dma_request_msc2_out};
1.57 -
1.58 if (channel < num_channels())
1.59 return new Msc_jz4780_channel(_msc_start + channel * Msc_channel_offset,
1.60 _start + channel * Msc_channel_offset,
1.61 - irq, dma,
1.62 - in_types[channel], out_types[channel]);
1.63 + irq, _cpm, _clocks[channel], dma,
1.64 + _in_types[channel], _out_types[channel]);
1.65 else
1.66 throw -L4_EINVAL;
1.67 }
1.68 @@ -104,9 +91,11 @@
1.69
1.70 // C language interface functions.
1.71
1.72 -void *jz4780_msc_init(l4_addr_t msc_start, l4_addr_t start, l4_addr_t end)
1.73 +void *jz4780_msc_init(l4_addr_t msc_start, l4_addr_t start, l4_addr_t end,
1.74 + void *cpm)
1.75 {
1.76 - return (void *) new Msc_jz4780_chip(msc_start, start, end);
1.77 + return (void *) new Msc_jz4780_chip(msc_start, start, end,
1.78 + static_cast<Cpm_jz4780_chip *>(cpm));
1.79 }
1.80
1.81 void *jz4780_msc_get_channel(void *msc, uint8_t channel, l4_cap_idx_t irq,
1.82 @@ -132,9 +121,9 @@
1.83 }
1.84
1.85 uint32_t jz4780_msc_read_blocks(void *msc_channel, uint8_t card,
1.86 - l4re_dma_space_dma_addr_t paddr,
1.87 + struct dma_region *region,
1.88 uint32_t block_address, uint32_t block_count)
1.89 {
1.90 - return static_cast<Msc_channel *>(msc_channel)->read_blocks(card, paddr,
1.91 + return static_cast<Msc_channel *>(msc_channel)->read_blocks(card, region,
1.92 block_address, block_count);
1.93 }