MCPcopy Create free account
hub / github.com/RPCSX/rpcsx / execute

Method execute

kernel/cellos/src/sys_uart.cpp:233–266  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

231 }
232
233 void execute(vuart_av_thread &vuart, const void *pkt_buf) override {
234 const auto pkt = static_cast<const ps3av_pkt_get_bksv *>(pkt_buf);
235
236 if (vuart.get_reply_buf_free_size() < sizeof(ps3av_pkt_reply_hdr)) {
237 vuart.write_resp(pkt->hdr.cid, PS3AV_STATUS_BUFFER_OVERFLOW);
238 return;
239 }
240
241 if (pkt->avport > static_cast<u16>(UartAudioAvport::HDMI_1)) {
242 vuart.write_resp(pkt->hdr.cid, PS3AV_STATUS_INVALID_PORT);
243 return;
244 }
245
246 if (pkt->avport == static_cast<u16>(UartAudioAvport::HDMI_1) &&
247 !g_cfg.core.debug_console_mode) {
248 vuart.write_resp<true>(pkt->hdr.cid,
249 PS3AV_STATUS_SYSCON_COMMUNICATE_FAIL);
250 return;
251 }
252
253 ps3av_pkt_get_bksv_reply reply{};
254 reply.avport = pkt->avport;
255 u16 pkt_size = offsetof(ps3av_pkt_get_bksv_reply, ksv_arr);
256
257 if (vuart.hdmi_behavior_mode == PS3AV_HDMI_BEHAVIOR_NORMAL ||
258 !(vuart.hdmi_behavior_mode & PS3AV_HDMI_BEHAVIOR_HDCP_OFF)) {
259 reply.ksv_cnt = 1;
260 memcpy(reply.ksv_arr[0], PS3AV_BKSV_VALUE, sizeof(PS3AV_BKSV_VALUE));
261 pkt_size = (pkt_size + 5 * reply.ksv_cnt + 3) & 0xFFFC;
262 }
263
264 vuart.write_resp<true>(pkt->hdr.cid, PS3AV_STATUS_SUCCESS, &reply,
265 pkt_size);
266 }
267};
268
269struct av_enable_event_cmd : public ps3av_cmd {

Callers

nothing calls this directly

Calls 2

write_respMethod · 0.80

Tested by

no test coverage detected