xmem.c

00001 /*
00002  * Copyright (c) 2007, Swedish Institute of Computer Science
00003  * All rights reserved. 
00004  *
00005  * Redistribution and use in source and binary forms, with or without 
00006  * modification, are permitted provided that the following conditions 
00007  * are met: 
00008  * 1. Redistributions of source code must retain the above copyright 
00009  *    notice, this list of conditions and the following disclaimer. 
00010  * 2. Redistributions in binary form must reproduce the above copyright 
00011  *    notice, this list of conditions and the following disclaimer in the 
00012  *    documentation and/or other materials provided with the distribution. 
00013  * 3. Neither the name of the Institute nor the names of its contributors 
00014  *    may be used to endorse or promote products derived from this software 
00015  *    without specific prior written permission. 
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
00027  * SUCH DAMAGE. 
00028  *
00029  * @(#)$Id: xmem.c,v 1.1 2007/02/02 14:08:22 bg- Exp $
00030  */
00031 
00032 /*
00033  * External memory built from the AVR eeprom. It is incredibly slow!
00034  */
00035 
00036 #include <stdio.h>
00037 
00038 #include <avr/eeprom.h>
00039 
00040 #include "contiki.h"
00041 
00042 #include "dev/xmem.h"
00043 
00044 #if 0
00045 #define PRINTF(...) printf(__VA_ARGS__)
00046 #else
00047 #define PRINTF(...) do {} while (0)
00048 #endif
00049 
00050 /*
00051  */
00052 void
00053 xmem_init(void)
00054 {
00055   PRINTF("xmem_init\n");
00056 }
00057 
00058 int
00059 xmem_pread(void *_p, int size, off_t offset)
00060 {
00061   PRINTF("xmem_pread(%p, %d, %06lx)\n", _p, size, offset);
00062 
00063   spl_t s = splhigh();
00064   eeprom_busy_wait();
00065   eeprom_read_block(_p, (void *)(uintptr_t)offset, size);
00066   splx(s);
00067   return size;
00068 }
00069 
00070 int
00071 xmem_pwrite(const void *_p, int size, off_t offset)
00072 {
00073   PRINTF("xmem_pwrite(%p, %d, %06lx)\n", _p, size, offset);
00074 
00075   spl_t s = splhigh();
00076   eeprom_busy_wait();
00077   eeprom_write_block(_p, (void *)(uintptr_t)offset, size);
00078   splx(s);
00079   return size;
00080 }
00081 
00082 int
00083 xmem_erase(long size, off_t offset)
00084 {
00085   /*
00086    * AVR internal eeprom has a kind of auto erase, thus nothing is
00087    * done here.
00088    */
00089   PRINTF("xmem_erase(%ld, %06lx)\n", size, offset);
00090 
00091   return size;
00092 }

Generated on Mon Apr 11 14:23:42 2011 for Contiki 2.5 by  doxygen 1.6.1