Add back transmitter_control.

This commit is contained in:
Andy Nguyen
2026-06-30 10:54:41 +02:00
parent 975e57ccd2
commit e727a2fc3b
9 changed files with 69 additions and 34 deletions

View File

@@ -4,6 +4,12 @@
#include "../shellcode_hv/shellcode_hv.h"
#include "utils.h"
#define DIG1TRANSMITTERCONTROL 0x4c
#define TRANSMITTER_CONTROL_ENABLE 1
#define TRANSMITTER_CONTROL_SET_VOLTAGE_AND_PREEMPASIS 11
int (*transmitter_control)(int cmd, void *control) = NULL;
int (*mp3_initialize)(int vmid) = NULL;
int (*mp3_invoke)(int cmd_id, void *req, void *rsp) = NULL;
@@ -28,6 +34,30 @@ typedef struct {
uint8_t reserved[64];
} __attribute__((packed)) SceSblHvShm;
typedef struct {
uint8_t lanenum;
uint32_t rate;
uint32_t pad;
uint32_t lane_setting_1;
uint32_t lane_setting_2;
} transmitter_args;
struct dig_transmitter_control_parameters_v1_6 {
uint8_t phyid;
uint8_t action;
union {
uint8_t digmode;
uint8_t dplaneset;
} mode_laneset;
uint8_t lanenum;
uint32_t symclk_10khz;
uint8_t hpdsel;
uint8_t digfe_sel;
uint8_t connobj_id;
uint8_t reserved;
uint32_t reserved1;
};
static struct linux_info info;
static int mp3_req[1281], mp3_rsp[1282];
@@ -55,6 +85,20 @@ static uint64_t get_hv_shm(void) {
return -1;
}
static int dp_enable_link_phy(int lanenum, int linkrate) {
struct dig_transmitter_control_parameters_v1_6 params = {};
params.phyid = 0;
params.action = TRANSMITTER_CONTROL_ENABLE;
params.mode_laneset.digmode = 0;
params.lanenum = lanenum;
params.symclk_10khz = 27000 * linkrate / 10;
params.hpdsel = 0;
params.digfe_sel = 0;
params.connobj_id = 0;
return transmitter_control(DIG1TRANSMITTERCONTROL, &params);
}
static int mp3_set_hdcp_packet(int be, int mode) {
mp3_req[0] = be;
mp3_req[1] = mode;
@@ -132,6 +176,9 @@ void boot_linux(void) {
memcpy((void *)PHYS_TO_DMAP(0xC0000), (void *)g_vbios, 0x10000);
// Enable DP phys link.
dp_enable_link_phy(4, 30);
// Initialize hdcp in mp3.
mp3_initialize(0);
mp3_set_hdcp_packet(0, 1);

View File

@@ -14,6 +14,7 @@ typedef struct {
uint64_t fun_hv_iommu_wait_completion;
uint64_t fun_smp_rendezvous;
uint64_t fun_smp_no_rendevous_barrier;
uint64_t fun_transmitter_control;
uint64_t fun_mp3_initialize;
uint64_t fun_mp3_invoke;
uint64_t g_vbios;

View File

@@ -104,6 +104,7 @@ void init_global_pointers(volatile shellcode_kernel_args *args_ptr) {
smp_no_rendevous_barrier =
(void (*)(void *))args.fun_smp_no_rendevous_barrier;
transmitter_control = (int (*)(int, void *))args.fun_transmitter_control;
mp3_initialize = (int (*)(int))args.fun_mp3_initialize;
mp3_invoke = (int (*)(int, void *, void *))args.fun_mp3_invoke;
g_vbios = args.g_vbios;

View File

@@ -8,6 +8,7 @@ extern void (*smp_rendezvous)(void (*setup_func)(void *),
void (*action_func)(void *),
void (*teardown_func)(void *), void *arg);
extern void (*smp_no_rendevous_barrier)(void *);
extern int (*transmitter_control)(int cmd, void *control);
extern int (*mp3_initialize)(int vmid);
extern int (*mp3_invoke)(int cmd_id, void *req, void *rsp);
extern uint64_t g_vbios;