RetroArch
|
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "asm.h"
#include "irq.h"
#include "processor.h"
#include "spinlock.h"
#include "exi.h"
Classes | |
struct | _lck_dev |
struct | _exibus_priv |
Macros | |
#define | EXI_LOCK_DEVS 32 |
#define | EXI_MAX_CHANNELS 3 |
#define | EXI_MAX_DEVICES 3 |
#define | EXI_DEVICE0 0x0080 |
#define | EXI_DEVICE1 0x0100 |
#define | EXI_DEVICE2 0x0200 |
#define | EXI_EXI_IRQ 0x0002 |
#define | EXI_TC_IRQ 0x0008 |
#define | EXI_EXT_IRQ 0x0800 |
#define | EXI_EXT_BIT 0x1000 |
#define | _SHIFTL(v, s, w) ((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s))) |
#define | _SHIFTR(v, s, w) ((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1))) |
Typedefs | |
typedef struct _exibus_priv | exibus_priv |
Functions | |
static void | __exi_irq_handler (u32, void *) |
static void | __tc_irq_handler (u32, void *) |
static void | __ext_irq_handler (u32, void *) |
static __inline__ void | __exi_clearirqs (s32 nChn, u32 nEXIIrq, u32 nTCIrq, u32 nEXTIrq) |
static __inline__ void | __exi_setinterrupts (s32 nChn, exibus_priv *exi) |
static void | __exi_initmap (exibus_priv *exim) |
static s32 | __exi_probe (s32 nChn) |
static s32 | __exi_attach (s32 nChn, EXICallback ext_cb) |
s32 | EXI_Lock (s32 nChn, s32 nDev, EXICallback unlockCB) |
Try to lock the desired EXI channel on the given device. More... | |
s32 | EXI_Unlock (s32 nChn) |
Unlock the desired EXI channel. More... | |
s32 | EXI_Select (s32 nChn, s32 nDev, s32 nFrq) |
Selects the spedified EXI channel on the given device with the given frequency. More... | |
s32 | EXI_SelectSD (s32 nChn, s32 nDev, s32 nFrq) |
Performs a special select, for SD cards or adapters respectively, on the given device with the given frequence. More... | |
s32 | EXI_Deselect (s32 nChn) |
Deselects the EXI channel. More... | |
s32 | EXI_Sync (s32 nChn) |
Synchronize or finish respectively the last EXI transfer. More... | |
s32 | EXI_Imm (s32 nChn, void *pData, u32 nLen, u32 nMode, EXICallback tc_cb) |
Initializes an immediate mode EXI transfer. More... | |
s32 | EXI_ImmEx (s32 nChn, void *pData, u32 nLen, u32 nMode) |
Initializes an extended immediate mode EXI transfer. More... | |
s32 | EXI_Dma (s32 nChn, void *pData, u32 nLen, u32 nMode, EXICallback tc_cb) |
Initializes a DMA mode EXI transfer. More... | |
s32 | EXI_GetState (s32 nChn) |
Get the EXI state. More... | |
static s32 | __unlocked_handler (s32 nChn, s32 nDev) |
s32 | EXI_GetID (s32 nChn, s32 nDev, u32 *nId) |
Get the ID of the connected EXI device on the given channel. More... | |
s32 | EXI_Attach (s32 nChn, EXICallback ext_cb) |
Attach the device on the given channel. More... | |
s32 | EXI_Detach (s32 nChn) |
Detach the device on the given channel. More... | |
EXICallback | EXI_RegisterEXICallback (s32 nChn, EXICallback exi_cb) |
Register a callback function in the EXI driver for the EXI interrupt. More... | |
s32 | EXI_Probe (s32 nChn) |
Probes the EXI channel. More... | |
s32 | EXI_ProbeEx (s32 nChn) |
Performs an extended probe of the EXI channel. More... | |
void | EXI_ProbeReset () |
Resets certain internal flags and counters and performs a probe on all 3 channels. More... | |
void | __exi_init () |
static s32 | __probebarnacle (s32 chn, u32 dev, u32 *rev) |
static s32 | __queuelength () |
void | __SYS_EnableBarnacle (s32 chn, u32 dev) |
s32 | InitializeUART () |
s32 | WriteUARTN (void *buf, u32 len) |
Variables | |
static lwp_queue | _lckdev_queue |
static struct _lck_dev | lckdevs [EXI_LOCK_DEVS] |
static exibus_priv | eximap [EXI_MAX_CHANNELS] |
static u64 | last_exi_idtime [EXI_MAX_CHANNELS] |
static u32 | exi_id_serport1 = 0 |
static u32 | exi_uart_chan = EXI_CHANNEL_0 |
static u32 | exi_uart_dev = EXI_DEVICE_0 |
static u32 | exi_uart_barnacle_enabled = 0 |
static u32 | exi_uart_enabled = 0 |
#define EXI_DEVICE0 0x0080 |
#define EXI_DEVICE1 0x0100 |
#define EXI_DEVICE2 0x0200 |
#define EXI_EXI_IRQ 0x0002 |
#define EXI_EXT_BIT 0x1000 |
#define EXI_EXT_IRQ 0x0800 |
#define EXI_LOCK_DEVS 32 |
#define EXI_MAX_CHANNELS 3 |
#define EXI_MAX_DEVICES 3 |
#define EXI_TC_IRQ 0x0008 |
typedef struct _exibus_priv exibus_priv |
|
static |
|
static |
|
static |
|
static |
s32 EXI_Attach | ( | s32 | nChn, |
EXICallback | ext_cb | ||
) |
Attach the device on the given channel.
[in] | nChn | EXI channel to select |
[in] | ext_cb | pointer to callback to call when device is physically removed. |
Deselects the EXI channel.
[in] | nChn | EXI channel to deselect |
Detach the device on the given channel.
[in] | nChn | EXI channel to select |
Initializes a DMA mode EXI transfer.
[in] | nChn | EXI channel to select |
[in,out] | pData | pointer to a buffer to read/copy from/to data. |
[in] | nLen | lenght of data to transfer. |
[in] | nMode | direction of transferoperation(EXI_READ,EXI_WRITE,EXI_READWRITE) |
[in] | tc_cb | pointer to a callback to call when transfer has completed. May be NULL. |
Get the ID of the connected EXI device on the given channel.
[in] | nChn | EXI channel to select |
[in] | nDev | EXI device to select |
[out] | nId | EXI device ID to return. |
Get the EXI state.
[in] | nChn | EXI channel to select |
Initializes an immediate mode EXI transfer.
[in] | nChn | EXI channel to select |
[in,out] | pData | pointer to a buffer to read/copy from/to data. |
[in] | nLen | lenght of data to transfer <=4. |
[in] | nMode | direction of transferoperation(EXI_READ,EXI_WRITE,EXI_READWRITE) |
[in] | tc_cb | pointer to a callback to call when transfer has completed. May be NULL. |
Initializes an extended immediate mode EXI transfer.
[in] | nChn | EXI channel to select |
[in,out] | pData | pointer to a buffer to read/copy from/to data. |
[in] | nLen | lenght of data to transfer. |
[in] | nMode | direction of transferoperation(EXI_READ,EXI_WRITE,EXI_READWRITE) |
s32 EXI_Lock | ( | s32 | nChn, |
s32 | nDev, | ||
EXICallback | unlockCB | ||
) |
Try to lock the desired EXI channel on the given device.
[in] | nChn | EXI channel to lock |
[in] | nDev | EXI device to lock |
[in] | unlockCB | pointer to callback to call when EXI_Unlock() is called. Thus allowing us a small way of mutual exclusion. |
Probes the EXI channel.
[in] | nChn | EXI channel to probe |
Performs an extended probe of the EXI channel.
[in] | nChn | EXI channel to probe |
void EXI_ProbeReset | ( | ) |
Resets certain internal flags and counters and performs a probe on all 3 channels.
EXICallback EXI_RegisterEXICallback | ( | s32 | nChn, |
EXICallback | exi_cb | ||
) |
Register a callback function in the EXI driver for the EXI interrupt.
[in] | nChn | EXI channel to select |
[in] | exi_cb | pointer to the function which to call when EXI interrupt has triggered. |
Selects the spedified EXI channel on the given device with the given frequency.
[in] | nChn | EXI channel to select |
[in] | nDev | EXI device to select |
[in] | nFrq | EXI frequency to select |
Performs a special select, for SD cards or adapters respectively, on the given device with the given frequence.
[in] | nChn | EXI channel to select |
[in] | nDev | EXI device to select |
[in] | nFrq | EXI frequency to select |
Synchronize or finish respectively the last EXI transfer.
[in] | nChn | EXI channel to select |
Unlock the desired EXI channel.
[in] | nChn | EXI channel to unlock |
s32 InitializeUART | ( | ) |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |