diff --git a/uboot-compiler/shmbuffer/main.c b/uboot-compiler/shmbuffer/main.c index 0aadcad4556e27fc1e811633093028f0ad685a81..8ded25ca1ce899648666803bb24fe1e56560fb11 100644 --- a/uboot-compiler/shmbuffer/main.c +++ b/uboot-compiler/shmbuffer/main.c @@ -1,31 +1,7 @@ -#include<stdio.h> -#include<stddef.h> -#include<sys/mman.h> -#include<fcntl.h> - -#define SHMADDR 0x3F000000 int main(int argc, char *argv[]) { - int fd; - int * memaddr; - - fd = open("/dev/mem", O_RDWR); - - if (fd == -1) - { - printf("can not access /dev/mem\n" ); - return -1; - } - - memaddr = - (int*)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, SHMADDR); - if (memaddr == MAP_FAILED) - { - printf("mmap failed\n" ); - return -1; - } - printf("value=%d\n", *memaddr); + } \ No newline at end of file diff --git a/uboot-compiler/shmbuffer/memory.c b/uboot-compiler/shmbuffer/memory.c new file mode 100644 index 0000000000000000000000000000000000000000..4c6c595bd2230eb4b3c4ab75cbb10c73f9bf16f9 --- /dev/null +++ b/uboot-compiler/shmbuffer/memory.c @@ -0,0 +1,36 @@ +#include "memory.h" + +char* map_shared_mem() +{ + int fd; + char *memaddr; + + fd = open("/dev/mem", O_RDWR); + + if (fd == -1) + { + printf("can not access /dev/mem\n" ); + return NULL; + } + + memaddr = + (char *)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, SHMADDR); + if (memaddr == MAP_FAILED) + { + printf("mmap failed\n" ); + return NULL; + } + return memaddr; +} + +int write_shared_mem(char* memaddr, packet_t packet) +{ + *memaddr = 0xFF; + memcpy(*(memaddr + 1), packet.data, packet.len); + return 0; +} + +int shared_mem_loop(queue_t* queue) +{ + +} \ No newline at end of file diff --git a/uboot-compiler/shmbuffer/memory.h b/uboot-compiler/shmbuffer/memory.h new file mode 100644 index 0000000000000000000000000000000000000000..e8dd661238ee8c6623b6a263d87a1a47b54acc4e --- /dev/null +++ b/uboot-compiler/shmbuffer/memory.h @@ -0,0 +1,15 @@ +#ifndef MEMORY_H +#define MEMORY_H + +#include<stdio.h> +#include<stddef.h> +#include<sys/mman.h> +#include<fcntl.h> +#include<string.h> +#include<stdint.h> + +#include "queue.h" + +#define SHMADDR 0x3F000000 + +#endif \ No newline at end of file diff --git a/uboot-compiler/shmbuffer/packet.h b/uboot-compiler/shmbuffer/packet.h new file mode 100644 index 0000000000000000000000000000000000000000..ca6d412d6a695eff40c87c2a2c55d521dafe3615 --- /dev/null +++ b/uboot-compiler/shmbuffer/packet.h @@ -0,0 +1,12 @@ +#ifndef PACKET_H +#define PACKET_H + +#include<stddef.h> + +typedef struct packet { + size_t len; + char * data; +} packet_t; + + +#endif \ No newline at end of file diff --git a/uboot-compiler/shmbuffer/queue.c b/uboot-compiler/shmbuffer/queue.c new file mode 100644 index 0000000000000000000000000000000000000000..66047c5b5928c86b9068e8152cec3d468885f567 --- /dev/null +++ b/uboot-compiler/shmbuffer/queue.c @@ -0,0 +1,64 @@ +#include "queue.h" + +/* +Author: Justin Kenny + +Creates a queue to hold packets for shared memory based on a linked list +*/ + +//Initializes the queue.s +void queue_init(queue_t *queue) +{ + queue->head = NULL; + queue->tail = NULL; + queue->size = 0; +} + +//Returns a pointer to the new queue node. If it return null, then malloc failed. +queue_node_t* enqueue(queue_t *queue, packet_t* packet) +{ + queue_node_t *n; + n = malloc(sizeof(*n)); + if(n) + { + n->data = packet; + if(queue->head) + { + queue->tail->next = n; + n->prev = queue->tail; + queue->tail = n; + } + else + { + //the queue is empty + queue->head = queue->tail = n; + } + queue->size++; + } + return n; +} + +packet_t* dequeue(queue_t *queue) +{ + queue_node_t *n; + if(!queue->head) + { + return NULL; + } + if(queue->head == queue->tail) + { + n = queue->head; + queue->head = queue->tail = NULL; + } + else + { + queue_node_t *next; + next = queue->head->next; + n = queue->head; + next->prev = NULL; + queue->head = next; + } + packet_t *packet = n->data; + free(n); + return packet; +} \ No newline at end of file diff --git a/uboot-compiler/shmbuffer/queue.h b/uboot-compiler/shmbuffer/queue.h new file mode 100644 index 0000000000000000000000000000000000000000..70146f3348375314c949682dc8af61598f142933 --- /dev/null +++ b/uboot-compiler/shmbuffer/queue.h @@ -0,0 +1,25 @@ +#ifndef QUEUE_H +#define QUEUE_H + +#include "packet.h" +#include <stdlib.h> + +typedef struct queue_node { + struct queue_node *next; + struct queue_node *prev; + packet_t *data; +} queue_node_t; + +typedef struct queue { + queue_node_t *head; + queue_node_t *tail; + int size; +} queue_t; + +void queue_init(queue_t *queue); + +queue_node_t* enqueue(queue_t *queue, packet_t* packet); + +packet_t* dequeue(queue_t *queue); + +#endif \ No newline at end of file