Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Altera_Forum
Honored Contributor I
733 Views

How to acess hardware registers in a MMU software?

How to acess hardware registers in a MMU software? 

 

I am trying to make a program that uses the mutex hardware 

 

here is my code.. i am kinda lost tbh 

# include <ctype.h># include <errno.h># include <signal.h># include <stdio.h># include <string.h># include <sys/types.h># include <sys/time.h> /* struct timeval */# include <sys/resource.h> /* getrusage() */# include <stdlib.h> /* malloc(3) */# include <unistd.h># include <fcntl.h># include <sys/mman.h># include <linux/kernel.h># include <asm/io.h> # define MUTEX_ADDRESS 0x80000028# define RESET_ADDRESS 0x80000029 /*Lembrar de usar o bit 31 ligado ao acessar o mutex (como você pode ver, o endereço começa com 8, ou seja, bit 31 ligado). Isto é para evitar que os processadores façam cache desta memória de controle do mutex. Não esquece de dar uma olhadinha no pdf que explica o mutex, pra entender o que eu fiz. Outro detalhe - o CPUID está fixo neste caso ("eu" sou a CPU zero, a outra CPU (processador com hal) é o de número 1). */ int MutexTryLock(void); void MutexUnlock(void); int main(void){ printf("oi\n"); return 0; } int MutexTryLock(void) { /*-------------------------------------------------------------------------- DESC.: Tenta bloquear, para uso exclusivo, o mutex. SAÍDA: true: sucesso no bloqueio, false: a outra CPU já bloqueou. --------------------------------------------------------------------------*/ /* Escreve em mutex register, CPUID = 0, VALUE = 1.*/ outl(0x00000001, MUTEX_ADDRESS); /*Lê em mutex register para verificar se a escrita foi efetivada. Caso positivo, o bloqueio foi realizado com sucesso. Caso contrário, a outra CPU já está com o bloqueio em ação.*/ if (inl(MUTEX_ADDRESS) == 0x00000001) return 1; return 0; } void MutexUnlock(void) { /*-------------------------------------------------------------------------- DESC.: Desbloqueia o mutex. --------------------------------------------------------------------------*/ /* Reset.*/ outl(0x00000001, RESET_ADDRESS); /* Unlock.*/ outl(0x00000000, MUTEX_ADDRESS); }
0 Kudos
0 Replies
Reply