audio_core/hle,lle: implement SetSemaphore
This commit is contained in:
parent
4671ccf416
commit
c9736b3300
|
@ -47,6 +47,12 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual bool RecvDataIsReady(u32 register_number) const = 0;
|
virtual bool RecvDataIsReady(u32 register_number) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the DSP semaphore register
|
||||||
|
* @param semaphore_value the value set to the semaphore register
|
||||||
|
*/
|
||||||
|
virtual void SetSemaphore(u16 semaphore_value) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads `length` bytes from the DSP pipe identified with `pipe_number`.
|
* Reads `length` bytes from the DSP pipe identified with `pipe_number`.
|
||||||
* @note Can read up to the maximum value of a u16 in bytes (65,535).
|
* @note Can read up to the maximum value of a u16 in bytes (65,535).
|
||||||
|
|
|
@ -375,6 +375,10 @@ bool DspHle::RecvDataIsReady(u32 register_number) const {
|
||||||
return impl->RecvDataIsReady(register_number);
|
return impl->RecvDataIsReady(register_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DspHle::SetSemaphore(u16 semaphore_value) {
|
||||||
|
// Do nothing in HLE
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<u8> DspHle::PipeRead(DspPipe pipe_number, u32 length) {
|
std::vector<u8> DspHle::PipeRead(DspPipe pipe_number, u32 length) {
|
||||||
return impl->PipeRead(pipe_number, length);
|
return impl->PipeRead(pipe_number, length);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ public:
|
||||||
|
|
||||||
u16 RecvData(u32 register_number) override;
|
u16 RecvData(u32 register_number) override;
|
||||||
bool RecvDataIsReady(u32 register_number) const override;
|
bool RecvDataIsReady(u32 register_number) const override;
|
||||||
|
void SetSemaphore(u16 semaphore_value) override;
|
||||||
std::vector<u8> PipeRead(DspPipe pipe_number, u32 length) override;
|
std::vector<u8> PipeRead(DspPipe pipe_number, u32 length) override;
|
||||||
std::size_t GetPipeReadableSize(DspPipe pipe_number) const override;
|
std::size_t GetPipeReadableSize(DspPipe pipe_number) const override;
|
||||||
void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer) override;
|
void PipeWrite(DspPipe pipe_number, const std::vector<u8>& buffer) override;
|
||||||
|
|
|
@ -27,6 +27,10 @@ bool DspLle::RecvDataIsReady(u32 register_number) const {
|
||||||
return impl->teakra.RecvDataIsReady(register_number);
|
return impl->teakra.RecvDataIsReady(register_number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DspLle::SetSemaphore(u16 semaphore_value) {
|
||||||
|
impl->teakra.SetSemaphore(semaphore_value);
|
||||||
|
}
|
||||||
|
|
||||||
DspLle::DspLle() : impl(std::make_unique<Impl>()) {}
|
DspLle::DspLle() : impl(std::make_unique<Impl>()) {}
|
||||||
DspLle::~DspLle() = default;
|
DspLle::~DspLle() = default;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ public:
|
||||||
|
|
||||||
u16 RecvData(u32 register_number) override;
|
u16 RecvData(u32 register_number) override;
|
||||||
bool RecvDataIsReady(u32 register_number) const override;
|
bool RecvDataIsReady(u32 register_number) const override;
|
||||||
|
void SetSemaphore(u16 semaphore_value) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Impl;
|
struct Impl;
|
||||||
|
|
|
@ -46,6 +46,8 @@ void DSP_DSP::SetSemaphore(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp(ctx, 0x07, 1, 0);
|
IPC::RequestParser rp(ctx, 0x07, 1, 0);
|
||||||
const u16 semaphore_value = rp.Pop<u16>();
|
const u16 semaphore_value = rp.Pop<u16>();
|
||||||
|
|
||||||
|
system.DSP().SetSemaphore(semaphore_value);
|
||||||
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
|
||||||
|
|
Reference in New Issue