Newer
Older
uwuboot / include / pxi.h
@profi200 profi200 on 27 Jun 2017 2 KB Clobber the global namespace less.
#pragma once

#include "mem_map.h"


#ifdef ARM9
#define PXI9_REGS_BASE              (IO_MEM_ARM9_ONLY + 0x8000)
#define REG_PXI_SYNC9               *((vu32*)(PXI9_REGS_BASE + 0x00))
#define REG_PXI_CNT9                *((vu32*)(PXI9_REGS_BASE + 0x04))
#define REG_PXI_SEND9               *((vu32*)(PXI9_REGS_BASE + 0x08))
#define REG_PXI_RECV9               *((vu32*)(PXI9_REGS_BASE + 0x0C))
#endif

#ifdef ARM11
#define PXI11_REGS_BASE             (IO_MEM_ARM9_ARM11 + 0x63000)
#define REG_PXI_SYNC11              *((vu32*)(PXI11_REGS_BASE + 0x00))
#define REG_PXI_CNT11               *((vu32*)(PXI11_REGS_BASE + 0x04))
#define REG_PXI_SEND11              *((vu32*)(PXI11_REGS_BASE + 0x08))
#define REG_PXI_RECV11              *((vu32*)(PXI11_REGS_BASE + 0x0C))
#endif


// Defines for PX_SYNC regs
#define PXI_DATA_RECEIVED(reg)      (reg & 0xFF)
#define PXI_DATA_SENT(reg)          (reg>>8 & 0xFF)
#define PXI_NOTIFY_11               (1u<<29)
#define PXI_NOTIFY_9                (1u<<30)
#define PXI_IRQ_ENABLE              (1u<<31)

// Defines for PX_CNT regs
#define PXI_SEND_FIFO_EMPTY         (1u<<0)
#define PXI_SEND_FIFO_FULL          (1u<<1)
#define PXI_SEND_FIFO_EMPTY_IRQ     (1u<<2)
#define PXI_FLUSH_SEND_FIFO         (1u<<3)
#define PXI_RECV_FIFO_EMPTY         (1u<<8)
#define PXI_RECV_FIFO_FULL          (1u<<9)
#define PXI_RECV_FIFO_NOT_EMPTY_IRQ (1u<<10)
#define PXI_EMPTY_FULL_ERROR        (1u<<14)
#define PXI_ENABLE_SEND_RECV_FIFO   (1u<<15)

// Custom PXI Command/Reply Definitions
#define PXI_CMD_ENABLE_LCDS			0x4C434453
#define PXI_CMD_POWER_OFF			0x504F4646
#define PXI_CMD_REBOOT				0x48326482
#define PXI_CMD_ALLOW_POWER_OFF		0x504F4F4B
#define PXI_CMD_FORBID_POWER_OFF	0x504F4E4F
#define PXI_CMD_FIRM_LAUNCH			0x544F4F42
#define PXI_RPL_FIRM_LAUNCH_READY	0x4F4B6666
#define PXI_RPL_OK					0x4F4B4F4B
#define PXI_RPL_HOME_PRESSED		0x484F4D45
#define PXI_RPL_HOME_HELD			0x484F4D22
#define PXI_RPL_POWER_PRESSED		0x504F5752


void PXI_init(void);
void PXI_sendWord(u32 val);
bool PXI_trySendWord(u32 val);
u32  PXI_recvWord(void);
u32 PXI_tryRecvWord(bool *success);