Bonjour,
Je suis vraiment bloqué, es que quelqu'un pourrai me donner un coup de main s'il vous plait. Il y a pas mal de chose que je ne connais pas car je n'es pa un bon niveau en C. Es que quelqu'un pourrai m'expliquer s'il vous plaît le type des fonctions qu'il y a, et ce qu'elle font.(le nom des variables n'est pas important, dans un premier temps j'essaye simplement de comprendre le fonctionnement des fonctions)
Merci, j'essaye de comprendre ces fonctions car je dois les modifier. En les comprenant je pourrai le faire.
Merci pour votre aide.
#define USE_DMA 1
#define SSP_SFRM 24
#define SSP_IRQ 22
#define GSPI_DIRECT_MAJOR 240
#define SFRM_DOWN 0
#define SFRM_UP 1
static void
dma_irqr(int dma, void *devid, struct pt_regs *regs)
{
gspihost_info_t *gspiinfo = (gspihost_info_t *) devid;
u32 dcsr;
u32 ddadr;
int chan = gspiinfo->chan;
ddadr = DDADR(chan);
dcsr = DCSR(chan);
DCSR(chan) = dcsr & ~DCSR_STOPIRQEN;
/* bus error */
if (dcsr & DCSR_BUSERR) {
dcsr |= DCSR_BUSERR;
goto complete;
}
/* data transfer completed */
if (dcsr & DCSR_ENDINTR) {
goto complete;
}
return;
complete:
gspiinfo->dma_txack = 1;
wake_up_interruptible(&(gspiinfo->queue_tx));
return;
}
static void
dma_irqw(int dma, void *devid, struct pt_regs *regs)
{
gspihost_info_t *gspiinfo = (gspihost_info_t *) devid;
u32 dcsr;
u32 ddadr;
int chanrw = gspiinfo->chanrw;
ddadr = DDADR(chanrw);
dcsr = DCSR(chanrw);
DCSR(chanrw) = dcsr & ~DCSR_STOPIRQEN;
/* bus error */
if (dcsr & DCSR_BUSERR) {
dcsr |= DCSR_BUSERR;
goto complete;
}
/* data transfer completed */
if (dcsr & DCSR_ENDINTR) {
goto complete;
}
return;
complete:
gspiinfo->dma_txack = 1;
wake_up_interruptible(&(gspiinfo->queue_tx));
return;
}
static inline int
gspi_acquire_io(gspihost_info_t * gspiinfop)
{
int ret;
if (!gspiinfop) {
ret = -EINVAL;
goto error;
}
down(&gspiinfop->host_sem);
_PRINTK("Acquired Semaphore@ %lu\n", jiffies);
ret = 0;
error:
return ret;
}
static inline void
gspi_release_io(gspihost_info_t * gspiinfop)
{
if (!gspiinfop) {
goto error;
}
up(&gspiinfop->host_sem);
_PRINTK("Released Semaphore@ %lu\n", jiffies);
error:
return;
}
