Index: head/sys/boot/arm/at91/Makefile.inc =================================================================== --- head/sys/boot/arm/at91/Makefile.inc (revision 324981) +++ head/sys/boot/arm/at91/Makefile.inc (nonexistent) @@ -1,57 +0,0 @@ -# $FreeBSD$ - -.if !target(__at91_boot_Makefile.inc__) -.PATH: ${.CURDIR}/../../../../libkern ${.CURDIR}/../../../../libkern/arm - -__at91_boot_Makefile.inc__: - -# tsc, bwct, kb920x, centipad are the supported flavors -BOOT_FLAVOR?=kb920x - -CFLAGS=-Os -mcpu=arm9 -ffreestanding \ - -I${.CURDIR}/../libat91 \ - -I${.CURDIR}/../../../.. \ - -I${.CURDIR}/../../../../arm \ - -D_KERNEL \ - -Wall -Waggregate-return \ - -Wnested-externs \ - -Wpointer-arith -Wshadow -Wwrite-strings \ - -Werror \ - -Wmissing-prototypes \ - -Wmissing-declarations -# -Wstrict-prototypes - -CFLAGS+=-DBOOT_${BOOT_FLAVOR:tu} - -LIBAT91=${.OBJDIR}/../libat91/libat91.a - -LD ?= ld -OBJCOPY ?= objcopy - -.if defined(P) -${P}: ${P}.out - ${OBJCOPY} -S -O binary ${P}.out ${.TARGET} - @set -- `ls -l ${.TARGET}`; x=$$((12288-$$5)); \ - echo "$$x bytes available"; test $$x -ge 0 - -${P}.out: ${OBJS} - ${LD} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LIBAT91} - -CLEANFILES+= ${P} ${P}.out -.endif - -.if defined(WITH_TAG_LIST) -MK_TAG_LIST:=yes -.else -MK_TAG_LIST:=no -.endif - -.if defined(WITH_FPGA) -MK_FPGA:=yes -.else -MK_FPGA:=no -.endif - -.endif - -.include "../Makefile.inc" Property changes on: head/sys/boot/arm/at91/Makefile.inc ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/linker.cfg =================================================================== --- head/sys/boot/arm/at91/linker.cfg (revision 324981) +++ head/sys/boot/arm/at91/linker.cfg (nonexistent) @@ -1,56 +0,0 @@ -/******************************************************************************* - * - * Filename: linker.cfg - * - * linker config file used for internal RAM or eeprom images at address 0. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin move data to SDRAM - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - ******************************************************************************/ -OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", - "elf32-littlearm") -OUTPUT_ARCH(arm) -ENTRY(start) -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - . = 0; - .text : - { - *(.text) - } - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - .data : - { - __data_start = . ; - *(.data) - } - _edata = .; - PROVIDE (edata = .); - __bss_start = .; - __bss_start__ = .; - .bss : - { - *(.bss) - . = ALIGN(32 / 8); - } - . = ALIGN(32 / 8); - _end = .; - _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; - PROVIDE (end = .); -} Property changes on: head/sys/boot/arm/at91/linker.cfg ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/Makefile =================================================================== --- head/sys/boot/arm/at91/Makefile (revision 324981) +++ head/sys/boot/arm/at91/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $FreeBSD$ - -SUBDIR= libat91 boot0 boot0iic boot0spi boot2 bootiic bootspi - -.include Property changes on: head/sys/boot/arm/at91/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0/main.c =================================================================== --- head/sys/boot/arm/at91/boot0/main.c (revision 324981) +++ head/sys/boot/arm/at91/boot0/main.c (nonexistent) @@ -1,45 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "lib.h" -#include "at91rm9200_lowlevel.h" - -typedef void fn_t(void); - -int main(void); - -int -main(void) -{ - char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */ - fn_t *fn = (fn_t *)(SDRAM_BASE + (1 << 20)); /* Load to base + 1MB */ - - while (xmodem_rx(addr) == -1) - continue; - fn(); - return (0); -} Property changes on: head/sys/boot/arm/at91/boot0/main.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0/README =================================================================== --- head/sys/boot/arm/at91/boot0/README (revision 324981) +++ head/sys/boot/arm/at91/boot0/README (nonexistent) @@ -1,7 +0,0 @@ -This is a bootstrap bootloader. It is intended to be used when the -AT91RM9200 is running xmodem over DBGU. It will download the next stage -of the booting process (or the recovery program) and jump to it. It loads -the program at a 1MB offset into SDRAM. Programs are expected to be -smaller than this and copy themselves to the right location. - -$FreeBSD$ Property changes on: head/sys/boot/arm/at91/boot0/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0/linker.cfg =================================================================== --- head/sys/boot/arm/at91/boot0/linker.cfg (revision 324981) +++ head/sys/boot/arm/at91/boot0/linker.cfg (nonexistent) @@ -1,84 +0,0 @@ -/******************************************************************************* - * - * Filename: linker.cfg - * - * linker config file used for internal RAM or eeprom images at address 0. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin move data to SDRAM - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - ******************************************************************************/ -OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", - "elf32-littlearm") -OUTPUT_ARCH(arm) -ENTRY(start) -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - . = 0; - .text : - { - *(.text) - *(.text.*) - *(.stub) - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - *(.gnu.linkonce.t.*) - *(.glue_7t) *(.glue_7) - } - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - .data : - { - __data_start = . ; - *(.data) - *(.data.*) - *(.gnu.linkonce.d.*) - SORT(CONSTRUCTORS) - } - _edata = .; - PROVIDE (edata = .); - __bss_start = .; - __bss_start__ = .; - .sbss : - { - PROVIDE (__sbss_start = .); - PROVIDE (___sbss_start = .); - *(.dynsbss) - *(.sbss) - *(.sbss.*) - *(.gnu.linkonce.sb.*) - *(.scommon) - PROVIDE (__sbss_end = .); - PROVIDE (___sbss_end = .); - } - .bss : - { - *(.dynbss) - *(.bss) - *(.bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - /* Align here to ensure that the .bss section occupies space up to - _end. Align after .bss to ensure correct alignment even if the - .bss section disappears because there are no input sections. */ - . = ALIGN(32 / 8); - } - . = ALIGN(32 / 8); - _end = .; - _bss_end__ = . ; __bss_end__ = . ; __end__ = . ; - PROVIDE (end = .); -} Property changes on: head/sys/boot/arm/at91/boot0/linker.cfg ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0/Makefile =================================================================== --- head/sys/boot/arm/at91/boot0/Makefile (revision 324981) +++ head/sys/boot/arm/at91/boot0/Makefile (nonexistent) @@ -1,14 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR}/../libat91 - -P=boot0 -FILES=${P} -SRCS=arm_init.S main.c -MAN= -LDFLAGS=-e 0 -T ${.CURDIR}/linker.cfg -OBJS+= ${SRCS:N*.h:R:S/$/.o/g} - -.include - -CFLAGS+=-DBOOT_BOOT0 Property changes on: head/sys/boot/arm/at91/boot0/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0iic/main.c =================================================================== --- head/sys/boot/arm/at91/boot0iic/main.c (revision 324981) +++ head/sys/boot/arm/at91/boot0iic/main.c (nonexistent) @@ -1,52 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "lib.h" -#include "at91rm9200_lowlevel.h" - -int main(void); - -int -main(void) -{ - char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */ - int len, sec; - - printf("\nSend data to be written into EEPROM\n"); - while ((len = xmodem_rx(addr)) == -1) - continue; - sec = GetSeconds() + 1; - while (sec >= GetSeconds()) - continue; - printf("\nWriting EEPROM from 0x%x to addr 0, 0x%x bytes\n", addr, - len); - InitEEPROM(); - printf("init done\n"); - WriteEEPROM(0, addr, len); - printf("\nWrote %d bytes. Press reset\n", len); - return (1); -} Property changes on: head/sys/boot/arm/at91/boot0iic/main.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0iic/Makefile =================================================================== --- head/sys/boot/arm/at91/boot0iic/Makefile (revision 324981) +++ head/sys/boot/arm/at91/boot0iic/Makefile (nonexistent) @@ -1,14 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR}/../libat91 - -P=boot0iic -FILES=${P} -SRCS=arm_init.S main.c -MAN= -LDFLAGS=-e 0 -T ${.CURDIR}/../linker.cfg -OBJS+= ${SRCS:N*.h:R:S/$/.o/g} - -.include - -CFLAGS+=-DBOOT_BOOT0 Property changes on: head/sys/boot/arm/at91/boot0iic/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0spi/main.c =================================================================== --- head/sys/boot/arm/at91/boot0spi/main.c (revision 324981) +++ head/sys/boot/arm/at91/boot0spi/main.c (nonexistent) @@ -1,65 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "lib.h" -#include "at91rm9200_lowlevel.h" -#include "spi_flash.h" - -#define OFFSET 0 - -int main(void); - -int -main(void) -{ - int len, i, j, off, sec; - char *addr = (char *)SDRAM_BASE + (1 << 20); /* download at + 1MB */ - char *addr2 = (char *)SDRAM_BASE + (2 << 20); /* readback to + 2MB */ - - SPI_InitFlash(); - printf("Waiting for data\n"); - while ((len = xmodem_rx(addr)) == -1) - continue; - printf("Writing %u bytes at %u\n", len, OFFSET); - for (i = 0; i < len; i+= FLASH_PAGE_SIZE) { - off = i + OFFSET; - for (j = 0; j < 10; j++) { - SPI_WriteFlash(off, addr + i, FLASH_PAGE_SIZE); - SPI_ReadFlash(off, addr2 + i, FLASH_PAGE_SIZE); - if (p_memcmp(addr + i, addr2 + i, FLASH_PAGE_SIZE) == 0) - break; - } - if (j >= 10) - printf("Bad Readback at %u\n", i); - } - sec = GetSeconds() + 2; - while (sec <= GetSeconds()) - continue; - printf("Done\n"); - reset(); - return (1); -} Property changes on: head/sys/boot/arm/at91/boot0spi/main.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot0spi/Makefile =================================================================== --- head/sys/boot/arm/at91/boot0spi/Makefile (revision 324981) +++ head/sys/boot/arm/at91/boot0spi/Makefile (nonexistent) @@ -1,14 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR}/../libat91 - -P=boot0spi -FILES=${P} -SRCS=arm_init.S main.c -MAN= -LDFLAGS=-e 0 -T ${.CURDIR}/../linker.cfg -OBJS+= ${SRCS:N*.h:R:S/$/.o/g} - -.include - -CFLAGS+=-DBOOT_BOOT0 Property changes on: head/sys/boot/arm/at91/boot0spi/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot2/bwct_board.c =================================================================== --- head/sys/boot/arm/at91/boot2/bwct_board.c (revision 324981) +++ head/sys/boot/arm/at91/boot2/bwct_board.c (nonexistent) @@ -1,125 +0,0 @@ -#include -__FBSDID("$FreeBSD$"); - -#include - -#include "at91rm9200_lowlevel.h" -#include "at91rm9200.h" -#include "emac.h" -#include "lib.h" -#include "ee.h" -#include "board.h" -#include "sd-card.h" - -unsigned char mac[6] = { 0x00, 0x0e, 0x42, 0x02, 0x00, 0x28 }; - -static void USART0_Init(); -static void USART1_Init(); -static void USART2_Init(); -static void USART3_Init(); -static void DS1672_Init(); - -static void -DS1672_Init() { - char buf[] = {0x00, 0xa9}; - - EEWrite(0xd0, buf, sizeof(buf)); -} - -static void -USART0_Init() { - - AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - - // setup GPIO - pPio->PIO_ASR = AT91C_PA17_TXD0 | AT91C_PA18_RXD0; - pPio->PIO_PDR = AT91C_PA17_TXD0 | AT91C_PA18_RXD0; - - // enable power - pPMC->PMC_PCER = 1u << AT91C_ID_US0; -} - -static void -USART1_Init() { - - AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - - // setup GPIO - pPio->PIO_ASR = AT91C_PB20_TXD1 | AT91C_PB21_RXD1; - pPio->PIO_PDR = AT91C_PB20_TXD1 | AT91C_PB21_RXD1; - - // enable power - pPMC->PMC_PCER = 1u << AT91C_ID_US1; -} - -static void -USART2_Init() { - - AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - - // setup GPIO - pPio->PIO_ASR = AT91C_PA23_TXD2 | AT91C_PA22_RXD2; - pPio->PIO_PDR = AT91C_PA23_TXD2 | AT91C_PA22_RXD2; - - // enable power - pPMC->PMC_PCER = 1u << AT91C_ID_US2; -} - -static void -USART3_Init() { - - AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - - // setup GPIO - pPio->PIO_BSR = AT91C_PA5_TXD3 | AT91C_PA6_RXD3; - pPio->PIO_PDR = AT91C_PA5_TXD3 | AT91C_PA6_RXD3; - - // enable power - pPMC->PMC_PCER = 1u << AT91C_ID_US3; -} - -void -board_init(void) -{ - - printf("\n\n"); - printf("BWCT FSB-A920-1\n"); - printf("http://www.bwct.de\n"); - printf("\n"); -#if defined(SDRAM_128M) - printf("AT92RM9200 180MHz 128MB\n"); -#else - printf("AT92RM9200 180MHz 64MB\n"); -#endif - printf("Initialising USART0\n"); - USART0_Init(); - printf("Initialising USART1\n"); - USART1_Init(); - printf("Initialising USART2\n"); - USART2_Init(); - printf("Initialising USART3\n"); - USART3_Init(); - printf("Initialising TWI\n"); - EEInit(); - printf("Initialising DS1672\n"); - DS1672_Init(); - printf("Initialising Ethernet\n"); - printf("MAC %x:%x:%x:%x:%x:%x\n", mac[0], - mac[1], mac[2], mac[3], mac[4], mac[5]); - EMAC_Init(); - EMAC_SetMACAddress(mac); - printf("Initialising SD-card\n"); - sdcard_init(); -} - -#include "../bootspi/ee.c" - -int -drvread(void *buf, unsigned lba, unsigned nblk) -{ - return (MCI_read((char *)buf, lba << 9, nblk << 9)); -} Property changes on: head/sys/boot/arm/at91/boot2/bwct_board.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot2/centipad_board.c =================================================================== --- head/sys/boot/arm/at91/boot2/centipad_board.c (revision 324981) +++ head/sys/boot/arm/at91/boot2/centipad_board.c (nonexistent) @@ -1,68 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -#include - -#include "emac.h" -#include "lib.h" -#include "board.h" -#include "sd-card.h" - -unsigned char mac[6] = { 0x42, 0x53, 0x44, 0, 1, 1 }; - -static void -MacFromEE() -{ -#if 0 - uint32_t sig; - sig = 0; - ReadEEPROM(12 * 1024, (uint8_t *)&sig, sizeof(sig)); - if (sig != 0x92021054) - return; - ReadEEPROM(12 * 1024 + 4, mac, 6); -#endif - printf("MAC %x:%x:%x:%x:%x:%x\n", mac[0], - mac[1], mac[2], mac[3], mac[4], mac[5]); -} - -void -board_init(void) -{ - InitEEPROM(); - MacFromEE(); - EMAC_Init(); - EMAC_SetMACAddress(mac); - while (sdcard_init() == 0) - printf("Looking for SD card\n"); -} - -int -drvread(void *buf, unsigned lba, unsigned nblk) -{ - return (MCI_read((char *)buf, lba << 9, nblk << 9)); -} Property changes on: head/sys/boot/arm/at91/boot2/centipad_board.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot2/board.h =================================================================== --- head/sys/boot/arm/at91/boot2/board.h (revision 324981) +++ head/sys/boot/arm/at91/boot2/board.h (nonexistent) @@ -1,29 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -void Update(void); -void board_init(void); -int drvread(void *, unsigned, unsigned); Property changes on: head/sys/boot/arm/at91/boot2/board.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot2/boot2.c =================================================================== --- head/sys/boot/arm/at91/boot2/boot2.c (revision 324981) +++ head/sys/boot/arm/at91/boot2/boot2.c (nonexistent) @@ -1,368 +0,0 @@ -/*- - * Copyright (c) 2008 John Hay - * Copyright (c) 2006 M Warner Losh - * Copyright (c) 1998 Robert Nordier - * All rights reserved. - * - * Redistribution and use in source and binary forms are freely - * permitted provided that the above copyright notice and this - * paragraph and the following disclaimer are duplicated in all - * such forms. - * - * This software is provided "AS IS" and without any express or - * implied warranties, including, without limitation, the implied - * warranties of merchantability and fitness for a particular - * purpose. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include - -#include - -#include - -#include "lib.h" -#include "board.h" -#include "paths.h" -#include "rbx.h" - -#undef PATH_KERNEL -#define PATH_KERNEL "/boot/kernel/kernel.gz.tramp" - -extern uint32_t _end; - -#define NOPT 6 - -static const char optstr[NOPT] = "agnrsv"; -static const unsigned char bootflags[NOPT] = { - RBX_ASKNAME, - RBX_GDB, - RBX_NOINTR, - RBX_DFLTROOT, - RBX_SINGLE, - RBX_VERBOSE -}; - -unsigned board_id; /* board type to pass to kernel, if set by board_* code */ -unsigned dsk_start; -static char cmd[512]; -static char kname[1024]; -uint32_t opts; -static uint8_t dsk_meta; - -int main(void); -static void load(void); -static int parse(void); -static int dskread(void *, unsigned, unsigned); -#ifdef FIXUP_BOOT_DRV -static void fixup_boot_drv(caddr_t, int, int, int); -#endif - -#define UFS_SMALL_CGBASE -#include "ufsread.c" - -#ifdef DEBUG -#define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__) -#else -#define DPRINTF(fmt, ...) -#endif - -static inline int -xfsread(ufs_ino_t inode, void *buf, size_t nbyte) -{ - if ((size_t)fsread(inode, buf, nbyte) != nbyte) - return -1; - return 0; -} - -static inline void -getstr(int c) -{ - char *s; - - s = cmd; - if (c == 0) - c = getc(10000); - for (;;) { - switch (c) { - case 0: - break; - case '\177': - case '\b': - if (s > cmd) { - s--; - printf("\b \b"); - } - break; - case '\n': - case '\r': - *s = 0; - return; - default: - if (s - cmd < sizeof(cmd) - 1) - *s++ = c; - xputchar(c); - } - c = getc(10000); - } -} - -int -main(void) -{ - int autoboot, c = 0; - ufs_ino_t ino; - - dmadat = (void *)(0x20000000 + (16 << 20)); - board_init(); - - autoboot = 1; - - /* Process configuration file */ - if ((ino = lookup(PATH_CONFIG)) || - (ino = lookup(PATH_DOTCONFIG))) - fsread(ino, cmd, sizeof(cmd)); - - if (*cmd) { - if (parse()) - autoboot = 0; - printf("%s: %s\n", PATH_CONFIG, cmd); - /* Do not process this command twice */ - *cmd = 0; - } - - if (*kname == '\0') - strcpy(kname, PATH_KERNEL); - - /* Present the user with the boot2 prompt. */ - for (;;) { - printf("\nDefault: %s\nboot: ", kname); - if (!autoboot || - (OPT_CHECK(RBX_NOINTR) == 0 && (c = getc(2)) != 0)) - getstr(c); - xputchar('\n'); - autoboot = 0; - c = 0; - if (parse()) - xputchar('\a'); - else - load(); - } - return (1); -} - -static void -load(void) -{ - Elf32_Ehdr eh; - static Elf32_Phdr ep[2]; - caddr_t p; - ufs_ino_t ino; - uint32_t addr; - int i, j; -#ifdef FIXUP_BOOT_DRV - caddr_t staddr; - int klen; - - staddr = (caddr_t)0xffffffff; - klen = 0; -#endif - if (!(ino = lookup(kname))) { - if (!ls) - printf("No %s\n", kname); - return; - } - if (xfsread(ino, &eh, sizeof(eh))) - return; - if (!IS_ELF(eh)) { - printf("Invalid %s\n", "format"); - return; - } - fs_off = eh.e_phoff; - for (j = i = 0; i < eh.e_phnum && j < 2; i++) { - if (xfsread(ino, ep + j, sizeof(ep[0]))) - return; - if (ep[j].p_type == PT_LOAD) - j++; - } - for (i = 0; i < 2; i++) { - p = (caddr_t)ep[i].p_paddr; - fs_off = ep[i].p_offset; -#ifdef FIXUP_BOOT_DRV - if (staddr == (caddr_t)0xffffffff) - staddr = p; - klen += ep[i].p_filesz; -#endif - if (xfsread(ino, p, ep[i].p_filesz)) - return; - } - addr = eh.e_entry; -#ifdef FIXUP_BOOT_DRV - fixup_boot_drv(staddr, klen, bootslice, bootpart); -#endif - ((void(*)(int, int, int, int))addr)(opts & RBX_MASK, board_id, 0, 0); -} - -static int -parse() -{ - char *arg = cmd; - char *ep, *p; - int c, i; - - while ((c = *arg++)) { - if (c == ' ' || c == '\t' || c == '\n') - continue; - for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++); - ep = p; - if (*p) - *p++ = 0; - if (c == '-') { - while ((c = *arg++)) { - for (i = 0; c != optstr[i]; i++) - if (i == NOPT - 1) - return -1; - opts ^= OPT_SET(bootflags[i]); - } - } else { - arg--; - if ((i = ep - arg)) { - if ((size_t)i >= sizeof(kname)) - return -1; - memcpy(kname, arg, i + 1); - } - } - arg = p; - } - return 0; -} - -static int -dskread(void *buf, unsigned lba, unsigned nblk) -{ - struct dos_partition *dp; - struct disklabel *d; - char *sec; - int i; - - if (!dsk_meta) { - sec = dmadat->secbuf; - dsk_start = 0; - if (drvread(sec, DOSBBSECTOR, 1)) - return -1; - dp = (void *)(sec + DOSPARTOFF); - for (i = 0; i < NDOSPART; i++) { - if (dp[i].dp_typ == DOSPTYP_386BSD) - break; - } - if (i == NDOSPART) - return -1; - /* - * Although dp_start is aligned within the disk - * partition structure, DOSPARTOFF is 446, which is - * only word (2) aligned, not longword (4) aligned. - * Cope by using memcpy to fetch the start of this - * partition. - */ - memcpy(&dsk_start, &dp[1].dp_start, 4); - if (drvread(sec, dsk_start + LABELSECTOR, 1)) - return -1; - d = (void *)(sec + LABELOFFSET); - if (d->d_magic != DISKMAGIC || d->d_magic2 != DISKMAGIC) { - printf("Invalid %s\n", "label"); - return -1; - } - if (!d->d_partitions[0].p_size) { - printf("Invalid %s\n", "partition"); - return -1; - } - dsk_start += d->d_partitions[0].p_offset; - dsk_start -= d->d_partitions[RAW_PART].p_offset; - dsk_meta++; - } - return drvread(buf, dsk_start + lba, nblk); -} - -#ifdef FIXUP_BOOT_DRV -/* - * fixup_boot_drv() will try to find the ROOTDEVNAME spec in the kernel - * and change it to what was specified on the comandline or /boot.conf - * file or to what was encountered on the disk. It will try to handle 3 - * different disk layouts, raw (dangerously dedicated), slice only and - * slice + partition. It will look for the following strings in the - * kernel, but if it is one of the first three, the string in the kernel - * must use the correct form to match the actual disk layout: - * - ufs:ad0a - * - ufs:ad0s1 - * - ufs:ad0s1a - * - ufs:ROOTDEVNAME - * In the case of the first three strings, only the "a" at the end and - * the "1" after the "s" will be modified, if they exist. The string - * length will not be changed. In the case of the last string, the - * whole string will be built up and nul, '\0' terminated. - */ -static void -fixup_boot_drv(caddr_t addr, int klen, int bs, int bp) -{ - const u_int8_t op[] = "ufs:ROOTDEVNAME"; - const u_int8_t op2[] = "ufs:ad0"; - u_int8_t *p, *ps; - - DPRINTF("fixup_boot_drv: 0x%x, %d, slice %d, partition %d\n", - (int)addr, klen, bs, bp); - if (bs > 4) - return; - if (bp > 7) - return; - ps = memmem(addr, klen, op, sizeof(op)); - if (ps != NULL) { - p = ps + 4; /* past ufs: */ - DPRINTF("Found it at 0x%x\n", (int)ps); - p[0] = 'a'; p[1] = 'd'; p[2] = '0'; /* ad0 */ - p += 3; - if (bs > 0) { - /* append slice */ - *p++ = 's'; - *p++ = bs + '0'; - } - if (disk_layout != DL_SLICE) { - /* append partition */ - *p++ = bp + 'a'; - } - *p = '\0'; - } else { - ps = memmem(addr, klen, op2, sizeof(op2) - 1); - if (ps != NULL) { - p = ps + sizeof(op2) - 1; - DPRINTF("Found it at 0x%x\n", (int)ps); - if (*p == 's') { - /* fix slice */ - p++; - *p++ = bs + '0'; - } - if (*p == 'a') - *p = bp + 'a'; - } - } - if (ps == NULL) { - printf("Could not locate \"%s\" to fix kernel boot device, " - "check ROOTDEVNAME is set\n", op); - return; - } - DPRINTF("Changed boot device to %s\n", ps); -} -#endif - -/* Arm EABIs */ -void __aeabi_unwind_cpp_pr0(void); -void -__aeabi_unwind_cpp_pr0(void) -{ -} Property changes on: head/sys/boot/arm/at91/boot2/boot2.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot2/Makefile =================================================================== --- head/sys/boot/arm/at91/boot2/Makefile (revision 324981) +++ head/sys/boot/arm/at91/boot2/Makefile (nonexistent) @@ -1,22 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR}/../libat91 ${.CURDIR}/../bootspi - -P=boot2 -FILES=${P} -SRCS=arm_init.S boot2.c ${BOOT_FLAVOR:tl}_board.c -MAN= -LDFLAGS=-e 0 -T ${.CURDIR}/../linker.cfg -OBJS+= ${SRCS:N*.h:R:S/$/.o/g} - -.include - -.if ${BOOT_FLAVOR} == "kb920x" -CFLAGS+=-DBOOT_IIC -.endif -CFLAGS+= \ - -I${.CURDIR}/../bootspi \ - -I${.CURDIR}/../../../common \ - -I${.CURDIR}/../../../.. \ - -D_KERNEL \ - -DUFS1_ONLY Property changes on: head/sys/boot/arm/at91/boot2/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/boot2/kb920x_board.c =================================================================== --- head/sys/boot/arm/at91/boot2/kb920x_board.c (revision 324981) +++ head/sys/boot/arm/at91/boot2/kb920x_board.c (nonexistent) @@ -1,66 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -#include - -#include "emac.h" -#include "lib.h" -#include "board.h" -#include "sd-card.h" - -unsigned char mac[6] = { 0x42, 0x53, 0x44, 0, 0, 1 }; - -static void -MacFromEE() -{ - uint32_t sig; - sig = 0; - ReadEEPROM(12 * 1024, (uint8_t *)&sig, sizeof(sig)); - if (sig != 0x92021054) - return; - ReadEEPROM(12 * 1024 + 4, mac, 6); - printf("MAC %x:%x:%x:%x:%x:%x\n", mac[0], - mac[1], mac[2], mac[3], mac[4], mac[5]); -} - -void -board_init(void) -{ - InitEEPROM(); - MacFromEE(); - EMAC_Init(); - EMAC_SetMACAddress(mac); - while (sdcard_init() == 0) - printf("Looking for SD card\n"); -} - -int -drvread(void *buf, unsigned lba, unsigned nblk) -{ - return (MCI_read((char *)buf, lba << 9, nblk << 9)); -} Property changes on: head/sys/boot/arm/at91/boot2/kb920x_board.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootiic/env_vars.c =================================================================== --- head/sys/boot/arm/at91/bootiic/env_vars.c (revision 324981) +++ head/sys/boot/arm/at91/bootiic/env_vars.c (nonexistent) @@ -1,207 +0,0 @@ -/****************************************************************************** - * - * Filename: env_vars.c - * - * Instantiation of environment variables, structures, and other globals. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "env_vars.h" -#include "loader_prompt.h" -#include "lib.h" - -/******************************* GLOBALS *************************************/ -char boot_commands[MAX_BOOT_COMMANDS][MAX_INPUT_SIZE]; - -char env_table[MAX_ENV_SIZE_BYTES]; - -extern char BootCommandSection; - -/************************** PRIVATE FUNCTIONS ********************************/ - - -static int currentIndex; -static int currentOffset; - - -/* - * .KB_C_FN_DEFINITION_START - * int ReadCharFromEnvironment(char *) - * This private function reads characters from the environment variables - * to service the command prompt during auto-boot or just to setup the - * default environment. Returns positive value if valid character was - * set in the pointer. Returns negative value to signal input stream - * terminated. Returns 0 to indicate _wait_ condition. - * .KB_C_FN_DEFINITION_END - */ -static int -ReadCharFromEnvironment(int timeout) -{ - int ch; - - if (currentIndex < MAX_BOOT_COMMANDS) { - ch = boot_commands[currentIndex][currentOffset++]; - if (ch == '\0' || (currentOffset >= MAX_INPUT_SIZE)) { - currentOffset = 0; - ++currentIndex; - ch = '\r'; - } - return (ch); - } - - return (-1); -} - - -/*************************** GLOBAL FUNCTIONS ********************************/ - - -/* - * .KB_C_FN_DEFINITION_START - * void WriteCommandTable(void) - * This global function write the current command table to the non-volatile - * memory. - * .KB_C_FN_DEFINITION_END - */ -void -WriteCommandTable(void) -{ - int i, size = MAX_ENV_SIZE_BYTES, copySize; - char *cPtr = env_table; - - p_memset(env_table, 0, sizeof(env_table)); - - for (i = 0; i < MAX_BOOT_COMMANDS; ++i) { - - copySize = p_strlen(boot_commands[i]); - size -= copySize + 1; - - if (size < 0) { - continue; - } - memcpy(cPtr, boot_commands[i], copySize); - cPtr += copySize; - *cPtr++ = 0; - } - - /* We're executing in low RAM so addr in ram == offset in eeprom */ - WriteEEPROM((unsigned)&BootCommandSection, env_table, - sizeof(env_table)); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void SetBootCommand(int index, char *command) - * This global function replaces the specified index with the string residing - * at command. Execute this function with a NULL string to clear the - * associated command index. - * .KB_C_FN_DEFINITION_END - */ -void -SetBootCommand(int index, char *command) -{ - int i; - - if ((unsigned)index < MAX_BOOT_COMMANDS) { - - p_memset(boot_commands[index], 0, MAX_INPUT_SIZE); - - if (!command) - return ; - - for (i = 0; i < MAX_INPUT_SIZE; ++i) { - boot_commands[index][i] = command[i]; - if (!(boot_commands[index][i])) - return; - } - } -} - - -/* - * .KB_C_FN_DEFINITION_START - * void DumpBootCommands(void) - * This global function displays the current boot commands. - * .KB_C_FN_DEFINITION_END - */ -void -DumpBootCommands(void) -{ - int i, j; - - for (i = 0; i < MAX_BOOT_COMMANDS; ++i) { - printf("0x%x : ", i); - for (j = 0; j < MAX_INPUT_SIZE; ++j) { - putchar(boot_commands[i][j]); - if (!(boot_commands[i][j])) - break; - } - printf("[E]\n\r"); - } -} - - -/* - * .KB_C_FN_DEFINITION_START - * void LoadBootCommands(void) - * This global function loads the existing boot commands from raw format and - * coverts it to the standard, command-index format. Notice, the processed - * boot command table has much more space allocated than the actual table - * stored in non-volatile memory. This is because the processed table - * exists in RAM which is larger than the non-volatile space. - * .KB_C_FN_DEFINITION_END - */ -void -LoadBootCommands(void) -{ - int index, j, size; - char *cPtr; - - p_memset((char*)boot_commands, 0, sizeof(boot_commands)); - - cPtr = &BootCommandSection; - - size = MAX_ENV_SIZE_BYTES; - - for (index = 0; (index < MAX_BOOT_COMMANDS) && size; ++index) { - for (j = 0; (j < MAX_INPUT_SIZE) && size; ++j) { - size--; - boot_commands[index][j] = *cPtr++; - if (!(boot_commands[index][j])) { - break; - } - } - } -} - - -/* - * .KB_C_FN_DEFINITION_START - * void ExecuteEnvironmentFunctions(void) - * This global function executes applicable entries in the environment. - * .KB_C_FN_DEFINITION_END - */ -void -ExecuteEnvironmentFunctions(void) -{ - currentIndex = 0; - currentOffset = 0; - - DumpBootCommands(); - Bootloader(ReadCharFromEnvironment); -} Property changes on: head/sys/boot/arm/at91/bootiic/env_vars.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootiic/loader_prompt.h =================================================================== --- head/sys/boot/arm/at91/bootiic/loader_prompt.h (revision 324981) +++ head/sys/boot/arm/at91/bootiic/loader_prompt.h (nonexistent) @@ -1,55 +0,0 @@ -/****************************************************************************** - * - * Filename: loader_prompt.h - * - * Definition of the interactive loader functions. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#ifndef _LOADER_PROMPT_H_ -#define _LOADER_PROMPT_H_ - -#define MAX_INPUT_SIZE 256 -#define MAX_COMMAND_PARAMS 10 - -enum { - COMMAND_INVALID = 0, - COMMAND_COPY, - COMMAND_DUMP, - COMMAND_EXEC, - COMMAND_HELP, - COMMAND_LOCAL_IP, - COMMAND_MAC, - COMMAND_SERVER_IP, - COMMAND_SET, - COMMAND_TAG, - COMMAND_TFTP, - COMMAND_WRITE, - COMMAND_XMODEM, - COMMAND_FINAL_FLAG -} e_cmd_t; - - -typedef struct { - int command; - const char *c_string; -} command_entry_t; - -void EnterInteractiveBootloader(int(*inputFunction)(int)); -void Bootloader(int(*inputFunction)(int)); - -#endif /* _LOADER_PROMPT_H_ */ Property changes on: head/sys/boot/arm/at91/bootiic/loader_prompt.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootiic/main.c =================================================================== --- head/sys/boot/arm/at91/bootiic/main.c (revision 324981) +++ head/sys/boot/arm/at91/bootiic/main.c (nonexistent) @@ -1,55 +0,0 @@ -/******************************************************************************* - * - * Filename: main.c - * - * Basic entry points for top-level functions - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin cosmetic changes - * 29APR2005 kb_admin modified boot delay - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - ******************************************************************************/ - -#include "env_vars.h" -#include "at91rm9200_lowlevel.h" -#include "loader_prompt.h" -#include "emac.h" -#include "lib.h" - -int main(void); - -/* - * .KB_C_FN_DEFINITION_START - * int main(void) - * This global function waits at least one second, but not more than two - * seconds, for input from the serial port. If no response is recognized, - * it acts according to the parameters specified by the environment. For - * example, the function might boot an operating system. Do not return - * from this function. - * .KB_C_FN_DEFINITION_END - */ -int -main(void) -{ - InitEEPROM(); - EMAC_Init(); - LoadBootCommands(); - printf("\n\rKB9202(www.kwikbyte.com)\n\rAuto boot..\n\r"); - if (getc(1) == -1) - ExecuteEnvironmentFunctions(); - Bootloader(0); - - return (1); -} Property changes on: head/sys/boot/arm/at91/bootiic/main.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootiic/README =================================================================== --- head/sys/boot/arm/at91/bootiic/README (revision 324981) +++ head/sys/boot/arm/at91/bootiic/README (nonexistent) @@ -1,35 +0,0 @@ -$FreeBSD$ - -This image is intended to be programmed into boot EEPROM. The image is nearly -0x4000 so it will not fit in KB9200's 0x2000. It is intended for KB9201 or -later. Alternatively, the KB9200 can be upgraded with larger EEPROM. -It performs basic functions prior to executing an image at a -specified address. The pre-boot functions can be modified and saved back into -EEPROM. -The MAC address is set with 0.0.0.0.0.0 by default. This is an invalid address -and must be changed to a valid value in order to use the ethernet interface. - -Memory usage: - -EEPROM = 0x4000 -SDRAM = - run stack = 0x21800000 - variables = 0x21200000 - ethernet = 0x21000000 (buffers and descriptors) - - -Functions supported: - - c - copy - d - display auto command table (in RAM) - e - execute image - ? - help - ip - set local ip - m - set mac - server_ip - set server ip - s - set auto command entry - t - create linux boot tag list - tftp - download image via tftp - w - update auto command table - x - download image via xmodem - Property changes on: head/sys/boot/arm/at91/bootiic/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootiic/env_vars.h =================================================================== --- head/sys/boot/arm/at91/bootiic/env_vars.h (revision 324981) +++ head/sys/boot/arm/at91/bootiic/env_vars.h (nonexistent) @@ -1,54 +0,0 @@ -/****************************************************************************** - * - * Filename: env_vars.h - * - * Definition of environment variables, structures, and other globals. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#ifndef _ENV_VARS_H_ -#define _ENV_VARS_H_ - -/* each environment variable is a string following the standard command */ -/* definition used by the interactive loader in the following format: */ -/* ... */ -/* all environment variables (or commands) are stored in a string */ -/* format: NULL-terminated. */ -/* this implies that commands can never utilize 0-values: actual 0, not */ -/* the string '0'. this is not an issue as the string '0' is handled */ -/* by the command parse routine. */ - -/* the following defines the maximum size of the environment for */ -/* including variables. */ -/* this value must match that declared in the low-level file that */ -/* actually reserves the space for the non-volatile environment. */ -#define MAX_ENV_SIZE_BYTES 0x100 - -#define MAX_BOOT_COMMANDS 10 - -/* C-style reference section */ -#ifndef __ASSEMBLY__ - -extern void WriteCommandTable(void); -extern void SetBootCommand(int index, char *command); -extern void DumpBootCommands(void); -extern void LoadBootCommands(void); -extern void ExecuteEnvironmentFunctions(void); - -#endif /* !__ASSEMBLY__ */ - -#endif /* _ENV_VARS_H_ */ Property changes on: head/sys/boot/arm/at91/bootiic/env_vars.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootiic/loader_prompt.c =================================================================== --- head/sys/boot/arm/at91/bootiic/loader_prompt.c (revision 324981) +++ head/sys/boot/arm/at91/bootiic/loader_prompt.c (nonexistent) @@ -1,387 +0,0 @@ -/****************************************************************************** - * - * Filename: loader_prompt.c - * - * Instantiation of the interactive loader functions. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin massive changes for tftp, strings, and more - * 05JUL2005 kb_admin save tag address, and set registers on boot - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "at91rm9200_lowlevel.h" -#ifdef SUPPORT_TAG_LIST -#include "tag_list.h" -#endif -#include "emac.h" -#include "loader_prompt.h" -#include "env_vars.h" -#include "lib.h" - - -/******************************* GLOBALS *************************************/ - - -/*********************** PRIVATE FUNCTIONS/DATA ******************************/ - -static char inputBuffer[MAX_INPUT_SIZE]; -static int buffCount; - -// argv pointer are either NULL or point to locations in inputBuffer -static char *argv[MAX_COMMAND_PARAMS]; - -static const char *backspaceString = "\010 \010"; - -static const command_entry_t CommandTable[] = { - {COMMAND_COPY, "c"}, - {COMMAND_DUMP, "d"}, - {COMMAND_EXEC, "e"}, - {COMMAND_HELP, "?"}, - {COMMAND_LOCAL_IP, "ip"}, - {COMMAND_MAC, "m"}, - {COMMAND_SERVER_IP, "server_ip"}, - {COMMAND_SET, "s"}, -#ifdef SUPPORT_TAG_LIST - {COMMAND_TAG, "t"}, -#endif - {COMMAND_TFTP, "tftp"}, - {COMMAND_WRITE, "w"}, - {COMMAND_XMODEM, "x"}, - {COMMAND_FINAL_FLAG, 0} -}; - -static unsigned tagAddress; - -/* - * .KB_C_FN_DEFINITION_START - * unsigned BuildIP(void) - * This private function packs the test IP info to an unsigned value. - * .KB_C_FN_DEFINITION_END - */ -static unsigned -BuildIP(void) -{ - return ((p_ASCIIToDec(argv[1]) << 24) | - (p_ASCIIToDec(argv[2]) << 16) | - (p_ASCIIToDec(argv[3]) << 8) | - p_ASCIIToDec(argv[4])); -} - - -/* - * .KB_C_FN_DEFINITION_START - * int StringToCommand(char *cPtr) - * This private function converts a command string to a command code. - * .KB_C_FN_DEFINITION_END - */ -static int -StringToCommand(char *cPtr) -{ - int i; - - for (i = 0; CommandTable[i].command != COMMAND_FINAL_FLAG; ++i) - if (!strcmp(CommandTable[i].c_string, cPtr)) - return (CommandTable[i].command); - - return (COMMAND_INVALID); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void RestoreSpace(int) - * This private function restores NULL characters to spaces in order to - * process the remaining args as a string. The number passed is the argc - * of the first entry to begin restoring space in the inputBuffer. - * .KB_C_FN_DEFINITION_END - */ -static void -RestoreSpace(int startArgc) -{ - char *cPtr; - - for (startArgc++; startArgc < MAX_COMMAND_PARAMS; startArgc++) { - if ((cPtr = argv[startArgc])) - *(cPtr - 1) = ' '; - } -} - - -/* - * .KB_C_FN_DEFINITION_START - * int BreakCommand(char *) - * This private function splits the buffer into separate strings as pointed - * by argv and returns the number of parameters (< 0 on failure). - * .KB_C_FN_DEFINITION_END - */ -static int -BreakCommand(char *buffer) -{ - int pCount, cCount, state; - - state = pCount = 0; - p_memset((char*)argv, 0, sizeof(argv)); - - for (cCount = 0; cCount < MAX_INPUT_SIZE; ++cCount) { - - if (!state) { - /* look for next command */ - if (!p_IsWhiteSpace(buffer[cCount])) { - argv[pCount++] = &buffer[cCount]; - state = 1; - } else { - buffer[cCount] = 0; - } - } else { - /* in command, find next white space */ - if (p_IsWhiteSpace(buffer[cCount])) { - buffer[cCount] = 0; - state = 0; - } - } - - if (pCount >= MAX_COMMAND_PARAMS) { - return (-1); - } - } - - return (pCount); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void ParseCommand(char *) - * This private function executes matching functions. - * .KB_C_FN_DEFINITION_END - */ -static void -ParseCommand(char *buffer) -{ - int argc, i; - - if ((argc = BreakCommand(buffer)) < 1) - return; - - switch (StringToCommand(argv[0])) { - case COMMAND_COPY: - { - // "c " - // copy memory - char *to, *from; - unsigned size; - - if (argc > 3) { - to = (char *)p_ASCIIToHex(argv[1]); - from = (char *)p_ASCIIToHex(argv[2]); - size = p_ASCIIToHex(argv[3]); - memcpy(to, from, size); - } - break; - } - - case COMMAND_DUMP: - // display boot commands - DumpBootCommands(); - break; - - case COMMAND_EXEC: - { - // "e
" - // execute at address - void (*execAddr)(unsigned, unsigned, unsigned); - - if (argc > 1) { - /* in future, include machtypes (MACH_KB9200 = 612) */ - execAddr = (void (*)(unsigned, unsigned, unsigned)) - p_ASCIIToHex(argv[1]); - (*execAddr)(0, 612, tagAddress); - } - break; - } - - case COMMAND_TFTP: - { - // "tftp " - // tftp download - unsigned address = 0; - - if (argc > 2) - address = p_ASCIIToHex(argv[1]); - TFTP_Download(address, argv[2]); - break; - } - - case COMMAND_SERVER_IP: - // "server_ip " - // set download server address - if (argc > 4) - SetServerIPAddress(BuildIP()); - break; - - case COMMAND_HELP: - // dump command info - printf("Commands:\n" - "\tc\n" - "\td\n" - "\te\n" - "\tip\n" - "\tserver_ip\n" - "\tm\n" - "\ttftp\n" - "\ts\n" -#ifdef SUPPORT_TAG_LIST - "\tt\n" -#endif - "\tw\n" - "\tx\n"); - break; - - case COMMAND_LOCAL_IP: - // "local_ip - // set ip of this module - if (argc > 4) - SetLocalIPAddress(BuildIP()); - break; - - case COMMAND_MAC: - { - // "m - // set mac address using 6 byte values - unsigned char mac[6]; - - if (argc > 6) { - for (i = 0; i < 6; i++) - mac[i] = p_ASCIIToHex(argv[i + 1]); - EMAC_SetMACAddress(mac); - } - break; - } - - case COMMAND_SET: - { - // s - // set the boot command at index (0-based) - unsigned index; - - if (argc > 1) { - RestoreSpace(2); - index = p_ASCIIToHex(argv[1]); - SetBootCommand(index, argv[2]); - } - break; - } - -#ifdef SUPPORT_TAG_LIST - case COMMAND_TAG: - // t
- // create tag-list for linux boot - if (argc > 2) { - RestoreSpace(2); - tagAddress = p_ASCIIToHex(argv[1]); - InitTagList(argv[2], (void*)tagAddress); - } - break; -#endif - - case COMMAND_WRITE: - // write the command table to non-volatile - WriteCommandTable(); - break; - - case COMMAND_XMODEM: - { - // "x
" - // download X-modem record at address - if (argc > 1) - xmodem_rx((char *)p_ASCIIToHex(argv[1])); - break; - } - - default: - break; - } - - printf("\n"); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void ServicePrompt(char) - * This private function process each character checking for valid commands. - * This function is only executed if the character is considered valid. - * Each command is terminated with NULL (0) or ''. - * .KB_C_FN_DEFINITION_END - */ -static void -ServicePrompt(char p_char) -{ - if (p_char == '\r') - p_char = 0; - - if (p_char == '\010') { - if (buffCount) { - /* handle backspace BS */ - inputBuffer[--buffCount] = 0; - printf(backspaceString); - } - return; - } - if (buffCount < MAX_INPUT_SIZE - 1) { - inputBuffer[buffCount++] = p_char; - putchar(p_char); - } - if (!p_char) { - printf("\n"); - ParseCommand(inputBuffer); - p_memset(inputBuffer, 0, MAX_INPUT_SIZE); - buffCount = 0; - printf("\n>"); - } -} - - -/* ************************** GLOBAL FUNCTIONS ********************************/ - - -/* - * .KB_C_FN_DEFINITION_START - * void Bootloader(void *inputFunction) - * This global function is the entry point for the bootloader. If the - * inputFunction pointer is NULL, the loader input will be serviced from - * the uart. Otherwise, inputFunction is called to get characters which - * the loader will parse. - * .KB_C_FN_DEFINITION_END - */ -void -Bootloader(int(*inputFunction)(int)) -{ - int ch = 0; - - p_memset((void*)inputBuffer, 0, sizeof(inputBuffer)); - - buffCount = 0; - if (!inputFunction) { - inputFunction = getc; - } - - printf("\n>"); - - while (1) - if ((ch = ((*inputFunction)(0))) > 0) - ServicePrompt(ch); -} Property changes on: head/sys/boot/arm/at91/bootiic/loader_prompt.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootiic/Makefile =================================================================== --- head/sys/boot/arm/at91/bootiic/Makefile (revision 324981) +++ head/sys/boot/arm/at91/bootiic/Makefile (nonexistent) @@ -1,14 +0,0 @@ -# $FreeBSD$ - -.PATH: ${.CURDIR}/../libat91 - -P=bootiic -FILES=${P} -SRCS=arm_init.S main.c loader_prompt.c env_vars.c -MAN= -LDFLAGS=-e 0 -T ${.CURDIR}/../linker.cfg -OBJS+= ${SRCS:N*.h:R:S/$/.o/g} - -.include - -CFLAGS += -DBOOT_IIC -DBOOT_COMMANDS Property changes on: head/sys/boot/arm/at91/bootiic/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/env_vars.c =================================================================== --- head/sys/boot/arm/at91/bootspi/env_vars.c (revision 324981) +++ head/sys/boot/arm/at91/bootspi/env_vars.c (nonexistent) @@ -1,130 +0,0 @@ -/****************************************************************************** - * - * Filename: env_vars.c - * - * Instantiation of environment variables, structures, and other globals. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "env_vars.h" -#include "loader_prompt.h" -#include "lib.h" - -/******************************* GLOBALS *************************************/ -char boot_commands[MAX_BOOT_COMMANDS][MAX_INPUT_SIZE]; - -char env_table[MAX_ENV_SIZE_BYTES]; - -extern char BootCommandSection; - -/************************** PRIVATE FUNCTIONS ********************************/ - - -static int currentIndex; -static int currentOffset; - - -/* - * .KB_C_FN_DEFINITION_START - * int ReadCharFromEnvironment(char *) - * This private function reads characters from the environment variables - * to service the command prompt during auto-boot or just to setup the - * default environment. Returns positive value if valid character was - * set in the pointer. Returns negative value to signal input stream - * terminated. Returns 0 to indicate _wait_ condition. - * .KB_C_FN_DEFINITION_END - */ -static int -ReadCharFromEnvironment(int timeout) -{ - int ch; - - if (currentIndex < MAX_BOOT_COMMANDS) { - ch = boot_commands[currentIndex][currentOffset++]; - if (ch == '\0' || (currentOffset >= MAX_INPUT_SIZE)) { - currentOffset = 0; - ++currentIndex; - ch = '\r'; - } - return (ch); - } - - return (-1); -} - - -/*************************** GLOBAL FUNCTIONS ********************************/ - - -/* - * .KB_C_FN_DEFINITION_START - * void DumpBootCommands(void) - * This global function displays the current boot commands. - * .KB_C_FN_DEFINITION_END - */ -void -DumpBootCommands(void) -{ - int i; - - for (i = 0; boot_commands[i][0]; i++) - printf("0x%x : %s[E]\n", i, boot_commands[i]); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void LoadBootCommands(void) - * This global function loads the existing boot commands from raw format and - * coverts it to the standard, command-index format. Notice, the processed - * boot command table has much more space allocated than the actual table - * stored in non-volatile memory. This is because the processed table - * exists in RAM which is larger than the non-volatile space. - * .KB_C_FN_DEFINITION_END - */ -void -LoadBootCommands(void) -{ - int index, j; - char *cptr; - - p_memset((char*)boot_commands, 0, sizeof(boot_commands)); - cptr = &BootCommandSection; - for (index = 0; *cptr; index++) { - for (j = 0; *cptr; j++) - boot_commands[index][j] = *cptr++; - cptr++; - } -} - - -/* - * .KB_C_FN_DEFINITION_START - * void ExecuteEnvironmentFunctions(void) - * This global function executes applicable entries in the environment. - * .KB_C_FN_DEFINITION_END - */ -void -ExecuteEnvironmentFunctions(void) -{ - currentIndex = 0; - currentOffset = 0; - - DumpBootCommands(); - printf("Autoboot...\n"); - Bootloader(ReadCharFromEnvironment); -} Property changes on: head/sys/boot/arm/at91/bootspi/env_vars.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/loader_prompt.h =================================================================== --- head/sys/boot/arm/at91/bootspi/loader_prompt.h (revision 324981) +++ head/sys/boot/arm/at91/bootspi/loader_prompt.h (nonexistent) @@ -1,62 +0,0 @@ -/****************************************************************************** - * - * Filename: loader_prompt.h - * - * Definition of the interactive loader functions. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#ifndef _LOADER_PROMPT_H_ -#define _LOADER_PROMPT_H_ - -#define MAX_INPUT_SIZE 256 -#define MAX_COMMAND_PARAMS 10 - -enum { - COMMAND_INVALID = 0, - COMMAND_COPY, - COMMAND_DUMP, - COMMAND_EXEC, - COMMAND_HELP, - COMMAND_LOCAL_IP, - COMMAND_MAC, - COMMAND_SERVER_IP, - COMMAND_SET, - COMMAND_TAG, - COMMAND_TFTP, - COMMAND_WRITE, - COMMAND_XMODEM, - COMMAND_RESET, - COMMAND_LOAD_SPI_KERNEL, - COMMAND_REPLACE_KERNEL_VIA_XMODEM, - COMMAND_REPLACE_FLASH_VIA_XMODEM, - COMMAND_REPLACE_FPGA_VIA_XMODEM, - COMMAND_REPLACE_ID_EEPROM, - COMMAND_FINAL_FLAG -} e_cmd_t; - - -typedef struct { - int command; - const char *c_string; -} command_entry_t; - -void EnterInteractiveBootloader(int(*inputFunction)(int)); -void Bootloader(int(*inputFunction)(int)); -void fpga_load(void); - -#endif /* _LOADER_PROMPT_H_ */ Property changes on: head/sys/boot/arm/at91/bootspi/loader_prompt.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/main.c =================================================================== --- head/sys/boot/arm/at91/bootspi/main.c (revision 324981) +++ head/sys/boot/arm/at91/bootspi/main.c (nonexistent) @@ -1,65 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provided by kwikbyte without - * copyright as follows: - * - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * - * $FreeBSD$ - */ - -#include "env_vars.h" -#include "at91rm9200.h" -#include "at91rm9200_lowlevel.h" -#include "loader_prompt.h" -#include "emac.h" -#include "lib.h" -#include "spi_flash.h" -#include "ee.h" - -int main(void); - -int -main(void) -{ - printf("\nBoot\n"); - EEInit(); - SPI_InitFlash(); -#ifdef TSC_FPGA - fpga_load(); -#endif - EMAC_Init(); - LoadBootCommands(); - if (getc(1) == -1) { - start_wdog(30); - ExecuteEnvironmentFunctions(); - } - Bootloader(getc); - return (1); -} Property changes on: head/sys/boot/arm/at91/bootspi/main.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/README =================================================================== --- head/sys/boot/arm/at91/bootspi/README (revision 324981) +++ head/sys/boot/arm/at91/bootspi/README (nonexistent) @@ -1,34 +0,0 @@ -$FreeBSD$ - -This image is intended to be programmed into boot EEPROM. The image is nearly -0x4000 so it will not fit in KB9200's 0x2000. It is intended for KB9201 or -later. Alternatively, the KB9200 can be upgraded with larger EEPROM. -It performs basic functions prior to executing an image at a -specified address. The pre-boot functions can be modified and saved back into -EEPROM. -The MAC address is set with 0.0.0.0.0.0 by default. This is an invalid address -and must be changed to a valid value in order to use the ethernet interface. - -Memory usage: - -EEPROM = 0x4000 -SDRAM = - run stack = 0x21800000 - variables = 0x21200000 - ethernet = 0x21000000 (buffers and descriptors) - - -Functions supported: - - c - copy - d - display auto command table (in RAM) - e - execute image - ? - help - ip - set local ip - m - set mac - server_ip - set server ip - s - set auto command entry - t - create linux boot tag list - tftp - download image via tftp - w - update auto command table - x - download image via xmodem Property changes on: head/sys/boot/arm/at91/bootspi/README ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/env_vars.h =================================================================== --- head/sys/boot/arm/at91/bootspi/env_vars.h (revision 324981) +++ head/sys/boot/arm/at91/bootspi/env_vars.h (nonexistent) @@ -1,54 +0,0 @@ -/****************************************************************************** - * - * Filename: env_vars.h - * - * Definition of environment variables, structures, and other globals. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#ifndef _ENV_VARS_H_ -#define _ENV_VARS_H_ - -/* each environment variable is a string following the standard command */ -/* definition used by the interactive loader in the following format: */ -/* ... */ -/* all environment variables (or commands) are stored in a string */ -/* format: NULL-terminated. */ -/* this implies that commands can never utilize 0-values: actual 0, not */ -/* the string '0'. this is not an issue as the string '0' is handled */ -/* by the command parse routine. */ - -/* the following defines the maximum size of the environment for */ -/* including variables. */ -/* this value must match that declared in the low-level file that */ -/* actually reserves the space for the non-volatile environment. */ -#define MAX_ENV_SIZE_BYTES 0x100 - -#define MAX_BOOT_COMMANDS 10 - -/* C-style reference section */ -#ifndef __ASSEMBLY__ - -extern void WriteCommandTable(void); -extern void SetBootCommand(int index, char *command); -extern void DumpBootCommands(void); -extern void LoadBootCommands(void); -extern void ExecuteEnvironmentFunctions(void); - -#endif /* !__ASSEMBLY__ */ - -#endif /* _ENV_VARS_H_ */ Property changes on: head/sys/boot/arm/at91/bootspi/env_vars.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/ee.c =================================================================== --- head/sys/boot/arm/at91/bootspi/ee.c (revision 324981) +++ head/sys/boot/arm/at91/bootspi/ee.c (nonexistent) @@ -1,160 +0,0 @@ -/****************************************************************************** - * - * Filename: eeprom.c - * - * Instantiation of eeprom routines - * - * Revision information: - * - * 28AUG2004 kb_admin initial creation - adapted from Atmel sources - * 12JAN2005 kb_admin fixed clock generation, write polling, init - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "at91rm9200_lowlevel.h" -#include "at91rm9200.h" -#include "lib.h" -#include "ee.h" - -/******************************* GLOBALS *************************************/ - - -/*********************** PRIVATE FUNCTIONS/DATA ******************************/ - - -/* Use a macro to calculate the TWI clock generator value to save code space. */ -#define AT91C_TWSI_CLOCK 100000 -#define TWSI_EEPROM_ADDRESS 0x40 - -#define TWI_CLK_BASE_DIV ((AT91C_MASTER_CLOCK/(4*AT91C_TWSI_CLOCK)) - 2) -#define SET_TWI_CLOCK ((0x00010000) | (TWI_CLK_BASE_DIV) | (TWI_CLK_BASE_DIV << 8)) - - -/*************************** GLOBAL FUNCTIONS ********************************/ - - -/* - * .KB_C_FN_DEFINITION_START - * void InitEEPROM(void) - * This global function initializes the EEPROM interface (TWI). Intended - * to be called a single time. - * .KB_C_FN_DEFINITION_END - */ -void -EEInit(void) -{ - - AT91PS_TWI twiPtr = (AT91PS_TWI)AT91C_BASE_TWI; - - AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - - pPio->PIO_ASR = AT91C_PIO_PA25 | AT91C_PIO_PA26; - pPio->PIO_PDR = AT91C_PIO_PA25 | AT91C_PIO_PA26; - - pPio->PIO_MDDR = ~AT91C_PIO_PA25; - pPio->PIO_MDER = AT91C_PIO_PA25; - - pPMC->PMC_PCER = 1u << AT91C_ID_TWI; - - twiPtr->TWI_IDR = 0xffffffffu; - twiPtr->TWI_CR = AT91C_TWI_SWRST; - twiPtr->TWI_CR = AT91C_TWI_MSEN | AT91C_TWI_SVDIS; - - twiPtr->TWI_CWGR = SET_TWI_CLOCK; -} - -static inline unsigned -iicaddr(unsigned ee_off) -{ - return (TWSI_EEPROM_ADDRESS | ((ee_off >> 8) & 0x7)); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void ReadEEPROM(unsigned ee_addr, char *data_addr, unsigned size) - * This global function reads data from the eeprom at ee_addr storing data - * to data_addr for size bytes. Assume the TWI has been initialized. - * This function does not utilize the page read mode to simplify the code. - * .KB_C_FN_DEFINITION_END - */ -void -EERead(unsigned ee_off, char *data_addr, unsigned size) -{ - const AT91PS_TWI twiPtr = AT91C_BASE_TWI; - unsigned int status; - - if ((ee_off & ~0xff) != ((ee_off + size) & ~0xff)) { - printf("Crosses page boundary: 0x%x 0x%x\n", ee_off, size); - return; - } - - status = twiPtr->TWI_SR; - status = twiPtr->TWI_RHR; - twiPtr->TWI_MMR = (iicaddr(ee_off) << 16) | AT91C_TWI_IADRSZ_1_BYTE | - AT91C_TWI_MREAD; - twiPtr->TWI_IADR = ee_off & 0xff; - twiPtr->TWI_CR = AT91C_TWI_START; - while (size-- > 1) { - while (!(twiPtr->TWI_SR & AT91C_TWI_RXRDY)) - continue; - *(data_addr++) = twiPtr->TWI_RHR; - } - twiPtr->TWI_CR = AT91C_TWI_STOP; - status = twiPtr->TWI_SR; - while (!(twiPtr->TWI_SR & AT91C_TWI_TXCOMP)) - continue; - *data_addr = twiPtr->TWI_RHR; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void WriteEEPROM(unsigned ee_off, char *data_addr, unsigned size) - * This global function writes data to the eeprom at ee_off using data - * from data_addr for size bytes. Assume the TWI has been initialized. - * This function does not utilize the page write mode as the write time is - * much greater than the time required to access the device for byte-write - * functionality. This allows the function to be much simpler. - * .KB_C_FN_DEFINITION_END - */ -void -EEWrite(unsigned ee_off, const char *data_addr, unsigned size) -{ - const AT91PS_TWI twiPtr = AT91C_BASE_TWI; - unsigned status; - char test_data; - - while (size--) { - // Set the TWI Master Mode Register - twiPtr->TWI_MMR = (iicaddr(ee_off) << 16) | - AT91C_TWI_IADRSZ_1_BYTE; - twiPtr->TWI_IADR = ee_off++; - status = twiPtr->TWI_SR; - - // Load one data byte - twiPtr->TWI_THR = *(data_addr++); - twiPtr->TWI_CR = AT91C_TWI_START; - while (!(twiPtr->TWI_SR & AT91C_TWI_TXRDY)) - continue; - twiPtr->TWI_CR = AT91C_TWI_STOP; - status = twiPtr->TWI_SR; - while (!(twiPtr->TWI_SR & AT91C_TWI_TXCOMP)) - continue; - - // wait for write operation to complete, it is done once - // we can read it back... - EERead(ee_off, &test_data, 1); - } -} Property changes on: head/sys/boot/arm/at91/bootspi/ee.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/ee.h =================================================================== --- head/sys/boot/arm/at91/bootspi/ee.h (revision 324981) +++ head/sys/boot/arm/at91/bootspi/ee.h (nonexistent) @@ -1,6 +0,0 @@ -/* $FreeBSD$ */ - -void EEInit(void); -void EERead(unsigned ee_off, char *data_addr, unsigned size); -void EEWrite(unsigned ee_off, const char *data_addr, unsigned size); - Property changes on: head/sys/boot/arm/at91/bootspi/ee.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/loader_prompt.c =================================================================== --- head/sys/boot/arm/at91/bootspi/loader_prompt.c (revision 324981) +++ head/sys/boot/arm/at91/bootspi/loader_prompt.c (nonexistent) @@ -1,363 +0,0 @@ -/****************************************************************************** - * - * Filename: loader_prompt.c - * - * Instantiation of the interactive loader functions. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin massive changes for tftp, strings, and more - * 05JUL2005 kb_admin save tag address, and set registers on boot - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "at91rm9200_lowlevel.h" -#include "at91rm9200.h" -#include "emac.h" -#include "loader_prompt.h" -#include "env_vars.h" -#include "lib.h" -#include "spi_flash.h" -#include "ee.h" - -/******************************* GLOBALS *************************************/ - - -/*********************** PRIVATE FUNCTIONS/DATA ******************************/ - -static char inputBuffer[MAX_INPUT_SIZE]; -static int buffCount; - -// argv pointer are either NULL or point to locations in inputBuffer -static char *argv[MAX_COMMAND_PARAMS]; - -#define FLASH_OFFSET (0 * FLASH_PAGE_SIZE) -#define KERNEL_OFFSET (220 * FLASH_PAGE_SIZE) -#define KERNEL_LEN (6 * 1024 * FLASH_PAGE_SIZE) -static const char *backspaceString = "\010 \010"; - -static const command_entry_t CommandTable[] = { - {COMMAND_DUMP, "d"}, - {COMMAND_EXEC, "e"}, - {COMMAND_LOCAL_IP, "ip"}, - {COMMAND_MAC, "m"}, - {COMMAND_SERVER_IP, "server_ip"}, - {COMMAND_TFTP, "tftp"}, - {COMMAND_XMODEM, "x"}, - {COMMAND_RESET, "R"}, - {COMMAND_LOAD_SPI_KERNEL, "k"}, - {COMMAND_REPLACE_KERNEL_VIA_XMODEM, "K"}, - {COMMAND_REPLACE_FLASH_VIA_XMODEM, "I"}, - {COMMAND_REPLACE_ID_EEPROM, "E"}, - {COMMAND_FINAL_FLAG, 0} -}; - -/* - * .KB_C_FN_DEFINITION_START - * unsigned BuildIP(void) - * This private function packs the test IP info to an unsigned value. - * .KB_C_FN_DEFINITION_END - */ -static unsigned -BuildIP(void) -{ - return ((p_ASCIIToDec(argv[1]) << 24) | - (p_ASCIIToDec(argv[2]) << 16) | - (p_ASCIIToDec(argv[3]) << 8) | - p_ASCIIToDec(argv[4])); -} - - -/* - * .KB_C_FN_DEFINITION_START - * int StringToCommand(char *cPtr) - * This private function converts a command string to a command code. - * .KB_C_FN_DEFINITION_END - */ -static int -StringToCommand(char *cPtr) -{ - int i; - - for (i = 0; CommandTable[i].command != COMMAND_FINAL_FLAG; ++i) - if (!strcmp(CommandTable[i].c_string, cPtr)) - return (CommandTable[i].command); - - return (COMMAND_INVALID); -} - - -/* - * .KB_C_FN_DEFINITION_START - * int BreakCommand(char *) - * This private function splits the buffer into separate strings as pointed - * by argv and returns the number of parameters (< 0 on failure). - * .KB_C_FN_DEFINITION_END - */ -static int -BreakCommand(char *buffer) -{ - int pCount, cCount, state; - - state = pCount = 0; - p_memset((char*)argv, 0, sizeof(argv)); - - for (cCount = 0; cCount < MAX_INPUT_SIZE; ++cCount) { - - if (!state) { - /* look for next command */ - if (!p_IsWhiteSpace(buffer[cCount])) { - argv[pCount++] = &buffer[cCount]; - state = 1; - } else { - buffer[cCount] = 0; - } - } else { - /* in command, find next white space */ - if (p_IsWhiteSpace(buffer[cCount])) { - buffer[cCount] = 0; - state = 0; - } - } - - if (pCount >= MAX_COMMAND_PARAMS) { - return (-1); - } - } - - return (pCount); -} - -#if 0 -static void -UpdateEEProm(int eeaddr) -{ - char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */ - int len; - - while ((len = xmodem_rx(addr)) == -1) - continue; - printf("\nDownloaded %u bytes.\n", len); - WriteEEPROM(eeaddr, 0, addr, len); -} -#endif - -static void -UpdateFlash(int offset) -{ - char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */ - int len, i, off; - - while ((len = xmodem_rx(addr)) == -1) - continue; - printf("\nDownloaded %u bytes.\n", len); - for (i = 0; i < len; i+= FLASH_PAGE_SIZE) { - off = i + offset; - SPI_WriteFlash(off, addr + i, FLASH_PAGE_SIZE); - } -} - -static void -LoadKernelFromSpi(char *addr) -{ - int i, off; - - for (i = 0; i < KERNEL_LEN; i+= FLASH_PAGE_SIZE) { - off = i + KERNEL_OFFSET; - SPI_ReadFlash(off, addr + i, FLASH_PAGE_SIZE); - } -} - -/* - * .KB_C_FN_DEFINITION_START - * void ParseCommand(char *) - * This private function executes matching functions. - * .KB_C_FN_DEFINITION_END - */ -static void -ParseCommand(char *buffer) -{ - int argc, i; - - if ((argc = BreakCommand(buffer)) < 1) - return; - - switch (StringToCommand(argv[0])) { - case COMMAND_DUMP: - // display boot commands - DumpBootCommands(); - break; - - case COMMAND_EXEC: - { - // "e
" - // execute at address - void (*execAddr)(unsigned, unsigned); - - if (argc > 1) { - /* in future, include machtypes (MACH_KB9200 = 612) */ - execAddr = (void (*)(unsigned, unsigned)) - p_ASCIIToHex(argv[1]); - (*execAddr)(0, 612); - } - break; - } - - case COMMAND_TFTP: - { - // "tftp " - // tftp download - unsigned address = 0; - - if (argc > 2) - address = p_ASCIIToHex(argv[1]); - TFTP_Download(address, argv[2]); - break; - } - - case COMMAND_SERVER_IP: - // "server_ip " - // set download server address - if (argc > 4) - SetServerIPAddress(BuildIP()); - break; - - case COMMAND_LOCAL_IP: - // "local_ip - // set ip of this module - if (argc > 4) - SetLocalIPAddress(BuildIP()); - break; - - case COMMAND_MAC: - { - // "m - // set mac address using 6 byte values - unsigned char mac[6]; - - if (argc > 6) { - for (i = 0; i < 6; i++) - mac[i] = p_ASCIIToHex(argv[i + 1]); - EMAC_SetMACAddress(mac); - } - break; - } - - case COMMAND_LOAD_SPI_KERNEL: - // "k
" - if (argc > 1) - LoadKernelFromSpi((char *)p_ASCIIToHex(argv[1])); - break; - - case COMMAND_XMODEM: - // "x
" - // download X-modem record at address - if (argc > 1) - xmodem_rx((char *)p_ASCIIToHex(argv[1])); - break; - - case COMMAND_RESET: - printf("Reset\n"); - reset(); - while (1) continue; - break; - - case COMMAND_REPLACE_KERNEL_VIA_XMODEM: - printf("Updating KERNEL image\n"); - UpdateFlash(KERNEL_OFFSET); - break; - case COMMAND_REPLACE_FLASH_VIA_XMODEM: - printf("Updating FLASH image\n"); - UpdateFlash(FLASH_OFFSET); - break; - - case COMMAND_REPLACE_ID_EEPROM: - { - char buf[25]; - printf("Testing Config EEPROM\n"); - EEWrite(0, "This is a test", 15); - EERead(0, buf, 15); - printf("Found '%s'\n", buf); - break; - } - default: - break; - } - - printf("\n"); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void ServicePrompt(char) - * This private function process each character checking for valid commands. - * This function is only executed if the character is considered valid. - * Each command is terminated with NULL (0) or ''. - * .KB_C_FN_DEFINITION_END - */ -static void -ServicePrompt(char p_char) -{ - if (p_char == '\r') - p_char = 0; - - if (p_char == '\010') { - if (buffCount) { - /* handle backspace BS */ - inputBuffer[--buffCount] = 0; - printf(backspaceString); - } - return; - } - if (buffCount < MAX_INPUT_SIZE - 1) { - inputBuffer[buffCount++] = p_char; - putchar(p_char); - } - if (!p_char) { - printf("\n"); - ParseCommand(inputBuffer); - p_memset(inputBuffer, 0, MAX_INPUT_SIZE); - buffCount = 0; - printf("\n>"); - } -} - - -/* ************************** GLOBAL FUNCTIONS ********************************/ - - -/* - * .KB_C_FN_DEFINITION_START - * void Bootloader(void *inputFunction) - * This global function is the entry point for the bootloader. If the - * inputFunction pointer is NULL, the loader input will be serviced from - * the uart. Otherwise, inputFunction is called to get characters which - * the loader will parse. - * .KB_C_FN_DEFINITION_END - */ -void -Bootloader(int(*inputFunction)(int)) -{ - int ch = 0; - - p_memset((void*)inputBuffer, 0, sizeof(inputBuffer)); - buffCount = 0; - - printf("\n>"); - - while (1) - if ((ch = ((*inputFunction)(0))) > 0) - ServicePrompt(ch); -} Property changes on: head/sys/boot/arm/at91/bootspi/loader_prompt.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/bootspi/Makefile =================================================================== --- head/sys/boot/arm/at91/bootspi/Makefile (revision 324981) +++ head/sys/boot/arm/at91/bootspi/Makefile (nonexistent) @@ -1,19 +0,0 @@ -# $FreeBSD$ - -.include - -.PATH: ${.CURDIR}/../libat91 - -P=bootspi -FILES=${P} -SRCS=arm_init.S main.c loader_prompt.c env_vars.c ee.c -MAN= -LDFLAGS=-e 0 -T ${.CURDIR}/../linker.cfg -OBJS+= ${SRCS:N*.h:R:S/$/.o/g} - -.include - -.if ${MK_FPGA} == "yes" -CFLAGS += -DTSC_FPGA -.endif -CFLAGS += -DBOOT_COMMANDS Property changes on: head/sys/boot/arm/at91/bootspi/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.h =================================================================== --- head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.h (nonexistent) @@ -1,74 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _AT91RM9200_LOWLEVEL_H_ -#define _AT91RM9200_LOWLEVEL_H_ - -/* default system config parameters */ - -#define SDRAM_BASE 0x20000000 - -#ifdef BOOT_KB920X -/* The following divisor sets PLLA frequency: e.g. 10/5 * 90 = 180MHz */ -#define OSC_MAIN_FREQ_DIV 5 /* for 10MHz osc */ -#define SDRAM_WIDTH AT91C_SDRC_DBW_16_BITS -typedef unsigned short sdram_size_t; -#define OSC_MAIN_MULT 90 -#endif - -#ifdef BOOT_CENTIPAD -/* The following divisor sets PLLA frequency: e.g. 10/5 * 90 = 180MHz */ -#define OSC_MAIN_FREQ_DIV 5 /* for 10MHz osc */ -#define SDRAM_WIDTH AT91C_SDRC_DBW_16_BITS -typedef unsigned short sdram_size_t; -#define OSC_MAIN_MULT 90 -#endif - -#ifdef BOOT_BWCT -/* The following divisor sets PLLA frequency: e.g. 16/4 * 45 = 180MHz */ -#define OSC_MAIN_FREQ_DIV 4 /* for 16MHz osc */ -#define SDRAM_WIDTH AT91C_SDRC_DBW_32_BITS -typedef unsigned int sdram_size_t; -#define OSC_MAIN_MULT 45 -#endif - -#ifdef BOOT_TSC -/* The following divisor sets PLLA frequency: e.g. 16/4 * 45 = 180MHz */ -#define OSC_MAIN_FREQ_DIV 4 /* for 16MHz osc */ -#define SDRAM_WIDTH AT91C_SDRC_DBW_32_BITS -typedef unsigned int sdram_size_t; -#define OSC_MAIN_MULT 45 -#endif - -/* Master clock frequency at power-up */ -#define AT91C_MASTER_CLOCK 60000000 - -/* #define GetSeconds() (AT91C_BASE_RTC->RTC_TIMR & AT91C_RTC_SEC) */ -#define GetSeconds() (AT91C_BASE_ST->ST_CRTR >> 15) - -extern void _init(void); - -#endif /* _AT91RM9200_LOWLEVEL_H_ */ Property changes on: head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/sd-card.h =================================================================== --- head/sys/boot/arm/at91/libat91/sd-card.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/sd-card.h (nonexistent) @@ -1,64 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. - * - * $FreeBSD$ - */ - -#ifndef __SD_CARD_H -#define __SD_CARD_H - -/* MCI_read() is the original read function, taking a byte offset and byte - * count. It is preserved to support existing customized boot code that still - * refers to it; it will work fine even on SDHC cards as long as the kernel and - * the metadata for locating it all exist within the first 4GB of the card. - * - * MCI_readblocks() is the new read function, taking offset and length in terms - * of block counts (where the SD spec defines a block as 512 bytes), allowing - * the kernel and filesystem metadata to be located anywhere on an SDHC card. - * - * Returns 0 on success, non-zero on failure. - */ - -int MCI_read (char* dest, unsigned bytenum, unsigned length); -int MCI_readblocks (char* dest, unsigned blknum, unsigned blkcount); - -/* sdcard_init() - get things set up to read from an SD or SDHC card. - * - * Returns 0 on failure, non-zero on success. - */ - -int sdcard_init(void); - -/* By default sdcard_init() sets things up for a 1-wire interface to the - * SD card. Calling sdcard_4wire(true) after sdcard_init() allows customized - * boot code to change to 4-bit transfers when the hardware supports it. - * - * Returns 0 on failure, non-zero on success. - */ -int sdcard_use4wire(int use4wire); - -#endif - Property changes on: head/sys/boot/arm/at91/libat91/sd-card.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/putchar.c =================================================================== --- head/sys/boot/arm/at91/libat91/putchar.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/putchar.c (nonexistent) @@ -1,62 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provided by kwikbyte without - * copyright as follows: - * - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "at91rm9200_lowlevel.h" -#include "lib.h" - -/* - * void putchar(int ch) - * Writes a character to the DBGU port. It assumes that DBGU has - * already been initialized. - */ -void -putchar(int ch) -{ - AT91PS_USART pUSART = (AT91PS_USART)AT91C_BASE_DBGU; - - while (!(pUSART->US_CSR & AT91C_US_TXRDY)) - continue; - pUSART->US_THR = (ch & 0xFF); -} - -void -xputchar(int ch) -{ - if (ch == '\n') - putchar('\r'); - putchar(ch); -} Property changes on: head/sys/boot/arm/at91/libat91/putchar.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/reset.c =================================================================== --- head/sys/boot/arm/at91/libat91/reset.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/reset.c (nonexistent) @@ -1,57 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "lib.h" - -/* - * void reset() - * - * Forces a reset of the system. Uses watchdog timer of '1', which - * corresponds to 128 / SLCK seconds (SLCK is 32,768 Hz, so 128/32768 is - * 1 / 256 ~= 5.4ms - */ -void -reset(void) -{ - // The following should effect a reset. - AT91C_BASE_ST->ST_WDMR = 1 | AT91C_ST_RSTEN; - AT91C_BASE_ST->ST_CR = AT91C_ST_WDRST; -} - -/* - * void start_wdog() - * - * Starts a watchdog timer. We force the boot process to get to the point - * it can kick the watch dog part of the ST part for the OS's driver. - */ -void -start_wdog(int n) -{ - // The following should effect a reset after N seconds. - AT91C_BASE_ST->ST_WDMR = (n * (32768 / 128)) | AT91C_ST_RSTEN; - AT91C_BASE_ST->ST_CR = AT91C_ST_WDRST; -} Property changes on: head/sys/boot/arm/at91/libat91/reset.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/emac_init.c =================================================================== --- head/sys/boot/arm/at91/libat91/emac_init.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/emac_init.c (nonexistent) @@ -1,117 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. - * - * $FreeBSD$ - */ - -/****************************************************************************** - * - * Filename: emac.c - * - * Instantiation of routines for MAC/ethernet functions supporting tftp. - * - * Revision information: - * - * 28AUG2004 kb_admin initial creation - * 08JAN2005 kb_admin added tftp download - * also adapted from external sources - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - ******************************************************************************/ - -#include "at91rm9200.h" -#include "at91rm9200_lowlevel.h" -#include "emac.h" -#include "lib.h" - -/* ****************************** GLOBALS *************************************/ - -unsigned localMACSet; -unsigned char localMACAddr[6]; -unsigned localMAClow, localMAChigh; - -/* ********************** PRIVATE FUNCTIONS/DATA ******************************/ - -/* - * .KB_C_FN_DEFINITION_START - * void EMAC_SetMACAddress(unsigned low_address, unsigned high_address) - * This global function sets the MAC address. low_address is the first - * four bytes while high_address is the last 2 bytes of the 48-bit value. - * .KB_C_FN_DEFINITION_END - */ -void -EMAC_SetMACAddress(unsigned char mac[6]) -{ - AT91PS_PMC pPMC = AT91C_BASE_PMC; - AT91PS_EMAC pEmac = AT91C_BASE_EMAC; - - /* enable the peripheral clock before using EMAC */ - pPMC->PMC_PCER = ((unsigned) 1 << AT91C_ID_EMAC); - - memcpy(localMACAddr, mac, 6); - localMAClow = (mac[3] << 24) | (mac[2] << 16) | (mac[1] << 8) | mac[0]; - localMAChigh = (mac[5] << 8) | mac[4]; - localMACSet = 1; - - AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_EMAC; - AT91C_BASE_PIOA->PIO_ASR = - AT91C_PIO_PA14 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | - AT91C_PIO_PA8 | AT91C_PIO_PA16 | AT91C_PIO_PA9 | - AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA15 | - AT91C_PIO_PA7; - AT91C_BASE_PIOA->PIO_PDR = - AT91C_PIO_PA14 | AT91C_PIO_PA12 | AT91C_PIO_PA13 | - AT91C_PIO_PA8 | AT91C_PIO_PA16 | AT91C_PIO_PA9 | - AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA15 | - AT91C_PIO_PA7; -#if defined(BOOT_KB920X) | defined(BOOT_BWCT) /* Really !RMII */ - AT91C_BASE_PIOB->PIO_BSR = - AT91C_PIO_PB12 | AT91C_PIO_PB13 | AT91C_PIO_PB14 | - AT91C_PIO_PB15 | AT91C_PIO_PB16 | AT91C_PIO_PB17 | - AT91C_PIO_PB18 | AT91C_PIO_PB19; - AT91C_BASE_PIOB->PIO_PDR = - AT91C_PIO_PB12 | AT91C_PIO_PB13 | AT91C_PIO_PB14 | - AT91C_PIO_PB15 | AT91C_PIO_PB16 | AT91C_PIO_PB17 | - AT91C_PIO_PB18 | AT91C_PIO_PB19; -#endif - pEmac->EMAC_CTL = 0; - - pEmac->EMAC_CFG = (pEmac->EMAC_CFG & ~(AT91C_EMAC_CLK)) | -#ifdef BOOT_TSC - AT91C_EMAC_RMII | -#endif - AT91C_EMAC_CLK_HCLK_32 | AT91C_EMAC_CAF; - // the sequence write EMAC_SA1L and write EMAC_SA1H must be respected - pEmac->EMAC_SA1L = localMAClow; - pEmac->EMAC_SA1H = localMAChigh; -} Property changes on: head/sys/boot/arm/at91/libat91/emac_init.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/at91rm9200.h =================================================================== --- head/sys/boot/arm/at91/libat91/at91rm9200.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/at91rm9200.h (nonexistent) @@ -1,2411 +0,0 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// The software is delivered "AS IS" without warranty or condition of any -// kind, either express, implied or statutory. This includes without -// limitation any warranty or condition with respect to merchantability or -// fitness for any particular purpose, or against the infringements of -// intellectual property rights of others. -// ---------------------------------------------------------------------------- -// $FreeBSD$ -// -// File Name : AT91RM9200.h -// Object : AT91RM9200 definitions -// Generated : AT91 SW Application Group 07/04/2003 (11:05:04) -// -// CVS Reference : /AT91RM9200.pl/1.16/Fri Feb 07 09:29:50 2003// -// CVS Reference : /SYS_AT91RM9200.pl/1.2/Fri Jan 17 11:44:36 2003// -// CVS Reference : /MC_1760A.pl/1.1/Fri Aug 23 13:38:22 2002// -// CVS Reference : /AIC_1796B.pl/1.1.1.1/Fri Jun 28 08:36:46 2002// -// CVS Reference : /PMC_2636A.pl/1.1.1.1/Fri Jun 28 08:36:48 2002// -// CVS Reference : /ST_1763B.pl/1.1/Fri Aug 23 13:41:42 2002// -// CVS Reference : /RTC_1245D.pl/1.2/Fri Jan 31 11:19:06 2003// -// CVS Reference : /PIO_1725D.pl/1.1.1.1/Fri Jun 28 08:36:46 2002// -// CVS Reference : /DBGU_1754A.pl/1.4/Fri Jan 31 11:18:24 2003// -// CVS Reference : /UDP_1765B.pl/1.3/Fri Aug 02 13:45:38 2002// -// CVS Reference : /MCI_1764A.pl/1.2/Thu Nov 14 16:48:24 2002// -// CVS Reference : /US_1739C.pl/1.2/Fri Jul 12 06:49:24 2002// -// CVS Reference : /SPI_AT91RMxxxx.pl/1.3/Tue Nov 26 09:20:28 2002// -// CVS Reference : /SSC_1762A.pl/1.2/Fri Nov 08 12:26:38 2002// -// CVS Reference : /TC_1753B.pl/1.2/Fri Jan 31 11:19:54 2003// -// CVS Reference : /TWI_1761B.pl/1.4/Fri Feb 07 09:30:06 2003// -// CVS Reference : /PDC_1734B.pl/1.2/Thu Nov 21 15:38:22 2002// -// CVS Reference : /UHP_xxxxA.pl/1.1/Mon Jul 22 11:21:58 2002// -// CVS Reference : /EMAC_1794A.pl/1.4/Fri Jan 17 11:11:54 2003// -// CVS Reference : /EBI_1759B.pl/1.10/Fri Jan 17 11:44:28 2003// -// CVS Reference : /SMC_1783A.pl/1.3/Thu Oct 31 13:38:16 2002// -// CVS Reference : /SDRC_1758B.pl/1.2/Thu Oct 03 12:04:40 2002// -// CVS Reference : /BFC_1757B.pl/1.3/Thu Oct 31 13:38:00 2002// -// ---------------------------------------------------------------------------- - -#ifndef AT91RM9200_H -#define AT91RM9200_H - -#define ATMEL_ENV - -typedef volatile unsigned int AT91_REG;// Hardware register definition - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_C1R; // Chip ID1 Register - AT91_REG DBGU_C2R; // Chip ID2 Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pad Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[85]; // - AT91_REG PIOB_PER; // PIO Enable Register - AT91_REG PIOB_PDR; // PIO Disable Register - AT91_REG PIOB_PSR; // PIO Status Register - AT91_REG Reserved13[1]; // - AT91_REG PIOB_OER; // Output Enable Register - AT91_REG PIOB_ODR; // Output Disable Registerr - AT91_REG PIOB_OSR; // Output Status Register - AT91_REG Reserved14[1]; // - AT91_REG PIOB_IFER; // Input Filter Enable Register - AT91_REG PIOB_IFDR; // Input Filter Disable Register - AT91_REG PIOB_IFSR; // Input Filter Status Register - AT91_REG Reserved15[1]; // - AT91_REG PIOB_SODR; // Set Output Data Register - AT91_REG PIOB_CODR; // Clear Output Data Register - AT91_REG PIOB_ODSR; // Output Data Status Register - AT91_REG PIOB_PDSR; // Pin Data Status Register - AT91_REG PIOB_IER; // Interrupt Enable Register - AT91_REG PIOB_IDR; // Interrupt Disable Register - AT91_REG PIOB_IMR; // Interrupt Mask Register - AT91_REG PIOB_ISR; // Interrupt Status Register - AT91_REG PIOB_MDER; // Multi-driver Enable Register - AT91_REG PIOB_MDDR; // Multi-driver Disable Register - AT91_REG PIOB_MDSR; // Multi-driver Status Register - AT91_REG Reserved16[1]; // - AT91_REG PIOB_PPUDR; // Pull-up Disable Register - AT91_REG PIOB_PPUER; // Pull-up Enable Register - AT91_REG PIOB_PPUSR; // Pad Pull-up Status Register - AT91_REG Reserved17[1]; // - AT91_REG PIOB_ASR; // Select A Register - AT91_REG PIOB_BSR; // Select B Register - AT91_REG PIOB_ABSR; // AB Select Status Register - AT91_REG Reserved18[9]; // - AT91_REG PIOB_OWER; // Output Write Enable Register - AT91_REG PIOB_OWDR; // Output Write Disable Register - AT91_REG PIOB_OWSR; // Output Write Status Register - AT91_REG Reserved19[85]; // - AT91_REG PIOC_PER; // PIO Enable Register - AT91_REG PIOC_PDR; // PIO Disable Register - AT91_REG PIOC_PSR; // PIO Status Register - AT91_REG Reserved20[1]; // - AT91_REG PIOC_OER; // Output Enable Register - AT91_REG PIOC_ODR; // Output Disable Registerr - AT91_REG PIOC_OSR; // Output Status Register - AT91_REG Reserved21[1]; // - AT91_REG PIOC_IFER; // Input Filter Enable Register - AT91_REG PIOC_IFDR; // Input Filter Disable Register - AT91_REG PIOC_IFSR; // Input Filter Status Register - AT91_REG Reserved22[1]; // - AT91_REG PIOC_SODR; // Set Output Data Register - AT91_REG PIOC_CODR; // Clear Output Data Register - AT91_REG PIOC_ODSR; // Output Data Status Register - AT91_REG PIOC_PDSR; // Pin Data Status Register - AT91_REG PIOC_IER; // Interrupt Enable Register - AT91_REG PIOC_IDR; // Interrupt Disable Register - AT91_REG PIOC_IMR; // Interrupt Mask Register - AT91_REG PIOC_ISR; // Interrupt Status Register - AT91_REG PIOC_MDER; // Multi-driver Enable Register - AT91_REG PIOC_MDDR; // Multi-driver Disable Register - AT91_REG PIOC_MDSR; // Multi-driver Status Register - AT91_REG Reserved23[1]; // - AT91_REG PIOC_PPUDR; // Pull-up Disable Register - AT91_REG PIOC_PPUER; // Pull-up Enable Register - AT91_REG PIOC_PPUSR; // Pad Pull-up Status Register - AT91_REG Reserved24[1]; // - AT91_REG PIOC_ASR; // Select A Register - AT91_REG PIOC_BSR; // Select B Register - AT91_REG PIOC_ABSR; // AB Select Status Register - AT91_REG Reserved25[9]; // - AT91_REG PIOC_OWER; // Output Write Enable Register - AT91_REG PIOC_OWDR; // Output Write Disable Register - AT91_REG PIOC_OWSR; // Output Write Status Register - AT91_REG Reserved26[85]; // - AT91_REG PIOD_PER; // PIO Enable Register - AT91_REG PIOD_PDR; // PIO Disable Register - AT91_REG PIOD_PSR; // PIO Status Register - AT91_REG Reserved27[1]; // - AT91_REG PIOD_OER; // Output Enable Register - AT91_REG PIOD_ODR; // Output Disable Registerr - AT91_REG PIOD_OSR; // Output Status Register - AT91_REG Reserved28[1]; // - AT91_REG PIOD_IFER; // Input Filter Enable Register - AT91_REG PIOD_IFDR; // Input Filter Disable Register - AT91_REG PIOD_IFSR; // Input Filter Status Register - AT91_REG Reserved29[1]; // - AT91_REG PIOD_SODR; // Set Output Data Register - AT91_REG PIOD_CODR; // Clear Output Data Register - AT91_REG PIOD_ODSR; // Output Data Status Register - AT91_REG PIOD_PDSR; // Pin Data Status Register - AT91_REG PIOD_IER; // Interrupt Enable Register - AT91_REG PIOD_IDR; // Interrupt Disable Register - AT91_REG PIOD_IMR; // Interrupt Mask Register - AT91_REG PIOD_ISR; // Interrupt Status Register - AT91_REG PIOD_MDER; // Multi-driver Enable Register - AT91_REG PIOD_MDDR; // Multi-driver Disable Register - AT91_REG PIOD_MDSR; // Multi-driver Status Register - AT91_REG Reserved30[1]; // - AT91_REG PIOD_PPUDR; // Pull-up Disable Register - AT91_REG PIOD_PPUER; // Pull-up Enable Register - AT91_REG PIOD_PPUSR; // Pad Pull-up Status Register - AT91_REG Reserved31[1]; // - AT91_REG PIOD_ASR; // Select A Register - AT91_REG PIOD_BSR; // Select B Register - AT91_REG PIOD_ABSR; // AB Select Status Register - AT91_REG Reserved32[9]; // - AT91_REG PIOD_OWER; // Output Write Enable Register - AT91_REG PIOD_OWDR; // Output Write Disable Register - AT91_REG PIOD_OWSR; // Output Write Status Register - AT91_REG Reserved33[85]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved34[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved35[1]; // - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG CKGR_PLLAR; // PLL A Register - AT91_REG CKGR_PLLBR; // PLL B Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved36[3]; // - AT91_REG PMC_PCKR[8]; // Programmable Clock Register - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved37[36]; // - AT91_REG ST_CR; // Control Register - AT91_REG ST_PIMR; // Period Interval Mode Register - AT91_REG ST_WDMR; // Watchdog Mode Register - AT91_REG ST_RTMR; // Real-time Mode Register - AT91_REG ST_SR; // Status Register - AT91_REG ST_IER; // Interrupt Enable Register - AT91_REG ST_IDR; // Interrupt Disable Register - AT91_REG ST_IMR; // Interrupt Mask Register - AT91_REG ST_RTAR; // Real-time Alarm Register - AT91_REG ST_CRTR; // Current Real-time Register - AT91_REG Reserved38[54]; // - AT91_REG RTC_CR; // Control Register - AT91_REG RTC_MR; // Mode Register - AT91_REG RTC_TIMR; // Time Register - AT91_REG RTC_CALR; // Calendar Register - AT91_REG RTC_TIMALR; // Time Alarm Register - AT91_REG RTC_CALALR; // Calendar Alarm Register - AT91_REG RTC_SR; // Status Register - AT91_REG RTC_SCCR; // Status Clear Command Register - AT91_REG RTC_IER; // Interrupt Enable Register - AT91_REG RTC_IDR; // Interrupt Disable Register - AT91_REG RTC_IMR; // Interrupt Mask Register - AT91_REG RTC_VER; // Valid Entry Register - AT91_REG Reserved39[52]; // - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved40[1]; // - AT91_REG MC_PUIA[16]; // MC Protection Unit Area - AT91_REG MC_PUP; // MC Protection Unit Peripherals - AT91_REG MC_PUER; // MC Protection Unit Enable Register - AT91_REG Reserved41[2]; // - AT91_REG EBI_CSA; // Chip Select Assignment Register - AT91_REG EBI_CFGR; // Configuration Register - AT91_REG Reserved42[2]; // - AT91_REG EBI_SMC2_CSR[8]; // SMC2 Chip Select Register - AT91_REG EBI_SDRC_MR; // SDRAM Controller Mode Register - AT91_REG EBI_SDRC_TR; // SDRAM Controller Refresh Timer Register - AT91_REG EBI_SDRC_CR; // SDRAM Controller Configuration Register - AT91_REG EBI_SDRC_SRR; // SDRAM Controller Self Refresh Register - AT91_REG EBI_SDRC_LPR; // SDRAM Controller Low Power Register - AT91_REG EBI_SDRC_IER; // SDRAM Controller Interrupt Enable Register - AT91_REG EBI_SDRC_IDR; // SDRAM Controller Interrupt Disable Register - AT91_REG EBI_SDRC_IMR; // SDRAM Controller Interrupt Mask Register - AT91_REG EBI_SDRC_ISR; // SDRAM Controller Interrupt Mask Register - AT91_REG Reserved43[3]; // - AT91_REG EBI_BFC_MR; // BFC Mode Register -} AT91S_SYS, *AT91PS_SYS; - - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[1]; // - AT91_REG MC_PUIA[16]; // MC Protection Unit Area - AT91_REG MC_PUP; // MC Protection Unit Peripherals - AT91_REG MC_PUER; // MC Protection Unit Enable Register -} AT91S_MC, *AT91PS_MC; - -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB (0x1u << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD (0x1u << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD (0x1u << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_MPU (0x1u << 2) // (MC) Memory protection Unit Abort Status -#define AT91C_MC_ABTSZ (0x3u << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE (0x0u << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD (0x1u << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD (0x2u << 8) // (MC) Word -#define AT91C_MC_ABTTYP (0x3u << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR (0x0u << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW (0x1u << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH (0x2u << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 (0x1u << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 (0x1u << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 (0x1u << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 (0x1u << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_PUIA : (MC Offset: 0x10) MC Protection Unit Area -------- -#define AT91C_MC_PROT (0x3u << 0) // (MC) Protection -#define AT91C_MC_PROT_PNAUNA 0x0u // (MC) Privilege: No Access, User: No Access -#define AT91C_MC_PROT_PRWUNA 0x1u // (MC) Privilege: Read/Write, User: No Access -#define AT91C_MC_PROT_PRWURO 0x2u // (MC) Privilege: Read/Write, User: Read Only -#define AT91C_MC_PROT_PRWURW 0x3u // (MC) Privilege: Read/Write, User: Read/Write -#define AT91C_MC_SIZE (0xFu << 4) // (MC) Internal Area Size -#define AT91C_MC_SIZE_1KB (0x0u << 4) // (MC) Area size 1KByte -#define AT91C_MC_SIZE_2KB (0x1u << 4) // (MC) Area size 2KByte -#define AT91C_MC_SIZE_4KB (0x2u << 4) // (MC) Area size 4KByte -#define AT91C_MC_SIZE_8KB (0x3u << 4) // (MC) Area size 8KByte -#define AT91C_MC_SIZE_16KB (0x4u << 4) // (MC) Area size 16KByte -#define AT91C_MC_SIZE_32KB (0x5u << 4) // (MC) Area size 32KByte -#define AT91C_MC_SIZE_64KB (0x6u << 4) // (MC) Area size 64KByte -#define AT91C_MC_SIZE_128KB (0x7u << 4) // (MC) Area size 128KByte -#define AT91C_MC_SIZE_256KB (0x8u << 4) // (MC) Area size 256KByte -#define AT91C_MC_SIZE_512KB (0x9u << 4) // (MC) Area size 512KByte -#define AT91C_MC_SIZE_1MB (0xAu << 4) // (MC) Area size 1MByte -#define AT91C_MC_SIZE_2MB (0xBu << 4) // (MC) Area size 2MByte -#define AT91C_MC_SIZE_4MB (0xCu << 4) // (MC) Area size 4MByte -#define AT91C_MC_SIZE_8MB (0xDu << 4) // (MC) Area size 8MByte -#define AT91C_MC_SIZE_16MB (0xEu << 4) // (MC) Area size 16MByte -#define AT91C_MC_SIZE_64MB (0xFu << 4) // (MC) Area size 64MByte -#define AT91C_MC_BA (0x3FFFFu << 10) // (MC) Internal Area Base Address -// -------- MC_PUP : (MC Offset: 0x50) MC Protection Unit Peripheral -------- -// -------- MC_PUER : (MC Offset: 0x54) MC Protection Unit Area -------- -#define AT91C_MC_PUEB (0x1u << 0) // (MC) Protection Unit enable Bit - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real-time Clock Alarm and Parallel Load Interface -// ***************************************************************************** -typedef struct _AT91S_RTC { - AT91_REG RTC_CR; // Control Register - AT91_REG RTC_MR; // Mode Register - AT91_REG RTC_TIMR; // Time Register - AT91_REG RTC_CALR; // Calendar Register - AT91_REG RTC_TIMALR; // Time Alarm Register - AT91_REG RTC_CALALR; // Calendar Alarm Register - AT91_REG RTC_SR; // Status Register - AT91_REG RTC_SCCR; // Status Clear Command Register - AT91_REG RTC_IER; // Interrupt Enable Register - AT91_REG RTC_IDR; // Interrupt Disable Register - AT91_REG RTC_IMR; // Interrupt Mask Register - AT91_REG RTC_VER; // Valid Entry Register -} AT91S_RTC, *AT91PS_RTC; - -// -------- RTC_CR : (RTC Offset: 0x0) RTC Control Register -------- -#define AT91C_RTC_UPDTIM (0x1u << 0) // (RTC) Update Request Time Register -#define AT91C_RTC_UPDCAL (0x1u << 1) // (RTC) Update Request Calendar Register -#define AT91C_RTC_TIMEVSEL (0x3u << 8) // (RTC) Time Event Selection -#define AT91C_RTC_TIMEVSEL_MINUTE (0x0u << 8) // (RTC) Minute change. -#define AT91C_RTC_TIMEVSEL_HOUR (0x1u << 8) // (RTC) Hour change. -#define AT91C_RTC_TIMEVSEL_DAY24 (0x2u << 8) // (RTC) Every day at midnight. -#define AT91C_RTC_TIMEVSEL_DAY12 (0x3u << 8) // (RTC) Every day at noon. -#define AT91C_RTC_CALEVSEL (0x3u << 16) // (RTC) Calendar Event Selection -#define AT91C_RTC_CALEVSEL_WEEK (0x0u << 16) // (RTC) Week change (every Monday at time 00:00:00). -#define AT91C_RTC_CALEVSEL_MONTH (0x1u << 16) // (RTC) Month change (every 01 of each month at time 00:00:00). -#define AT91C_RTC_CALEVSEL_YEAR (0x2u << 16) // (RTC) Year change (every January 1 at time 00:00:00). -// -------- RTC_MR : (RTC Offset: 0x4) RTC Mode Register -------- -#define AT91C_RTC_HRMOD (0x1u << 0) // (RTC) 12-24 hour Mode -// -------- RTC_TIMR : (RTC Offset: 0x8) RTC Time Register -------- -#define AT91C_RTC_SEC (0x7Fu << 0) // (RTC) Current Second -#define AT91C_RTC_MIN (0x7Fu << 8) // (RTC) Current Minute -#define AT91C_RTC_HOUR (0x1Fu << 16) // (RTC) Current Hour -#define AT91C_RTC_AMPM (0x1u << 22) // (RTC) Ante Meridiem, Post Meridiem Indicator -// -------- RTC_CALR : (RTC Offset: 0xc) RTC Calendar Register -------- -#define AT91C_RTC_CENT (0x3Fu << 0) // (RTC) Current Century -#define AT91C_RTC_YEAR (0xFFu << 8) // (RTC) Current Year -#define AT91C_RTC_MONTH (0x1Fu << 16) // (RTC) Current Month -#define AT91C_RTC_DAY (0x7u << 21) // (RTC) Current Day -#define AT91C_RTC_DATE (0x3Fu << 24) // (RTC) Current Date -// -------- RTC_TIMALR : (RTC Offset: 0x10) RTC Time Alarm Register -------- -#define AT91C_RTC_SECEN (0x1u << 7) // (RTC) Second Alarm Enable -#define AT91C_RTC_MINEN (0x1u << 15) // (RTC) Minute Alarm -#define AT91C_RTC_HOUREN (0x1u << 23) // (RTC) Current Hour -// -------- RTC_CALALR : (RTC Offset: 0x14) RTC Calendar Alarm Register -------- -#define AT91C_RTC_MONTHEN (0x1u << 23) // (RTC) Month Alarm Enable -#define AT91C_RTC_DATEEN (0x1u << 31) // (RTC) Date Alarm Enable -// -------- RTC_SR : (RTC Offset: 0x18) RTC Status Register -------- -#define AT91C_RTC_ACKUPD (0x1u << 0) // (RTC) Acknowledge for Update -#define AT91C_RTC_ALARM (0x1u << 1) // (RTC) Alarm Flag -#define AT91C_RTC_SECEV (0x1u << 2) // (RTC) Second Event -#define AT91C_RTC_TIMEV (0x1u << 3) // (RTC) Time Event -#define AT91C_RTC_CALEV (0x1u << 4) // (RTC) Calendar event -// -------- RTC_SCCR : (RTC Offset: 0x1c) RTC Status Clear Command Register -------- -// -------- RTC_IER : (RTC Offset: 0x20) RTC Interrupt Enable Register -------- -// -------- RTC_IDR : (RTC Offset: 0x24) RTC Interrupt Disable Register -------- -// -------- RTC_IMR : (RTC Offset: 0x28) RTC Interrupt Mask Register -------- -// -------- RTC_VER : (RTC Offset: 0x2c) RTC Valid Entry Register -------- -#define AT91C_RTC_NVTIM (0x1u << 0) // (RTC) Non valid Time -#define AT91C_RTC_NVCAL (0x1u << 1) // (RTC) Non valid Calendar -#define AT91C_RTC_NVTIMALR (0x1u << 2) // (RTC) Non valid time Alarm -#define AT91C_RTC_NVCALALR (0x1u << 3) // (RTC) Nonvalid Calendar Alarm - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Timer Interface -// ***************************************************************************** -typedef struct _AT91S_ST { - AT91_REG ST_CR; // Control Register - AT91_REG ST_PIMR; // Period Interval Mode Register - AT91_REG ST_WDMR; // Watchdog Mode Register - AT91_REG ST_RTMR; // Real-time Mode Register - AT91_REG ST_SR; // Status Register - AT91_REG ST_IER; // Interrupt Enable Register - AT91_REG ST_IDR; // Interrupt Disable Register - AT91_REG ST_IMR; // Interrupt Mask Register - AT91_REG ST_RTAR; // Real-time Alarm Register - AT91_REG ST_CRTR; // Current Real-time Register -} AT91S_ST, *AT91PS_ST; - -// -------- ST_CR : (ST Offset: 0x0) System Timer Control Register -------- -#define AT91C_ST_WDRST (0x1u << 0) // (ST) Watchdog Timer Restart -// -------- ST_PIMR : (ST Offset: 0x4) System Timer Period Interval Mode Register -------- -#define AT91C_ST_PIV (0xFFFFu << 0) // (ST) Watchdog Timer Restart -// -------- ST_WDMR : (ST Offset: 0x8) System Timer Watchdog Mode Register -------- -#define AT91C_ST_WDV (0xFFFFu << 0) // (ST) Watchdog Timer Restart -#define AT91C_ST_RSTEN (0x1u << 16) // (ST) Reset Enable -#define AT91C_ST_EXTEN (0x1u << 17) // (ST) External Signal Assertion Enable -// -------- ST_RTMR : (ST Offset: 0xc) System Timer Real-time Mode Register -------- -#define AT91C_ST_RTPRES (0xFFFFu << 0) // (ST) Real-time Timer Prescaler Value -// -------- ST_SR : (ST Offset: 0x10) System Timer Status Register -------- -#define AT91C_ST_PITS (0x1u << 0) // (ST) Period Interval Timer Interrupt -#define AT91C_ST_WDOVF (0x1u << 1) // (ST) Watchdog Overflow -#define AT91C_ST_RTTINC (0x1u << 2) // (ST) Real-time Timer Increment -#define AT91C_ST_ALMS (0x1u << 3) // (ST) Alarm Status -// -------- ST_IER : (ST Offset: 0x14) System Timer Interrupt Enable Register -------- -// -------- ST_IDR : (ST Offset: 0x18) System Timer Interrupt Disable Register -------- -// -------- ST_IMR : (ST Offset: 0x1c) System Timer Interrupt Mask Register -------- -// -------- ST_RTAR : (ST Offset: 0x20) System Timer Real-time Alarm Register -------- -#define AT91C_ST_ALMV (0xFFFFFu << 0) // (ST) Alarm Value Value -// -------- ST_CRTR : (ST Offset: 0x24) System Timer Current Real-time Register -------- -#define AT91C_ST_CRTV (0xFFFFFu << 0) // (ST) Current Real-time Value - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controller -// ***************************************************************************** -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[5]; // - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved2[3]; // - AT91_REG PMC_PCKR[8]; // Programmable Clock Register - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; - -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK (0x1u << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP (0x1u << 1) // (PMC) USB Device Port Clock -#define AT91C_PMC_MCKUDP (0x1u << 2) // (PMC) USB Device Port Master Clock Automatic Disable on Suspend -#define AT91C_PMC_UHP (0x1u << 4) // (PMC) USB Host Port Clock -#define AT91C_PMC_PCK0 (0x1u << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 (0x1u << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 (0x1u << 10) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK3 (0x1u << 11) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK4 (0x1u << 12) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK5 (0x1u << 13) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK6 (0x1u << 14) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK7 (0x1u << 15) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS (0x3u << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK 0x0u // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK 0x1u // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLLA_CLK 0x2u // (PMC) Clock from PLL A is selected -#define AT91C_PMC_CSS_PLLB_CLK 0x3u // (PMC) Clock from PLL B is selected -#define AT91C_PMC_PRES (0x7u << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK (0x0u << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 (0x1u << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 (0x2u << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 (0x3u << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 (0x4u << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 (0x5u << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 (0x6u << 2) // (PMC) Selected clock divided by 64 -#define AT91C_PMC_MDIV (0x3u << 8) // (PMC) Master Clock Division -#define AT91C_PMC_MDIV_1 (0x0u << 8) // (PMC) The master clock and the processor clock are the same -#define AT91C_PMC_MDIV_2 (0x1u << 8) // (PMC) The processor clock is twice as fast as the master clock -#define AT91C_PMC_MDIV_3 (0x2u << 8) // (PMC) The processor clock is three times faster than the master clock -#define AT91C_PMC_MDIV_4 (0x3u << 8) // (PMC) The processor clock is four times faster than the master clock -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS (0x1u << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCKA (0x1u << 1) // (PMC) PLL A Status/Enable/Disable/Mask -#define AT91C_PMC_LOCKB (0x1u << 2) // (PMC) PLL B Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY (0x1u << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY (0x1u << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY (0x1u << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY (0x1u << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK3RDY (0x1u << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK4RDY (0x1u << 12) // (PMC) PCK4_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK5RDY (0x1u << 13) // (PMC) PCK5_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK6RDY (0x1u << 14) // (PMC) PCK6_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK7RDY (0x1u << 15) // (PMC) PCK7_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controller -// ***************************************************************************** -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG CKGR_PLLAR; // PLL A Register - AT91_REG CKGR_PLLBR; // PLL B Register -} AT91S_CKGR, *AT91PS_CKGR; - -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN (0x1u << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCTEST (0x1u << 1) // (CKGR) Oscillator Test -#define AT91C_CKGR_OSCOUNT (0xFFu << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF (0xFFFFu << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY (0x1u << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLAR : (CKGR Offset: 0x8) PLL A Register -------- -#define AT91C_CKGR_DIVA (0xFFu << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIVA_0 0x0u // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIVA_BYPASS 0x1u // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLACOUNT (0x3Fu << 8) // (CKGR) PLL A Counter -#define AT91C_CKGR_OUTA (0x3u << 14) // (CKGR) PLL A Output Frequency Range -#define AT91C_CKGR_OUTA_0 (0x0u << 14) // (CKGR) Please refer to the PLLA datasheet -#define AT91C_CKGR_OUTA_1 (0x1u << 14) // (CKGR) Please refer to the PLLA datasheet -#define AT91C_CKGR_OUTA_2 (0x2u << 14) // (CKGR) Please refer to the PLLA datasheet -#define AT91C_CKGR_OUTA_3 (0x3u << 14) // (CKGR) Please refer to the PLLA datasheet -#define AT91C_CKGR_MULA (0x7FFu << 16) // (CKGR) PLL A Multiplier -#define AT91C_CKGR_SRCA (0x1u << 29) // (CKGR) PLL A Source -// -------- CKGR_PLLBR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIVB (0xFFu << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIVB_0 0x0u // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIVB_BYPASS 0x1u // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLBCOUNT (0x3Fu << 8) // (CKGR) PLL B Counter -#define AT91C_CKGR_OUTB (0x3u << 14) // (CKGR) PLL B Output Frequency Range -#define AT91C_CKGR_OUTB_0 (0x0u << 14) // (CKGR) Please refer to the PLLB datasheet -#define AT91C_CKGR_OUTB_1 (0x1u << 14) // (CKGR) Please refer to the PLLB datasheet -#define AT91C_CKGR_OUTB_2 (0x2u << 14) // (CKGR) Please refer to the PLLB datasheet -#define AT91C_CKGR_OUTB_3 (0x3u << 14) // (CKGR) Please refer to the PLLB datasheet -#define AT91C_CKGR_MULB (0x7FFu << 16) // (CKGR) PLL B Multiplier -#define AT91C_CKGR_USB_96M (0x1u << 28) // (CKGR) Divider for USB Ports -#define AT91C_CKGR_USB_PLL (0x1u << 29) // (CKGR) PLL Use - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controller -// ***************************************************************************** -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pad Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; - - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_C1R; // Chip ID1 Register - AT91_REG DBGU_C2R; // Chip ID2 Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; - -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX (0x1u << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX (0x1u << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN (0x1u << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS (0x1u << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN (0x1u << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS (0x1u << 7) // (DBGU) Transmitter Disable -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR (0x7u << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN (0x0u << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD (0x1u << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE (0x2u << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK (0x3u << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE (0x4u << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP (0x6u << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE (0x3u << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL (0x0u << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO (0x1u << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL (0x2u << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE (0x3u << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY (0x1u << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY (0x1u << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX (0x1u << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX (0x1u << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE (0x1u << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME (0x1u << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE (0x1u << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY (0x1u << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE (0x1u << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF (0x1u << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX (0x1u << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX (0x1u << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST (0x1u << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral Data Controller -// ***************************************************************************** -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; - -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN (0x1u << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS (0x1u << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN (0x1u << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS (0x1u << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; - -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR (0x7u << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST 0x0u // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST 0x7u // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE (0x3u << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE (0x0u << 5) // (AIC) Internal Sources Code Label Level Sensitive -#define AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED (0x1u << 5) // (AIC) Internal Sources Code Label Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL (0x2u << 5) // (AIC) External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE (0x3u << 5) // (AIC) External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ (0x1u << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ (0x1u << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT (0x1u << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK (0x1u << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; - -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN (0x1u << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS (0x1u << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST (0x1u << 7) // (SPI) SPI Software reset -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR (0x1u << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS (0x1u << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED (0x0u << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE (0x1u << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC (0x1u << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_DIV32 (0x1u << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS (0x1u << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB (0x1u << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS (0xFu << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS (0xFFu << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD (0xFFFFu << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS (0xFu << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD (0xFFFFu << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS (0xFu << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF (0x1u << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE (0x1u << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF (0x1u << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES (0x1u << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_SPENDRX (0x1u << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_SPENDTX (0x1u << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF (0x1u << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE (0x1u << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_SPIENS (0x1u << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL (0x1u << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA (0x1u << 1) // (SPI) Clock Phase -#define AT91C_SPI_BITS (0xFu << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 (0x0u << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 (0x1u << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 (0x2u << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 (0x3u << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 (0x4u << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 (0x5u << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 (0x6u << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 (0x7u << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 (0x8u << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR (0xFFu << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS (0xFFu << 16) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBCT (0xFFu << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG SSC_RC0R; // Receive Compare 0 Register - AT91_REG SSC_RC1R; // Receive Compare 1 Register - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved2[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; - -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN (0x1u << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS (0x1u << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN (0x1u << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS (0x1u << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST (0x1u << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS (0x3u << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV 0x0u // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK 0x1u // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK 0x2u // (SSC) RK pin -#define AT91C_SSC_CKO (0x7u << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE (0x0u << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS (0x1u << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX (0x2u << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI (0x1u << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_CKG (0x3u << 6) // (SSC) Receive/Transmit Clock Gating Selection -#define AT91C_SSC_CKG_NONE (0x0u << 6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock -#define AT91C_SSC_CKG_LOW (0x1u << 6) // (SSC) Receive/Transmit Clock enabled only if RF Low -#define AT91C_SSC_CKG_HIGH (0x2u << 6) // (SSC) Receive/Transmit Clock enabled only if RF High -#define AT91C_SSC_START (0xFu << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS (0x0u << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX (0x1u << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF (0x2u << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF (0x3u << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF (0x4u << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF (0x5u << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF (0x6u << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF (0x7u << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 (0x8u << 8) // (SSC) Compare 0 -#define AT91C_SSC_STOP (0x1u << 12) // (SSC) Receive Stop Selection -#define AT91C_SSC_STTOUT (0x1u << 15) // (SSC) Receive/Transmit Start Output Selection -#define AT91C_SSC_STTDLY (0xFFu << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD (0xFFu << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN (0x1Fu << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP (0x1u << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF (0x1u << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB (0xFu << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN (0xFu << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS (0x7u << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE (0x0u << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE (0x1u << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE (0x2u << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW (0x3u << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH (0x4u << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE (0x5u << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE (0x1u << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF (0x1u << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN (0x1u << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY (0x1u << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY (0x1u << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX (0x1u << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE (0x1u << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY (0x1u << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN (0x1u << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX (0x1u << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF (0x1u << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_CP0 (0x1u << 8) // (SSC) Compare 0 -#define AT91C_SSC_CP1 (0x1u << 9) // (SSC) Compare 1 -#define AT91C_SSC_TXSYN (0x1u << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN (0x1u << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA (0x1u << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA (0x1u << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG US_XXR; // XON_XOFF Register - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved1[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; - -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTSTA (0x1u << 8) // (USART) Reset Status Bits -#define AT91C_US_STTBRK (0x1u << 9) // (USART) Start Break -#define AT91C_US_STPBRK (0x1u << 10) // (USART) Stop Break -#define AT91C_US_STTTO (0x1u << 11) // (USART) Start Time-out -#define AT91C_US_SENDA (0x1u << 12) // (USART) Send Address -#define AT91C_US_RSTIT (0x1u << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK (0x1u << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO (0x1u << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN (0x1u << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS (0x1u << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN (0x1u << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS (0x1u << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE (0xFu << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL 0x0u // (USART) Normal -#define AT91C_US_USMODE_RS485 0x1u // (USART) RS485 -#define AT91C_US_USMODE_HWHSH 0x2u // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM 0x3u // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 0x4u // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 0x6u // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA 0x8u // (USART) IrDA -#define AT91C_US_USMODE_SWHSH 0xCu // (USART) Software Handshaking -#define AT91C_US_CLKS (0x3u << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK (0x0u << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 (0x1u << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW (0x2u << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT (0x3u << 4) // (USART) External (SCK) -#define AT91C_US_CHRL (0x3u << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS (0x0u << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS (0x1u << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS (0x2u << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS (0x3u << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC (0x1u << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP (0x3u << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT (0x0u << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT (0x1u << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT (0x2u << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF (0x1u << 16) // (USART) Bit Order -#define AT91C_US_MODE9 (0x1u << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO (0x1u << 18) // (USART) Clock Output Select -#define AT91C_US_OVER (0x1u << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK (0x1u << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK (0x1u << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER (0x1u << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER (0x1u << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK (0x1u << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT (0x1u << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION (0x1u << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK (0x1u << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC (0x1u << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC (0x1u << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC (0x1u << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC (0x1u << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI (0x1u << 20) // (USART) Image of RI Input -#define AT91C_US_DSR (0x1u << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD (0x1u << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS (0x1u << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG TWI_SMR; // Slave Mode Register - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved0[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register -} AT91S_TWI, *AT91PS_TWI; - -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START (0x1u << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP (0x1u << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN (0x1u << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS (0x1u << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SVEN (0x1u << 4) // (TWI) TWI Slave Transfer Enabled -#define AT91C_TWI_SVDIS (0x1u << 5) // (TWI) TWI Slave Transfer Disabled -#define AT91C_TWI_SWRST (0x1u << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ (0x3u << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO (0x0u << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE (0x1u << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE (0x2u << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE (0x3u << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD (0x1u << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR (0x7Fu << 16) // (TWI) Device Address -// -------- TWI_SMR : (TWI Offset: 0x8) TWI Slave Mode Register -------- -#define AT91C_TWI_SADR (0x7Fu << 16) // (TWI) Slave Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV (0xFFu << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV (0xFFu << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV (0x7u << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP (0x1u << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY (0x1u << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY (0x1u << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_SVREAD (0x1u << 3) // (TWI) Slave Read -#define AT91C_TWI_SVACC (0x1u << 4) // (TWI) Slave Access -#define AT91C_TWI_GCACC (0x1u << 5) // (TWI) General Call Access -#define AT91C_TWI_OVRE (0x1u << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE (0x1u << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK (0x1u << 8) // (TWI) Not Acknowledged -#define AT91C_TWI_ARBLST (0x1u << 9) // (TWI) Arbitration Lost -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Multimedia Card Interface -// ***************************************************************************** -typedef struct _AT91S_MCI { - AT91_REG MCI_CR; // MCI Control Register - AT91_REG MCI_MR; // MCI Mode Register - AT91_REG MCI_DTOR; // MCI Data Timeout Register - AT91_REG MCI_SDCR; // MCI SD Card Register - AT91_REG MCI_ARGR; // MCI Argument Register - AT91_REG MCI_CMDR; // MCI Command Register - AT91_REG Reserved0[2]; // - AT91_REG MCI_RSPR[4]; // MCI Response Register - AT91_REG MCI_RDR; // MCI Receive Data Register - AT91_REG MCI_TDR; // MCI Transmit Data Register - AT91_REG Reserved1[2]; // - AT91_REG MCI_SR; // MCI Status Register - AT91_REG MCI_IER; // MCI Interrupt Enable Register - AT91_REG MCI_IDR; // MCI Interrupt Disable Register - AT91_REG MCI_IMR; // MCI Interrupt Mask Register - AT91_REG Reserved2[44]; // - AT91_REG MCI_RPR; // Receive Pointer Register - AT91_REG MCI_RCR; // Receive Counter Register - AT91_REG MCI_TPR; // Transmit Pointer Register - AT91_REG MCI_TCR; // Transmit Counter Register - AT91_REG MCI_RNPR; // Receive Next Pointer Register - AT91_REG MCI_RNCR; // Receive Next Counter Register - AT91_REG MCI_TNPR; // Transmit Next Pointer Register - AT91_REG MCI_TNCR; // Transmit Next Counter Register - AT91_REG MCI_PTCR; // PDC Transfer Control Register - AT91_REG MCI_PTSR; // PDC Transfer Status Register -} AT91S_MCI, *AT91PS_MCI; - -// -------- MCI_CR : (MCI Offset: 0x0) MCI Control Register -------- -#define AT91C_MCI_MCIEN (0x1u << 0) // (MCI) Multimedia Interface Enable -#define AT91C_MCI_MCIDIS (0x1u << 1) // (MCI) Multimedia Interface Disable -#define AT91C_MCI_PWSEN (0x1u << 2) // (MCI) Power Save Mode Enable -#define AT91C_MCI_PWSDIS (0x1u << 3) // (MCI) Power Save Mode Disable -// -------- MCI_MR : (MCI Offset: 0x4) MCI Mode Register -------- -#define AT91C_MCI_CLKDIV (0x1u << 0) // (MCI) Clock Divider -#define AT91C_MCI_PWSDIV (0x1u << 8) // (MCI) Power Saving Divider -#define AT91C_MCI_PDCPADV (0x1u << 14) // (MCI) PDC Padding Value -#define AT91C_MCI_PDCMODE (0x1u << 15) // (MCI) PDC Oriented Mode -#define AT91C_MCI_BLKLEN (0x1u << 18) // (MCI) Data Block Length -// -------- MCI_DTOR : (MCI Offset: 0x8) MCI Data Timeout Register -------- -#define AT91C_MCI_DTOCYC (0x1u << 0) // (MCI) Data Timeout Cycle Number -#define AT91C_MCI_DTOMUL (0x7u << 4) // (MCI) Data Timeout Multiplier -#define AT91C_MCI_DTOMUL_1 (0x0u << 4) // (MCI) DTOCYC x 1 -#define AT91C_MCI_DTOMUL_16 (0x1u << 4) // (MCI) DTOCYC x 16 -#define AT91C_MCI_DTOMUL_128 (0x2u << 4) // (MCI) DTOCYC x 128 -#define AT91C_MCI_DTOMUL_256 (0x3u << 4) // (MCI) DTOCYC x 256 -#define AT91C_MCI_DTOMUL_1024 (0x4u << 4) // (MCI) DTOCYC x 1024 -#define AT91C_MCI_DTOMUL_4096 (0x5u << 4) // (MCI) DTOCYC x 4096 -#define AT91C_MCI_DTOMUL_65536 (0x6u << 4) // (MCI) DTOCYC x 65536 -#define AT91C_MCI_DTOMUL_1048576 (0x7u << 4) // (MCI) DTOCYC x 1048576 -// -------- MCI_SDCR : (MCI Offset: 0xc) MCI SD Card Register -------- -#define AT91C_MCI_SCDSEL (0x1u << 0) // (MCI) SD Card Selector -#define AT91C_MCI_SCDBUS (0x1u << 7) // (MCI) SD Card Bus Width -// -------- MCI_CMDR : (MCI Offset: 0x14) MCI Command Register -------- -// -------- MCI_SR : (MCI Offset: 0x40) MCI Status Register -------- -#define AT91C_MCI_CMDRDY (0x1u << 0) // (MCI) Command Ready flag -#define AT91C_MCI_RXRDY (0x1u << 1) // (MCI) RX Ready flag -#define AT91C_MCI_TXRDY (0x1u << 2) // (MCI) TX Ready flag -#define AT91C_MCI_BLKE (0x1u << 3) // (MCI) Data Block Transfer Ended flag -#define AT91C_MCI_DTIP (0x1u << 4) // (MCI) Data Transfer in Progress flag -#define AT91C_MCI_NOTBUSY (0x1u << 5) // (MCI) Data Line Not Busy flag -#define AT91C_MCI_ENDRX (0x1u << 6) // (MCI) End of RX Buffer flag -#define AT91C_MCI_ENDTX (0x1u << 7) // (MCI) End of TX Buffer flag -#define AT91C_MCI_RXBUFF (0x1u << 14) // (MCI) RX Buffer Full flag -#define AT91C_MCI_TXBUFE (0x1u << 15) // (MCI) TX Buffer Empty flag -#define AT91C_MCI_RINDE (0x1u << 16) // (MCI) Response Index Error flag -#define AT91C_MCI_RDIRE (0x1u << 17) // (MCI) Response Direction Error flag -#define AT91C_MCI_RCRCE (0x1u << 18) // (MCI) Response CRC Error flag -#define AT91C_MCI_RENDE (0x1u << 19) // (MCI) Response End Bit Error flag -#define AT91C_MCI_RTOE (0x1u << 20) // (MCI) Response Time-out Error flag -#define AT91C_MCI_DCRCE (0x1u << 21) // (MCI) data CRC Error flag -#define AT91C_MCI_DTOE (0x1u << 22) // (MCI) Data timeout Error flag -#define AT91C_MCI_OVRE (0x1u << 30) // (MCI) Overrun flag -#define AT91C_MCI_UNRE (0x1u << 31) // (MCI) Underrun flag -// -------- MCI_IER : (MCI Offset: 0x44) MCI Interrupt Enable Register -------- -// -------- MCI_IDR : (MCI Offset: 0x48) MCI Interrupt Disable Register -------- -// -------- MCI_IMR : (MCI Offset: 0x4c) MCI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[8]; // Endpoint Control and Status Register - AT91_REG UDP_FDR[8]; // Endpoint FIFO Data Register -} AT91S_UDP, *AT91PS_UDP; - -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM (0x7FFu << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR (0x1u << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK (0x1u << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN (0x1u << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG (0x1u << 1) // (UDP) Configured -#define AT91C_UDP_RMWUPE (0x1u << 2) // (UDP) Remote Wake Up Enable -#define AT91C_UDP_RSMINPR (0x1u << 3) // (UDP) A Resume Has Been Sent to the Host -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD (0xFFu << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN (0x1u << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 (0x1u << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 (0x1u << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 (0x1u << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 (0x1u << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_EPINT4 (0x1u << 4) // (UDP) Endpoint 4 Interrupt -#define AT91C_UDP_EPINT5 (0x1u << 5) // (UDP) Endpoint 5 Interrupt -#define AT91C_UDP_EPINT6 (0x1u << 6) // (UDP) Endpoint 6 Interrupt -#define AT91C_UDP_EPINT7 (0x1u << 7) // (UDP) Endpoint 7 Interrupt -#define AT91C_UDP_RXSUSP (0x1u << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM (0x1u << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM (0x1u << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT (0x1u << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP (0x1u << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES (0x1u << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 (0x1u << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 (0x1u << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 (0x1u << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 (0x1u << 3) // (UDP) Reset Endpoint 3 -#define AT91C_UDP_EP4 (0x1u << 4) // (UDP) Reset Endpoint 4 -#define AT91C_UDP_EP5 (0x1u << 5) // (UDP) Reset Endpoint 5 -#define AT91C_UDP_EP6 (0x1u << 6) // (UDP) Reset Endpoint 6 -#define AT91C_UDP_EP7 (0x1u << 7) // (UDP) Reset Endpoint 7 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP (0x1u << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 (0x1u << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP (0x1u << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR (0x1u << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_TXPKTRDY (0x1u << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL (0x1u << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 (0x1u << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR (0x1u << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE (0x7u << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL (0x0u << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT (0x1u << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT (0x2u << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT (0x3u << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN (0x5u << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN (0x6u << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN (0x7u << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE (0x1u << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS (0x1u << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT (0x7FFu << 16) // (UDP) Number Of Bytes Available in the FIFO - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; - -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN (0x1u << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS (0x1u << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG (0x1u << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CPCSTOP (0x1u << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_CPCDIS (0x1u << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_EEVTEDG (0x3u << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE (0x0u << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING (0x1u << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING (0x2u << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH (0x3u << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVT (0x3u << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_NONE (0x0u << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_RISING (0x1u << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_FALLING (0x2u << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_BOTH (0x3u << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ENETRG (0x1u << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL (0x3u << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP (0x0u << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO (0x1u << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN (0x2u << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO (0x3u << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG (0x1u << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE (0x1u << 15) // (TC) -#define AT91C_TC_ACPA (0x3u << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE (0x0u << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET (0x1u << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR (0x2u << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE (0x3u << 16) // (TC) Effect: toggle -#define AT91C_TC_ACPC (0x3u << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE (0x0u << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET (0x1u << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR (0x2u << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE (0x3u << 18) // (TC) Effect: toggle -#define AT91C_TC_AEEVT (0x3u << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE (0x0u << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET (0x1u << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR (0x2u << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE (0x3u << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG (0x3u << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE (0x0u << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET (0x1u << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR (0x2u << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE (0x3u << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB (0x3u << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE (0x0u << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET (0x1u << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR (0x2u << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE (0x3u << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC (0x3u << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE (0x0u << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET (0x1u << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR (0x2u << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE (0x3u << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT (0x3u << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE (0x0u << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET (0x1u << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR (0x2u << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE (0x3u << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG (0x3u << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE (0x0u << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET (0x1u << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR (0x2u << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE (0x3u << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS (0x1u << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS (0x1u << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS (0x1u << 2) // (TC) RA Compare -#define AT91C_TC_CPBS (0x1u << 3) // (TC) RB Compare -#define AT91C_TC_CPCS (0x1u << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS (0x1u << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS (0x1u << 6) // (TC) RB Loading -#define AT91C_TC_ETRCS (0x1u << 7) // (TC) External Trigger -#define AT91C_TC_ETRGS (0x1u << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA (0x1u << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB (0x1u << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; - -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC (0x1u << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S (0x1u << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 0x0u // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE 0x1u // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 0x2u // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 0x3u // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S (0x1u << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 (0x0u << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE (0x1u << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 (0x2u << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 (0x3u << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S (0x1u << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 (0x0u << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE (0x1u << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 (0x2u << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA2 (0x3u << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Host Interface -// ***************************************************************************** -typedef struct _AT91S_UHP { - AT91_REG UHP_HcRevision; // Revision - AT91_REG UHP_HcControl; // Operating modes for the Host Controller - AT91_REG UHP_HcCommandStatus; // Command & status Register - AT91_REG UHP_HcInterruptStatus; // Interrupt Status Register - AT91_REG UHP_HcInterruptEnable; // Interrupt Enable Register - AT91_REG UHP_HcInterruptDisable; // Interrupt Disable Register - AT91_REG UHP_HcHCCA; // Pointer to the Host Controller Communication Area - AT91_REG UHP_HcPeriodCurrentED; // Current Isochronous or Interrupt Endpoint Descriptor - AT91_REG UHP_HcControlHeadED; // First Endpoint Descriptor of the Control list - AT91_REG UHP_HcControlCurrentED; // Endpoint Control and Status Register - AT91_REG UHP_HcBulkHeadED; // First endpoint register of the Bulk list - AT91_REG UHP_HcBulkCurrentED; // Current endpoint of the Bulk list - AT91_REG UHP_HcBulkDoneHead; // Last completed transfer descriptor - AT91_REG UHP_HcFmInterval; // Bit time between 2 consecutive SOFs - AT91_REG UHP_HcFmRemaining; // Bit time remaining in the current Frame - AT91_REG UHP_HcFmNumber; // Frame number - AT91_REG UHP_HcPeriodicStart; // Periodic Start - AT91_REG UHP_HcLSThreshold; // LS Threshold - AT91_REG UHP_HcRhDescriptorA; // Root Hub characteristics A - AT91_REG UHP_HcRhDescriptorB; // Root Hub characteristics B - AT91_REG UHP_HcRhStatus; // Root Hub Status register - AT91_REG UHP_HcRhPortStatus[2]; // Root Hub Port Status Register -} AT91S_UHP, *AT91PS_UHP; - - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Ethernet MAC -// ***************************************************************************** -typedef struct _AT91S_EMAC { - AT91_REG EMAC_CTL; // Network Control Register - AT91_REG EMAC_CFG; // Network Configuration Register - AT91_REG EMAC_SR; // Network Status Register - AT91_REG EMAC_TAR; // Transmit Address Register - AT91_REG EMAC_TCR; // Transmit Control Register - AT91_REG EMAC_TSR; // Transmit Status Register - AT91_REG EMAC_RBQP; // Receive Buffer Queue Pointer - AT91_REG Reserved0[1]; // - AT91_REG EMAC_RSR; // Receive Status Register - AT91_REG EMAC_ISR; // Interrupt Status Register - AT91_REG EMAC_IER; // Interrupt Enable Register - AT91_REG EMAC_IDR; // Interrupt Disable Register - AT91_REG EMAC_IMR; // Interrupt Mask Register - AT91_REG EMAC_MAN; // PHY Maintenance Register - AT91_REG Reserved1[2]; // - AT91_REG EMAC_FRA; // Frames Transmitted OK Register - AT91_REG EMAC_SCOL; // Single Collision Frame Register - AT91_REG EMAC_MCOL; // Multiple Collision Frame Register - AT91_REG EMAC_OK; // Frames Received OK Register - AT91_REG EMAC_SEQE; // Frame Check Sequence Error Register - AT91_REG EMAC_ALE; // Alignment Error Register - AT91_REG EMAC_DTE; // Deferred Transmission Frame Register - AT91_REG EMAC_LCOL; // Late Collision Register - AT91_REG EMAC_ECOL; // Excessive Collision Register - AT91_REG EMAC_CSE; // Carrier Sense Error Register - AT91_REG EMAC_TUE; // Transmit Underrun Error Register - AT91_REG EMAC_CDE; // Code Error Register - AT91_REG EMAC_ELR; // Excessive Length Error Register - AT91_REG EMAC_RJB; // Receive Jabber Register - AT91_REG EMAC_USF; // Undersize Frame Register - AT91_REG EMAC_SQEE; // SQE Test Error Register - AT91_REG EMAC_DRFC; // Discarded RX Frame Register - AT91_REG Reserved2[3]; // - AT91_REG EMAC_HSH; // Hash Address High[63:32] - AT91_REG EMAC_HSL; // Hash Address Low[31:0] - AT91_REG EMAC_SA1L; // Specific Address 1 Low, First 4 bytes - AT91_REG EMAC_SA1H; // Specific Address 1 High, Last 2 bytes - AT91_REG EMAC_SA2L; // Specific Address 2 Low, First 4 bytes - AT91_REG EMAC_SA2H; // Specific Address 2 High, Last 2 bytes - AT91_REG EMAC_SA3L; // Specific Address 3 Low, First 4 bytes - AT91_REG EMAC_SA3H; // Specific Address 3 High, Last 2 bytes - AT91_REG EMAC_SA4L; // Specific Address 4 Low, First 4 bytes - AT91_REG EMAC_SA4H; // Specific Address 4 High, Last 2 bytesr -} AT91S_EMAC, *AT91PS_EMAC; - -// -------- EMAC_CTL : (EMAC Offset: 0x0) -------- -#define AT91C_EMAC_LB (0x1u << 0) // (EMAC) Loopback. Optional. When set, loopback signal is at high level. -#define AT91C_EMAC_LBL (0x1u << 1) // (EMAC) Loopback local. -#define AT91C_EMAC_RE (0x1u << 2) // (EMAC) Receive enable. -#define AT91C_EMAC_TE (0x1u << 3) // (EMAC) Transmit enable. -#define AT91C_EMAC_MPE (0x1u << 4) // (EMAC) Management port enable. -#define AT91C_EMAC_CSR (0x1u << 5) // (EMAC) Clear statistics registers. -#define AT91C_EMAC_ISR (0x1u << 6) // (EMAC) Increment statistics registers. -#define AT91C_EMAC_WES (0x1u << 7) // (EMAC) Write enable for statistics registers. -#define AT91C_EMAC_BP (0x1u << 8) // (EMAC) Back pressure. -// -------- EMAC_CFG : (EMAC Offset: 0x4) Network Configuration Register -------- -#define AT91C_EMAC_SPD (0x1u << 0) // (EMAC) Speed. -#define AT91C_EMAC_FD (0x1u << 1) // (EMAC) Full duplex. -#define AT91C_EMAC_BR (0x1u << 2) // (EMAC) Bit rate. -#define AT91C_EMAC_CAF (0x1u << 4) // (EMAC) Copy all frames. -#define AT91C_EMAC_NBC (0x1u << 5) // (EMAC) No broadcast. -#define AT91C_EMAC_MTI (0x1u << 6) // (EMAC) Multicast hash enable -#define AT91C_EMAC_UNI (0x1u << 7) // (EMAC) Unicast hash enable. -#define AT91C_EMAC_BIG (0x1u << 8) // (EMAC) Receive 1522 bytes. -#define AT91C_EMAC_EAE (0x1u << 9) // (EMAC) External address match enable. -#define AT91C_EMAC_CLK (0x3u << 10) // (EMAC) -#define AT91C_EMAC_CLK_HCLK_8 (0x0u << 10) // (EMAC) HCLK divided by 8 -#define AT91C_EMAC_CLK_HCLK_16 (0x1u << 10) // (EMAC) HCLK divided by 16 -#define AT91C_EMAC_CLK_HCLK_32 (0x2u << 10) // (EMAC) HCLK divided by 32 -#define AT91C_EMAC_CLK_HCLK_64 (0x3u << 10) // (EMAC) HCLK divided by 64 -#define AT91C_EMAC_RTY (0x1u << 12) // (EMAC) -#define AT91C_EMAC_RMII (0x1u << 13) // (EMAC) -// -------- EMAC_SR : (EMAC Offset: 0x8) Network Status Register -------- -#define AT91C_EMAC_MDIO (0x1u << 1) // (EMAC) -#define AT91C_EMAC_IDLE (0x1u << 2) // (EMAC) -// -------- EMAC_TCR : (EMAC Offset: 0x10) Transmit Control Register -------- -#define AT91C_EMAC_LEN (0x7FFu << 0) // (EMAC) -#define AT91C_EMAC_NCRC (0x1u << 15) // (EMAC) -// -------- EMAC_TSR : (EMAC Offset: 0x14) Transmit Control Register -------- -#define AT91C_EMAC_OVR (0x1u << 0) // (EMAC) -#define AT91C_EMAC_COL (0x1u << 1) // (EMAC) -#define AT91C_EMAC_RLE (0x1u << 2) // (EMAC) -#define AT91C_EMAC_TXIDLE (0x1u << 3) // (EMAC) -#define AT91C_EMAC_BNQ (0x1u << 4) // (EMAC) -#define AT91C_EMAC_COMP (0x1u << 5) // (EMAC) -#define AT91C_EMAC_UND (0x1u << 6) // (EMAC) -// -------- EMAC_RSR : (EMAC Offset: 0x20) Receive Status Register -------- -#define AT91C_EMAC_BNA (0x1u << 0) // (EMAC) -#define AT91C_EMAC_REC (0x1u << 1) // (EMAC) -// -------- EMAC_ISR : (EMAC Offset: 0x24) Interrupt Status Register -------- -#define AT91C_EMAC_DONE (0x1u << 0) // (EMAC) -#define AT91C_EMAC_RCOM (0x1u << 1) // (EMAC) -#define AT91C_EMAC_RBNA (0x1u << 2) // (EMAC) -#define AT91C_EMAC_TOVR (0x1u << 3) // (EMAC) -#define AT91C_EMAC_TUND (0x1u << 4) // (EMAC) -#define AT91C_EMAC_RTRY (0x1u << 5) // (EMAC) -#define AT91C_EMAC_TBRE (0x1u << 6) // (EMAC) -#define AT91C_EMAC_TCOM (0x1u << 7) // (EMAC) -#define AT91C_EMAC_TIDLE (0x1u << 8) // (EMAC) -#define AT91C_EMAC_LINK (0x1u << 9) // (EMAC) -#define AT91C_EMAC_ROVR (0x1u << 10) // (EMAC) -#define AT91C_EMAC_HRESP (0x1u << 11) // (EMAC) -// -------- EMAC_IER : (EMAC Offset: 0x28) Interrupt Enable Register -------- -// -------- EMAC_IDR : (EMAC Offset: 0x2c) Interrupt Disable Register -------- -// -------- EMAC_IMR : (EMAC Offset: 0x30) Interrupt Mask Register -------- -// -------- EMAC_MAN : (EMAC Offset: 0x34) PHY Maintenance Register -------- -#define AT91C_EMAC_DATA (0xFFFFu << 0) // (EMAC) -#define AT91C_EMAC_CODE (0x3u << 16) // (EMAC) -#define AT91C_EMAC_REGA (0x1Fu << 18) // (EMAC) -#define AT91C_EMAC_PHYA (0x1Fu << 23) // (EMAC) -#define AT91C_EMAC_RW (0x3u << 28) // (EMAC) -#define AT91C_EMAC_HIGH (0x1u << 30) // (EMAC) -#define AT91C_EMAC_LOW (0x1u << 31) // (EMAC) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR External Bus Interface -// ***************************************************************************** -typedef struct _AT91S_EBI { - AT91_REG EBI_CSA; // Chip Select Assignment Register - AT91_REG EBI_CFGR; // Configuration Register -} AT91S_EBI, *AT91PS_EBI; - -// -------- EBI_CSA : (EBI Offset: 0x0) Chip Select Assignment Register -------- -#define AT91C_EBI_CS0A (0x1u << 0) // (EBI) Chip Select 0 Assignment -#define AT91C_EBI_CS0A_SMC 0x0u // (EBI) Chip Select 0 is assigned to the Static Memory Controller. -#define AT91C_EBI_CS0A_BFC 0x1u // (EBI) Chip Select 0 is assigned to the Burst Flash Controller. -#define AT91C_EBI_CS1A (0x1u << 1) // (EBI) Chip Select 1 Assignment -#define AT91C_EBI_CS1A_SMC (0x0u << 1) // (EBI) Chip Select 1 is assigned to the Static Memory Controller. -#define AT91C_EBI_CS1A_SDRAMC (0x1u << 1) // (EBI) Chip Select 1 is assigned to the SDRAM Controller. -#define AT91C_EBI_CS3A (0x1u << 3) // (EBI) Chip Select 3 Assignment -#define AT91C_EBI_CS3A_SMC (0x0u << 3) // (EBI) Chip Select 3 is only assigned to the Static Memory Controller and NCS3 behaves as defined by the SMC2. -#define AT91C_EBI_CS3A_SMC_SmartMedia (0x1u << 3) // (EBI) Chip Select 3 is assigned to the Static Memory Controller and the SmartMedia Logic is activated. -#define AT91C_EBI_CS4A (0x1u << 4) // (EBI) Chip Select 4 Assignment -#define AT91C_EBI_CS4A_SMC (0x0u << 4) // (EBI) Chip Select 4 is assigned to the Static Memory Controller and NCS4,NCS5 and NCS6 behave as defined by the SMC2. -#define AT91C_EBI_CS4A_SMC_CompactFlash (0x1u << 4) // (EBI) Chip Select 4 is assigned to the Static Memory Controller and the CompactFlash Logic is activated. -// -------- EBI_CFGR : (EBI Offset: 0x4) Configuration Register -------- -#define AT91C_EBI_DBPUC (0x1u << 0) // (EBI) Data Bus Pull-Up Configuration -#define AT91C_EBI_EBSEN (0x1u << 1) // (EBI) Bus Sharing Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Static Memory Controller 2 Interface -// ***************************************************************************** -typedef struct _AT91S_SMC2 { - AT91_REG SMC2_CSR[8]; // SMC2 Chip Select Register -} AT91S_SMC2, *AT91PS_SMC2; - -// -------- SMC2_CSR : (SMC2 Offset: 0x0) SMC2 Chip Select Register -------- -#define AT91C_SMC2_NWS (0x7Fu << 0) // (SMC2) Number of Wait States -#define AT91C_SMC2_WSEN (0x1u << 7) // (SMC2) Wait State Enable -#define AT91C_SMC2_TDF (0xFu << 8) // (SMC2) Data Float Time -#define AT91C_SMC2_BAT (0x1u << 12) // (SMC2) Byte Access Type -#define AT91C_SMC2_DBW (0x1u << 13) // (SMC2) Data Bus Width -#define AT91C_SMC2_DBW_16 (0x1u << 13) // (SMC2) 16-bit. -#define AT91C_SMC2_DBW_8 (0x2u << 13) // (SMC2) 8-bit. -#define AT91C_SMC2_DRP (0x1u << 15) // (SMC2) Data Read Protocol -#define AT91C_SMC2_ACSS (0x3u << 16) // (SMC2) Address to Chip Select Setup -#define AT91C_SMC2_ACSS_STANDARD (0x0u << 16) // (SMC2) Standard, asserted at the beginning of the access and deasserted at the end. -#define AT91C_SMC2_ACSS_1_CYCLE (0x1u << 16) // (SMC2) One cycle less at the beginning and the end of the access. -#define AT91C_SMC2_ACSS_2_CYCLES (0x2u << 16) // (SMC2) Two cycles less at the beginning and the end of the access. -#define AT91C_SMC2_ACSS_3_CYCLES (0x3u << 16) // (SMC2) Three cycles less at the beginning and the end of the access. -#define AT91C_SMC2_RWSETUP (0x7u << 24) // (SMC2) Read and Write Signal Setup Time -#define AT91C_SMC2_RWHOLD (0x7u << 29) // (SMC2) Read and Write Signal Hold Time - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR SDRAM Controller Interface -// ***************************************************************************** -typedef struct _AT91S_SDRC { - AT91_REG SDRC_MR; // SDRAM Controller Mode Register - AT91_REG SDRC_TR; // SDRAM Controller Refresh Timer Register - AT91_REG SDRC_CR; // SDRAM Controller Configuration Register - AT91_REG SDRC_SRR; // SDRAM Controller Self Refresh Register - AT91_REG SDRC_LPR; // SDRAM Controller Low Power Register - AT91_REG SDRC_IER; // SDRAM Controller Interrupt Enable Register - AT91_REG SDRC_IDR; // SDRAM Controller Interrupt Disable Register - AT91_REG SDRC_IMR; // SDRAM Controller Interrupt Mask Register - AT91_REG SDRC_ISR; // SDRAM Controller Interrupt Mask Register -} AT91S_SDRC, *AT91PS_SDRC; - -// -------- SDRC_MR : (SDRC Offset: 0x0) SDRAM Controller Mode Register -------- -#define AT91C_SDRC_MODE (0xFu << 0) // (SDRC) Mode -#define AT91C_SDRC_MODE_NORMAL_CMD 0x0u // (SDRC) Normal Mode -#define AT91C_SDRC_MODE_NOP_CMD 0x1u // (SDRC) NOP Command -#define AT91C_SDRC_MODE_PRCGALL_CMD 0x2u // (SDRC) All Banks Precharge Command -#define AT91C_SDRC_MODE_LMR_CMD 0x3u // (SDRC) Load Mode Register Command -#define AT91C_SDRC_MODE_RFSH_CMD 0x4u // (SDRC) Refresh Command -#define AT91C_SDRC_DBW (0x1u << 4) // (SDRC) Data Bus Width -#define AT91C_SDRC_DBW_32_BITS (0x0u << 4) // (SDRC) 32 Bits datas bus -#define AT91C_SDRC_DBW_16_BITS (0x1u << 4) // (SDRC) 16 Bits datas bus -// -------- SDRC_TR : (SDRC Offset: 0x4) SDRC Refresh Timer Register -------- -#define AT91C_SDRC_COUNT (0xFFFu << 0) // (SDRC) Refresh Counter -// -------- SDRC_CR : (SDRC Offset: 0x8) SDRAM Configuration Register -------- -#define AT91C_SDRC_NC (0x3u << 0) // (SDRC) Number of Column Bits -#define AT91C_SDRC_NC_8 0x0u // (SDRC) 8 Bits -#define AT91C_SDRC_NC_9 0x1u // (SDRC) 9 Bits -#define AT91C_SDRC_NC_10 0x2u // (SDRC) 10 Bits -#define AT91C_SDRC_NC_11 0x3u // (SDRC) 11 Bits -#define AT91C_SDRC_NR (0x3u << 2) // (SDRC) Number of Row Bits -#define AT91C_SDRC_NR_11 (0x0u << 2) // (SDRC) 11 Bits -#define AT91C_SDRC_NR_12 (0x1u << 2) // (SDRC) 12 Bits -#define AT91C_SDRC_NR_13 (0x2u << 2) // (SDRC) 13 Bits -#define AT91C_SDRC_NB (0x1u << 4) // (SDRC) Number of Banks -#define AT91C_SDRC_NB_2_BANKS (0x0u << 4) // (SDRC) 2 banks -#define AT91C_SDRC_NB_4_BANKS (0x1u << 4) // (SDRC) 4 banks -#define AT91C_SDRC_CAS (0x3u << 5) // (SDRC) CAS Latency -#define AT91C_SDRC_CAS_2 (0x2u << 5) // (SDRC) 2 cycles -#define AT91C_SDRC_TWR (0xFu << 7) // (SDRC) Number of Write Recovery Time Cycles -#define AT91C_SDRC_TRC (0xFu << 11) // (SDRC) Number of RAS Cycle Time Cycles -#define AT91C_SDRC_TRP (0xFu << 15) // (SDRC) Number of RAS Precharge Time Cycles -#define AT91C_SDRC_TRCD (0xFu << 19) // (SDRC) Number of RAS to CAS Delay Cycles -#define AT91C_SDRC_TRAS (0xFu << 23) // (SDRC) Number of RAS Active Time Cycles -#define AT91C_SDRC_TXSR (0xFu << 27) // (SDRC) Number of Command Recovery Time Cycles -// -------- SDRC_SRR : (SDRC Offset: 0xc) SDRAM Controller Self-refresh Register -------- -#define AT91C_SDRC_SRCB (0x1u << 0) // (SDRC) Self-refresh Command Bit -// -------- SDRC_LPR : (SDRC Offset: 0x10) SDRAM Controller Low-power Register -------- -#define AT91C_SDRC_LPCB (0x1u << 0) // (SDRC) Low-power Command Bit -// -------- SDRC_IER : (SDRC Offset: 0x14) SDRAM Controller Interrupt Enable Register -------- -#define AT91C_SDRC_RES (0x1u << 0) // (SDRC) Refresh Error Status -// -------- SDRC_IDR : (SDRC Offset: 0x18) SDRAM Controller Interrupt Disable Register -------- -// -------- SDRC_IMR : (SDRC Offset: 0x1c) SDRAM Controller Interrupt Mask Register -------- -// -------- SDRC_ISR : (SDRC Offset: 0x20) SDRAM Controller Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Burst Flash Controller Interface -// ***************************************************************************** -typedef struct _AT91S_BFC { - AT91_REG BFC_MR; // BFC Mode Register -} AT91S_BFC, *AT91PS_BFC; - -// -------- BFC_MR : (BFC Offset: 0x0) BFC Mode Register -------- -#define AT91C_BFC_BFCOM (0x3u << 0) // (BFC) Burst Flash Controller Operating Mode -#define AT91C_BFC_BFCOM_DISABLED 0x0u // (BFC) NPCS0 is driven by the SMC or remains high. -#define AT91C_BFC_BFCOM_ASYNC 0x1u // (BFC) Asynchronous -#define AT91C_BFC_BFCOM_BURST_READ 0x2u // (BFC) Burst Read -#define AT91C_BFC_BFCC (0x3u << 2) // (BFC) Burst Flash Controller Operating Mode -#define AT91C_BFC_BFCC_MCK (0x1u << 2) // (BFC) Master Clock. -#define AT91C_BFC_BFCC_MCK_DIV_2 (0x2u << 2) // (BFC) Master Clock divided by 2. -#define AT91C_BFC_BFCC_MCK_DIV_4 (0x3u << 2) // (BFC) Master Clock divided by 4. -#define AT91C_BFC_AVL (0xFu << 4) // (BFC) Address Valid Latency -#define AT91C_BFC_PAGES (0x7u << 8) // (BFC) Page Size -#define AT91C_BFC_PAGES_NO_PAGE (0x0u << 8) // (BFC) No page handling. -#define AT91C_BFC_PAGES_16 (0x1u << 8) // (BFC) 16 bytes page size. -#define AT91C_BFC_PAGES_32 (0x2u << 8) // (BFC) 32 bytes page size. -#define AT91C_BFC_PAGES_64 (0x3u << 8) // (BFC) 64 bytes page size. -#define AT91C_BFC_PAGES_128 (0x4u << 8) // (BFC) 128 bytes page size. -#define AT91C_BFC_PAGES_256 (0x5u << 8) // (BFC) 256 bytes page size. -#define AT91C_BFC_PAGES_512 (0x6u << 8) // (BFC) 512 bytes page size. -#define AT91C_BFC_PAGES_1024 (0x7u << 8) // (BFC) 1024 bytes page size. -#define AT91C_BFC_OEL (0x3u << 12) // (BFC) Output Enable Latency -#define AT91C_BFC_BAAEN (0x1u << 16) // (BFC) Burst Address Advance Enable -#define AT91C_BFC_BFOEH (0x1u << 17) // (BFC) Burst Flash Output Enable Handling -#define AT91C_BFC_MUXEN (0x1u << 18) // (BFC) Multiplexed Bus Enable -#define AT91C_BFC_RDYEN (0x1u << 19) // (BFC) Ready Enable Mode - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91RM9200 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_PUER ((AT91_REG *) 0xFFFFFF54) // (MC) MC Protection Unit Enable Register -#define AT91C_MC_ASR ((AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_PUP ((AT91_REG *) 0xFFFFFF50) // (MC) MC Protection Unit Peripherals -#define AT91C_MC_PUIA ((AT91_REG *) 0xFFFFFF10) // (MC) MC Protection Unit Area -#define AT91C_MC_AASR ((AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_RCR ((AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -// ========== Register definition for RTC peripheral ========== -#define AT91C_RTC_IMR ((AT91_REG *) 0xFFFFFE28) // (RTC) Interrupt Mask Register -#define AT91C_RTC_IER ((AT91_REG *) 0xFFFFFE20) // (RTC) Interrupt Enable Register -#define AT91C_RTC_SR ((AT91_REG *) 0xFFFFFE18) // (RTC) Status Register -#define AT91C_RTC_TIMALR ((AT91_REG *) 0xFFFFFE10) // (RTC) Time Alarm Register -#define AT91C_RTC_TIMR ((AT91_REG *) 0xFFFFFE08) // (RTC) Time Register -#define AT91C_RTC_CR ((AT91_REG *) 0xFFFFFE00) // (RTC) Control Register -#define AT91C_RTC_VER ((AT91_REG *) 0xFFFFFE2C) // (RTC) Valid Entry Register -#define AT91C_RTC_IDR ((AT91_REG *) 0xFFFFFE24) // (RTC) Interrupt Disable Register -#define AT91C_RTC_SCCR ((AT91_REG *) 0xFFFFFE1C) // (RTC) Status Clear Command Register -#define AT91C_RTC_CALALR ((AT91_REG *) 0xFFFFFE14) // (RTC) Calendar Alarm Register -#define AT91C_RTC_CALR ((AT91_REG *) 0xFFFFFE0C) // (RTC) Calendar Register -#define AT91C_RTC_MR ((AT91_REG *) 0xFFFFFE04) // (RTC) Mode Register -// ========== Register definition for ST peripheral ========== -#define AT91C_ST_CRTR ((AT91_REG *) 0xFFFFFD24) // (ST) Current Real-time Register -#define AT91C_ST_IMR ((AT91_REG *) 0xFFFFFD1C) // (ST) Interrupt Mask Register -#define AT91C_ST_IER ((AT91_REG *) 0xFFFFFD14) // (ST) Interrupt Enable Register -#define AT91C_ST_RTMR ((AT91_REG *) 0xFFFFFD0C) // (ST) Real-time Mode Register -#define AT91C_ST_PIMR ((AT91_REG *) 0xFFFFFD04) // (ST) Period Interval Mode Register -#define AT91C_ST_RTAR ((AT91_REG *) 0xFFFFFD20) // (ST) Real-time Alarm Register -#define AT91C_ST_IDR ((AT91_REG *) 0xFFFFFD18) // (ST) Interrupt Disable Register -#define AT91C_ST_SR ((AT91_REG *) 0xFFFFFD10) // (ST) Status Register -#define AT91C_ST_WDMR ((AT91_REG *) 0xFFFFFD08) // (ST) Watchdog Mode Register -#define AT91C_ST_CR ((AT91_REG *) 0xFFFFFD00) // (ST) Control Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_SCSR ((AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_SCER ((AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR ((AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IDR ((AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_PCDR ((AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCDR ((AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_SR ((AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -#define AT91C_PMC_IER ((AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_MCKR ((AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_PCER ((AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCSR ((AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_PCKR ((AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_PLLBR ((AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL B Register -#define AT91C_CKGR_MCFR ((AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -#define AT91C_CKGR_PLLAR ((AT91_REG *) 0xFFFFFC28) // (CKGR) PLL A Register -#define AT91C_CKGR_MOR ((AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -// ========== Register definition for PIOD peripheral ========== -#define AT91C_PIOD_PDSR ((AT91_REG *) 0xFFFFFA3C) // (PIOD) Pin Data Status Register -#define AT91C_PIOD_CODR ((AT91_REG *) 0xFFFFFA34) // (PIOD) Clear Output Data Register -#define AT91C_PIOD_OWER ((AT91_REG *) 0xFFFFFAA0) // (PIOD) Output Write Enable Register -#define AT91C_PIOD_MDER ((AT91_REG *) 0xFFFFFA50) // (PIOD) Multi-driver Enable Register -#define AT91C_PIOD_IMR ((AT91_REG *) 0xFFFFFA48) // (PIOD) Interrupt Mask Register -#define AT91C_PIOD_IER ((AT91_REG *) 0xFFFFFA40) // (PIOD) Interrupt Enable Register -#define AT91C_PIOD_ODSR ((AT91_REG *) 0xFFFFFA38) // (PIOD) Output Data Status Register -#define AT91C_PIOD_SODR ((AT91_REG *) 0xFFFFFA30) // (PIOD) Set Output Data Register -#define AT91C_PIOD_PER ((AT91_REG *) 0xFFFFFA00) // (PIOD) PIO Enable Register -#define AT91C_PIOD_OWDR ((AT91_REG *) 0xFFFFFAA4) // (PIOD) Output Write Disable Register -#define AT91C_PIOD_PPUER ((AT91_REG *) 0xFFFFFA64) // (PIOD) Pull-up Enable Register -#define AT91C_PIOD_MDDR ((AT91_REG *) 0xFFFFFA54) // (PIOD) Multi-driver Disable Register -#define AT91C_PIOD_ISR ((AT91_REG *) 0xFFFFFA4C) // (PIOD) Interrupt Status Register -#define AT91C_PIOD_IDR ((AT91_REG *) 0xFFFFFA44) // (PIOD) Interrupt Disable Register -#define AT91C_PIOD_PDR ((AT91_REG *) 0xFFFFFA04) // (PIOD) PIO Disable Register -#define AT91C_PIOD_ODR ((AT91_REG *) 0xFFFFFA14) // (PIOD) Output Disable Registerr -#define AT91C_PIOD_OWSR ((AT91_REG *) 0xFFFFFAA8) // (PIOD) Output Write Status Register -#define AT91C_PIOD_ABSR ((AT91_REG *) 0xFFFFFA78) // (PIOD) AB Select Status Register -#define AT91C_PIOD_ASR ((AT91_REG *) 0xFFFFFA70) // (PIOD) Select A Register -#define AT91C_PIOD_PPUSR ((AT91_REG *) 0xFFFFFA68) // (PIOD) Pad Pull-up Status Register -#define AT91C_PIOD_PPUDR ((AT91_REG *) 0xFFFFFA60) // (PIOD) Pull-up Disable Register -#define AT91C_PIOD_MDSR ((AT91_REG *) 0xFFFFFA58) // (PIOD) Multi-driver Status Register -#define AT91C_PIOD_PSR ((AT91_REG *) 0xFFFFFA08) // (PIOD) PIO Status Register -#define AT91C_PIOD_OER ((AT91_REG *) 0xFFFFFA10) // (PIOD) Output Enable Register -#define AT91C_PIOD_OSR ((AT91_REG *) 0xFFFFFA18) // (PIOD) Output Status Register -#define AT91C_PIOD_IFER ((AT91_REG *) 0xFFFFFA20) // (PIOD) Input Filter Enable Register -#define AT91C_PIOD_BSR ((AT91_REG *) 0xFFFFFA74) // (PIOD) Select B Register -#define AT91C_PIOD_IFDR ((AT91_REG *) 0xFFFFFA24) // (PIOD) Input Filter Disable Register -#define AT91C_PIOD_IFSR ((AT91_REG *) 0xFFFFFA28) // (PIOD) Input Filter Status Register -// ========== Register definition for PIOC peripheral ========== -#define AT91C_PIOC_IFDR ((AT91_REG *) 0xFFFFF824) // (PIOC) Input Filter Disable Register -#define AT91C_PIOC_ODR ((AT91_REG *) 0xFFFFF814) // (PIOC) Output Disable Registerr -#define AT91C_PIOC_ABSR ((AT91_REG *) 0xFFFFF878) // (PIOC) AB Select Status Register -#define AT91C_PIOC_SODR ((AT91_REG *) 0xFFFFF830) // (PIOC) Set Output Data Register -#define AT91C_PIOC_IFSR ((AT91_REG *) 0xFFFFF828) // (PIOC) Input Filter Status Register -#define AT91C_PIOC_CODR ((AT91_REG *) 0xFFFFF834) // (PIOC) Clear Output Data Register -#define AT91C_PIOC_ODSR ((AT91_REG *) 0xFFFFF838) // (PIOC) Output Data Status Register -#define AT91C_PIOC_IER ((AT91_REG *) 0xFFFFF840) // (PIOC) Interrupt Enable Register -#define AT91C_PIOC_IMR ((AT91_REG *) 0xFFFFF848) // (PIOC) Interrupt Mask Register -#define AT91C_PIOC_OWDR ((AT91_REG *) 0xFFFFF8A4) // (PIOC) Output Write Disable Register -#define AT91C_PIOC_MDDR ((AT91_REG *) 0xFFFFF854) // (PIOC) Multi-driver Disable Register -#define AT91C_PIOC_PDSR ((AT91_REG *) 0xFFFFF83C) // (PIOC) Pin Data Status Register -#define AT91C_PIOC_IDR ((AT91_REG *) 0xFFFFF844) // (PIOC) Interrupt Disable Register -#define AT91C_PIOC_ISR ((AT91_REG *) 0xFFFFF84C) // (PIOC) Interrupt Status Register -#define AT91C_PIOC_PDR ((AT91_REG *) 0xFFFFF804) // (PIOC) PIO Disable Register -#define AT91C_PIOC_OWSR ((AT91_REG *) 0xFFFFF8A8) // (PIOC) Output Write Status Register -#define AT91C_PIOC_OWER ((AT91_REG *) 0xFFFFF8A0) // (PIOC) Output Write Enable Register -#define AT91C_PIOC_ASR ((AT91_REG *) 0xFFFFF870) // (PIOC) Select A Register -#define AT91C_PIOC_PPUSR ((AT91_REG *) 0xFFFFF868) // (PIOC) Pad Pull-up Status Register -#define AT91C_PIOC_PPUDR ((AT91_REG *) 0xFFFFF860) // (PIOC) Pull-up Disable Register -#define AT91C_PIOC_MDSR ((AT91_REG *) 0xFFFFF858) // (PIOC) Multi-driver Status Register -#define AT91C_PIOC_MDER ((AT91_REG *) 0xFFFFF850) // (PIOC) Multi-driver Enable Register -#define AT91C_PIOC_IFER ((AT91_REG *) 0xFFFFF820) // (PIOC) Input Filter Enable Register -#define AT91C_PIOC_OSR ((AT91_REG *) 0xFFFFF818) // (PIOC) Output Status Register -#define AT91C_PIOC_OER ((AT91_REG *) 0xFFFFF810) // (PIOC) Output Enable Register -#define AT91C_PIOC_PSR ((AT91_REG *) 0xFFFFF808) // (PIOC) PIO Status Register -#define AT91C_PIOC_PER ((AT91_REG *) 0xFFFFF800) // (PIOC) PIO Enable Register -#define AT91C_PIOC_BSR ((AT91_REG *) 0xFFFFF874) // (PIOC) Select B Register -#define AT91C_PIOC_PPUER ((AT91_REG *) 0xFFFFF864) // (PIOC) Pull-up Enable Register -// ========== Register definition for PIOB peripheral ========== -#define AT91C_PIOB_OWSR ((AT91_REG *) 0xFFFFF6A8) // (PIOB) Output Write Status Register -#define AT91C_PIOB_PPUSR ((AT91_REG *) 0xFFFFF668) // (PIOB) Pad Pull-up Status Register -#define AT91C_PIOB_PPUDR ((AT91_REG *) 0xFFFFF660) // (PIOB) Pull-up Disable Register -#define AT91C_PIOB_MDSR ((AT91_REG *) 0xFFFFF658) // (PIOB) Multi-driver Status Register -#define AT91C_PIOB_MDER ((AT91_REG *) 0xFFFFF650) // (PIOB) Multi-driver Enable Register -#define AT91C_PIOB_IMR ((AT91_REG *) 0xFFFFF648) // (PIOB) Interrupt Mask Register -#define AT91C_PIOB_OSR ((AT91_REG *) 0xFFFFF618) // (PIOB) Output Status Register -#define AT91C_PIOB_OER ((AT91_REG *) 0xFFFFF610) // (PIOB) Output Enable Register -#define AT91C_PIOB_PSR ((AT91_REG *) 0xFFFFF608) // (PIOB) PIO Status Register -#define AT91C_PIOB_PER ((AT91_REG *) 0xFFFFF600) // (PIOB) PIO Enable Register -#define AT91C_PIOB_BSR ((AT91_REG *) 0xFFFFF674) // (PIOB) Select B Register -#define AT91C_PIOB_PPUER ((AT91_REG *) 0xFFFFF664) // (PIOB) Pull-up Enable Register -#define AT91C_PIOB_IFDR ((AT91_REG *) 0xFFFFF624) // (PIOB) Input Filter Disable Register -#define AT91C_PIOB_ODR ((AT91_REG *) 0xFFFFF614) // (PIOB) Output Disable Registerr -#define AT91C_PIOB_ABSR ((AT91_REG *) 0xFFFFF678) // (PIOB) AB Select Status Register -#define AT91C_PIOB_ASR ((AT91_REG *) 0xFFFFF670) // (PIOB) Select A Register -#define AT91C_PIOB_IFER ((AT91_REG *) 0xFFFFF620) // (PIOB) Input Filter Enable Register -#define AT91C_PIOB_IFSR ((AT91_REG *) 0xFFFFF628) // (PIOB) Input Filter Status Register -#define AT91C_PIOB_SODR ((AT91_REG *) 0xFFFFF630) // (PIOB) Set Output Data Register -#define AT91C_PIOB_ODSR ((AT91_REG *) 0xFFFFF638) // (PIOB) Output Data Status Register -#define AT91C_PIOB_CODR ((AT91_REG *) 0xFFFFF634) // (PIOB) Clear Output Data Register -#define AT91C_PIOB_PDSR ((AT91_REG *) 0xFFFFF63C) // (PIOB) Pin Data Status Register -#define AT91C_PIOB_OWER ((AT91_REG *) 0xFFFFF6A0) // (PIOB) Output Write Enable Register -#define AT91C_PIOB_IER ((AT91_REG *) 0xFFFFF640) // (PIOB) Interrupt Enable Register -#define AT91C_PIOB_OWDR ((AT91_REG *) 0xFFFFF6A4) // (PIOB) Output Write Disable Register -#define AT91C_PIOB_MDDR ((AT91_REG *) 0xFFFFF654) // (PIOB) Multi-driver Disable Register -#define AT91C_PIOB_ISR ((AT91_REG *) 0xFFFFF64C) // (PIOB) Interrupt Status Register -#define AT91C_PIOB_IDR ((AT91_REG *) 0xFFFFF644) // (PIOB) Interrupt Disable Register -#define AT91C_PIOB_PDR ((AT91_REG *) 0xFFFFF604) // (PIOB) PIO Disable Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_IMR ((AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_IER ((AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_OWDR ((AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_ISR ((AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_PPUDR ((AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_MDSR ((AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_MDER ((AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PER ((AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_PSR ((AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -#define AT91C_PIOA_OER ((AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_BSR ((AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_PPUER ((AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_MDDR ((AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_PDR ((AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_ODR ((AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_IFDR ((AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_ABSR ((AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_ASR ((AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_PPUSR ((AT91_REG *) 0xFFFFF468) // (PIOA) Pad Pull-up Status Register -#define AT91C_PIOA_ODSR ((AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_SODR ((AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_IFSR ((AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_IFER ((AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_OSR ((AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_IDR ((AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_PDSR ((AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_CODR ((AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_OWSR ((AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_OWER ((AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_C2R ((AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID2 Register -#define AT91C_DBGU_THR ((AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_CSR ((AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_IDR ((AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_MR ((AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_FNTR ((AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_C1R ((AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID1 Register -#define AT91C_DBGU_BRGR ((AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_RHR ((AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IMR ((AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_IER ((AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -#define AT91C_DBGU_CR ((AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TNCR ((AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -#define AT91C_DBGU_RNCR ((AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR ((AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR ((AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_RCR ((AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_TCR ((AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RPR ((AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_TPR ((AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RNPR ((AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR ((AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_ICCR ((AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_IECR ((AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_SMR ((AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_ISCR ((AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_EOICR ((AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_DCR ((AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_FFER ((AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_SVR ((AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_SPU ((AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -#define AT91C_AIC_FFDR ((AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_FVR ((AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_FFSR ((AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_IMR ((AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_ISR ((AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IVR ((AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_IDCR ((AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_CISR ((AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IPR ((AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -// ========== Register definition for PDC_SPI peripheral ========== -#define AT91C_SPI_PTCR ((AT91_REG *) 0xFFFE0120) // (PDC_SPI) PDC Transfer Control Register -#define AT91C_SPI_TNPR ((AT91_REG *) 0xFFFE0118) // (PDC_SPI) Transmit Next Pointer Register -#define AT91C_SPI_RNPR ((AT91_REG *) 0xFFFE0110) // (PDC_SPI) Receive Next Pointer Register -#define AT91C_SPI_TPR ((AT91_REG *) 0xFFFE0108) // (PDC_SPI) Transmit Pointer Register -#define AT91C_SPI_RPR ((AT91_REG *) 0xFFFE0100) // (PDC_SPI) Receive Pointer Register -#define AT91C_SPI_PTSR ((AT91_REG *) 0xFFFE0124) // (PDC_SPI) PDC Transfer Status Register -#define AT91C_SPI_TNCR ((AT91_REG *) 0xFFFE011C) // (PDC_SPI) Transmit Next Counter Register -#define AT91C_SPI_RNCR ((AT91_REG *) 0xFFFE0114) // (PDC_SPI) Receive Next Counter Register -#define AT91C_SPI_TCR ((AT91_REG *) 0xFFFE010C) // (PDC_SPI) Transmit Counter Register -#define AT91C_SPI_RCR ((AT91_REG *) 0xFFFE0104) // (PDC_SPI) Receive Counter Register -// ========== Register definition for SPI peripheral ========== -#define AT91C_SPI_CSR ((AT91_REG *) 0xFFFE0030) // (SPI) Chip Select Register -#define AT91C_SPI_IDR ((AT91_REG *) 0xFFFE0018) // (SPI) Interrupt Disable Register -#define AT91C_SPI_SR ((AT91_REG *) 0xFFFE0010) // (SPI) Status Register -#define AT91C_SPI_RDR ((AT91_REG *) 0xFFFE0008) // (SPI) Receive Data Register -#define AT91C_SPI_CR ((AT91_REG *) 0xFFFE0000) // (SPI) Control Register -#define AT91C_SPI_IMR ((AT91_REG *) 0xFFFE001C) // (SPI) Interrupt Mask Register -#define AT91C_SPI_IER ((AT91_REG *) 0xFFFE0014) // (SPI) Interrupt Enable Register -#define AT91C_SPI_TDR ((AT91_REG *) 0xFFFE000C) // (SPI) Transmit Data Register -#define AT91C_SPI_MR ((AT91_REG *) 0xFFFE0004) // (SPI) Mode Register -// ========== Register definition for PDC_SSC2 peripheral ========== -#define AT91C_SSC2_PTCR ((AT91_REG *) 0xFFFD8120) // (PDC_SSC2) PDC Transfer Control Register -#define AT91C_SSC2_TNPR ((AT91_REG *) 0xFFFD8118) // (PDC_SSC2) Transmit Next Pointer Register -#define AT91C_SSC2_RNPR ((AT91_REG *) 0xFFFD8110) // (PDC_SSC2) Receive Next Pointer Register -#define AT91C_SSC2_TPR ((AT91_REG *) 0xFFFD8108) // (PDC_SSC2) Transmit Pointer Register -#define AT91C_SSC2_RPR ((AT91_REG *) 0xFFFD8100) // (PDC_SSC2) Receive Pointer Register -#define AT91C_SSC2_PTSR ((AT91_REG *) 0xFFFD8124) // (PDC_SSC2) PDC Transfer Status Register -#define AT91C_SSC2_TNCR ((AT91_REG *) 0xFFFD811C) // (PDC_SSC2) Transmit Next Counter Register -#define AT91C_SSC2_RNCR ((AT91_REG *) 0xFFFD8114) // (PDC_SSC2) Receive Next Counter Register -#define AT91C_SSC2_TCR ((AT91_REG *) 0xFFFD810C) // (PDC_SSC2) Transmit Counter Register -#define AT91C_SSC2_RCR ((AT91_REG *) 0xFFFD8104) // (PDC_SSC2) Receive Counter Register -// ========== Register definition for SSC2 peripheral ========== -#define AT91C_SSC2_IMR ((AT91_REG *) 0xFFFD804C) // (SSC2) Interrupt Mask Register -#define AT91C_SSC2_IER ((AT91_REG *) 0xFFFD8044) // (SSC2) Interrupt Enable Register -#define AT91C_SSC2_RC1R ((AT91_REG *) 0xFFFD803C) // (SSC2) Receive Compare 1 Register -#define AT91C_SSC2_TSHR ((AT91_REG *) 0xFFFD8034) // (SSC2) Transmit Sync Holding Register -#define AT91C_SSC2_CMR ((AT91_REG *) 0xFFFD8004) // (SSC2) Clock Mode Register -#define AT91C_SSC2_IDR ((AT91_REG *) 0xFFFD8048) // (SSC2) Interrupt Disable Register -#define AT91C_SSC2_TCMR ((AT91_REG *) 0xFFFD8018) // (SSC2) Transmit Clock Mode Register -#define AT91C_SSC2_RCMR ((AT91_REG *) 0xFFFD8010) // (SSC2) Receive Clock ModeRegister -#define AT91C_SSC2_CR ((AT91_REG *) 0xFFFD8000) // (SSC2) Control Register -#define AT91C_SSC2_RFMR ((AT91_REG *) 0xFFFD8014) // (SSC2) Receive Frame Mode Register -#define AT91C_SSC2_TFMR ((AT91_REG *) 0xFFFD801C) // (SSC2) Transmit Frame Mode Register -#define AT91C_SSC2_THR ((AT91_REG *) 0xFFFD8024) // (SSC2) Transmit Holding Register -#define AT91C_SSC2_SR ((AT91_REG *) 0xFFFD8040) // (SSC2) Status Register -#define AT91C_SSC2_RC0R ((AT91_REG *) 0xFFFD8038) // (SSC2) Receive Compare 0 Register -#define AT91C_SSC2_RSHR ((AT91_REG *) 0xFFFD8030) // (SSC2) Receive Sync Holding Register -#define AT91C_SSC2_RHR ((AT91_REG *) 0xFFFD8020) // (SSC2) Receive Holding Register -// ========== Register definition for PDC_SSC1 peripheral ========== -#define AT91C_SSC1_PTCR ((AT91_REG *) 0xFFFD4120) // (PDC_SSC1) PDC Transfer Control Register -#define AT91C_SSC1_TNPR ((AT91_REG *) 0xFFFD4118) // (PDC_SSC1) Transmit Next Pointer Register -#define AT91C_SSC1_RNPR ((AT91_REG *) 0xFFFD4110) // (PDC_SSC1) Receive Next Pointer Register -#define AT91C_SSC1_TPR ((AT91_REG *) 0xFFFD4108) // (PDC_SSC1) Transmit Pointer Register -#define AT91C_SSC1_RPR ((AT91_REG *) 0xFFFD4100) // (PDC_SSC1) Receive Pointer Register -#define AT91C_SSC1_PTSR ((AT91_REG *) 0xFFFD4124) // (PDC_SSC1) PDC Transfer Status Register -#define AT91C_SSC1_TNCR ((AT91_REG *) 0xFFFD411C) // (PDC_SSC1) Transmit Next Counter Register -#define AT91C_SSC1_RNCR ((AT91_REG *) 0xFFFD4114) // (PDC_SSC1) Receive Next Counter Register -#define AT91C_SSC1_TCR ((AT91_REG *) 0xFFFD410C) // (PDC_SSC1) Transmit Counter Register -#define AT91C_SSC1_RCR ((AT91_REG *) 0xFFFD4104) // (PDC_SSC1) Receive Counter Register -// ========== Register definition for SSC1 peripheral ========== -#define AT91C_SSC1_RFMR ((AT91_REG *) 0xFFFD4014) // (SSC1) Receive Frame Mode Register -#define AT91C_SSC1_CMR ((AT91_REG *) 0xFFFD4004) // (SSC1) Clock Mode Register -#define AT91C_SSC1_IDR ((AT91_REG *) 0xFFFD4048) // (SSC1) Interrupt Disable Register -#define AT91C_SSC1_SR ((AT91_REG *) 0xFFFD4040) // (SSC1) Status Register -#define AT91C_SSC1_RC0R ((AT91_REG *) 0xFFFD4038) // (SSC1) Receive Compare 0 Register -#define AT91C_SSC1_RSHR ((AT91_REG *) 0xFFFD4030) // (SSC1) Receive Sync Holding Register -#define AT91C_SSC1_RHR ((AT91_REG *) 0xFFFD4020) // (SSC1) Receive Holding Register -#define AT91C_SSC1_TCMR ((AT91_REG *) 0xFFFD4018) // (SSC1) Transmit Clock Mode Register -#define AT91C_SSC1_RCMR ((AT91_REG *) 0xFFFD4010) // (SSC1) Receive Clock ModeRegister -#define AT91C_SSC1_CR ((AT91_REG *) 0xFFFD4000) // (SSC1) Control Register -#define AT91C_SSC1_IMR ((AT91_REG *) 0xFFFD404C) // (SSC1) Interrupt Mask Register -#define AT91C_SSC1_IER ((AT91_REG *) 0xFFFD4044) // (SSC1) Interrupt Enable Register -#define AT91C_SSC1_RC1R ((AT91_REG *) 0xFFFD403C) // (SSC1) Receive Compare 1 Register -#define AT91C_SSC1_TSHR ((AT91_REG *) 0xFFFD4034) // (SSC1) Transmit Sync Holding Register -#define AT91C_SSC1_THR ((AT91_REG *) 0xFFFD4024) // (SSC1) Transmit Holding Register -#define AT91C_SSC1_TFMR ((AT91_REG *) 0xFFFD401C) // (SSC1) Transmit Frame Mode Register -// ========== Register definition for PDC_SSC0 peripheral ========== -#define AT91C_SSC0_PTCR ((AT91_REG *) 0xFFFD0120) // (PDC_SSC0) PDC Transfer Control Register -#define AT91C_SSC0_TNPR ((AT91_REG *) 0xFFFD0118) // (PDC_SSC0) Transmit Next Pointer Register -#define AT91C_SSC0_RNPR ((AT91_REG *) 0xFFFD0110) // (PDC_SSC0) Receive Next Pointer Register -#define AT91C_SSC0_TPR ((AT91_REG *) 0xFFFD0108) // (PDC_SSC0) Transmit Pointer Register -#define AT91C_SSC0_RPR ((AT91_REG *) 0xFFFD0100) // (PDC_SSC0) Receive Pointer Register -#define AT91C_SSC0_PTSR ((AT91_REG *) 0xFFFD0124) // (PDC_SSC0) PDC Transfer Status Register -#define AT91C_SSC0_TNCR ((AT91_REG *) 0xFFFD011C) // (PDC_SSC0) Transmit Next Counter Register -#define AT91C_SSC0_RNCR ((AT91_REG *) 0xFFFD0114) // (PDC_SSC0) Receive Next Counter Register -#define AT91C_SSC0_TCR ((AT91_REG *) 0xFFFD010C) // (PDC_SSC0) Transmit Counter Register -#define AT91C_SSC0_RCR ((AT91_REG *) 0xFFFD0104) // (PDC_SSC0) Receive Counter Register -// ========== Register definition for SSC0 peripheral ========== -#define AT91C_SSC0_IMR ((AT91_REG *) 0xFFFD004C) // (SSC0) Interrupt Mask Register -#define AT91C_SSC0_IER ((AT91_REG *) 0xFFFD0044) // (SSC0) Interrupt Enable Register -#define AT91C_SSC0_RC1R ((AT91_REG *) 0xFFFD003C) // (SSC0) Receive Compare 1 Register -#define AT91C_SSC0_TSHR ((AT91_REG *) 0xFFFD0034) // (SSC0) Transmit Sync Holding Register -#define AT91C_SSC0_THR ((AT91_REG *) 0xFFFD0024) // (SSC0) Transmit Holding Register -#define AT91C_SSC0_TFMR ((AT91_REG *) 0xFFFD001C) // (SSC0) Transmit Frame Mode Register -#define AT91C_SSC0_RFMR ((AT91_REG *) 0xFFFD0014) // (SSC0) Receive Frame Mode Register -#define AT91C_SSC0_CMR ((AT91_REG *) 0xFFFD0004) // (SSC0) Clock Mode Register -#define AT91C_SSC0_IDR ((AT91_REG *) 0xFFFD0048) // (SSC0) Interrupt Disable Register -#define AT91C_SSC0_SR ((AT91_REG *) 0xFFFD0040) // (SSC0) Status Register -#define AT91C_SSC0_RC0R ((AT91_REG *) 0xFFFD0038) // (SSC0) Receive Compare 0 Register -#define AT91C_SSC0_RSHR ((AT91_REG *) 0xFFFD0030) // (SSC0) Receive Sync Holding Register -#define AT91C_SSC0_RHR ((AT91_REG *) 0xFFFD0020) // (SSC0) Receive Holding Register -#define AT91C_SSC0_TCMR ((AT91_REG *) 0xFFFD0018) // (SSC0) Transmit Clock Mode Register -#define AT91C_SSC0_RCMR ((AT91_REG *) 0xFFFD0010) // (SSC0) Receive Clock ModeRegister -#define AT91C_SSC0_CR ((AT91_REG *) 0xFFFD0000) // (SSC0) Control Register -// ========== Register definition for PDC_US3 peripheral ========== -#define AT91C_US3_PTSR ((AT91_REG *) 0xFFFCC124) // (PDC_US3) PDC Transfer Status Register -#define AT91C_US3_TNCR ((AT91_REG *) 0xFFFCC11C) // (PDC_US3) Transmit Next Counter Register -#define AT91C_US3_RNCR ((AT91_REG *) 0xFFFCC114) // (PDC_US3) Receive Next Counter Register -#define AT91C_US3_TCR ((AT91_REG *) 0xFFFCC10C) // (PDC_US3) Transmit Counter Register -#define AT91C_US3_RCR ((AT91_REG *) 0xFFFCC104) // (PDC_US3) Receive Counter Register -#define AT91C_US3_PTCR ((AT91_REG *) 0xFFFCC120) // (PDC_US3) PDC Transfer Control Register -#define AT91C_US3_TNPR ((AT91_REG *) 0xFFFCC118) // (PDC_US3) Transmit Next Pointer Register -#define AT91C_US3_RNPR ((AT91_REG *) 0xFFFCC110) // (PDC_US3) Receive Next Pointer Register -#define AT91C_US3_TPR ((AT91_REG *) 0xFFFCC108) // (PDC_US3) Transmit Pointer Register -#define AT91C_US3_RPR ((AT91_REG *) 0xFFFCC100) // (PDC_US3) Receive Pointer Register -// ========== Register definition for US3 peripheral ========== -#define AT91C_US3_IF ((AT91_REG *) 0xFFFCC04C) // (US3) IRDA_FILTER Register -#define AT91C_US3_NER ((AT91_REG *) 0xFFFCC044) // (US3) Nb Errors Register -#define AT91C_US3_RTOR ((AT91_REG *) 0xFFFCC024) // (US3) Receiver Time-out Register -#define AT91C_US3_THR ((AT91_REG *) 0xFFFCC01C) // (US3) Transmitter Holding Register -#define AT91C_US3_CSR ((AT91_REG *) 0xFFFCC014) // (US3) Channel Status Register -#define AT91C_US3_IDR ((AT91_REG *) 0xFFFCC00C) // (US3) Interrupt Disable Register -#define AT91C_US3_MR ((AT91_REG *) 0xFFFCC004) // (US3) Mode Register -#define AT91C_US3_XXR ((AT91_REG *) 0xFFFCC048) // (US3) XON_XOFF Register -#define AT91C_US3_FIDI ((AT91_REG *) 0xFFFCC040) // (US3) FI_DI_Ratio Register -#define AT91C_US3_TTGR ((AT91_REG *) 0xFFFCC028) // (US3) Transmitter Time-guard Register -#define AT91C_US3_BRGR ((AT91_REG *) 0xFFFCC020) // (US3) Baud Rate Generator Register -#define AT91C_US3_RHR ((AT91_REG *) 0xFFFCC018) // (US3) Receiver Holding Register -#define AT91C_US3_IMR ((AT91_REG *) 0xFFFCC010) // (US3) Interrupt Mask Register -#define AT91C_US3_IER ((AT91_REG *) 0xFFFCC008) // (US3) Interrupt Enable Register -#define AT91C_US3_CR ((AT91_REG *) 0xFFFCC000) // (US3) Control Register -// ========== Register definition for PDC_US2 peripheral ========== -#define AT91C_US2_PTSR ((AT91_REG *) 0xFFFC8124) // (PDC_US2) PDC Transfer Status Register -#define AT91C_US2_TNCR ((AT91_REG *) 0xFFFC811C) // (PDC_US2) Transmit Next Counter Register -#define AT91C_US2_RNCR ((AT91_REG *) 0xFFFC8114) // (PDC_US2) Receive Next Counter Register -#define AT91C_US2_TCR ((AT91_REG *) 0xFFFC810C) // (PDC_US2) Transmit Counter Register -#define AT91C_US2_PTCR ((AT91_REG *) 0xFFFC8120) // (PDC_US2) PDC Transfer Control Register -#define AT91C_US2_RCR ((AT91_REG *) 0xFFFC8104) // (PDC_US2) Receive Counter Register -#define AT91C_US2_TNPR ((AT91_REG *) 0xFFFC8118) // (PDC_US2) Transmit Next Pointer Register -#define AT91C_US2_RPR ((AT91_REG *) 0xFFFC8100) // (PDC_US2) Receive Pointer Register -#define AT91C_US2_TPR ((AT91_REG *) 0xFFFC8108) // (PDC_US2) Transmit Pointer Register -#define AT91C_US2_RNPR ((AT91_REG *) 0xFFFC8110) // (PDC_US2) Receive Next Pointer Register -// ========== Register definition for US2 peripheral ========== -#define AT91C_US2_XXR ((AT91_REG *) 0xFFFC8048) // (US2) XON_XOFF Register -#define AT91C_US2_FIDI ((AT91_REG *) 0xFFFC8040) // (US2) FI_DI_Ratio Register -#define AT91C_US2_TTGR ((AT91_REG *) 0xFFFC8028) // (US2) Transmitter Time-guard Register -#define AT91C_US2_BRGR ((AT91_REG *) 0xFFFC8020) // (US2) Baud Rate Generator Register -#define AT91C_US2_RHR ((AT91_REG *) 0xFFFC8018) // (US2) Receiver Holding Register -#define AT91C_US2_IMR ((AT91_REG *) 0xFFFC8010) // (US2) Interrupt Mask Register -#define AT91C_US2_IER ((AT91_REG *) 0xFFFC8008) // (US2) Interrupt Enable Register -#define AT91C_US2_CR ((AT91_REG *) 0xFFFC8000) // (US2) Control Register -#define AT91C_US2_IF ((AT91_REG *) 0xFFFC804C) // (US2) IRDA_FILTER Register -#define AT91C_US2_NER ((AT91_REG *) 0xFFFC8044) // (US2) Nb Errors Register -#define AT91C_US2_RTOR ((AT91_REG *) 0xFFFC8024) // (US2) Receiver Time-out Register -#define AT91C_US2_THR ((AT91_REG *) 0xFFFC801C) // (US2) Transmitter Holding Register -#define AT91C_US2_CSR ((AT91_REG *) 0xFFFC8014) // (US2) Channel Status Register -#define AT91C_US2_IDR ((AT91_REG *) 0xFFFC800C) // (US2) Interrupt Disable Register -#define AT91C_US2_MR ((AT91_REG *) 0xFFFC8004) // (US2) Mode Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_PTSR ((AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNCR ((AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_RNCR ((AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_TCR ((AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_RCR ((AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_PTCR ((AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TNPR ((AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RNPR ((AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_TPR ((AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -#define AT91C_US1_RPR ((AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_XXR ((AT91_REG *) 0xFFFC4048) // (US1) XON_XOFF Register -#define AT91C_US1_RHR ((AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_IMR ((AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_IER ((AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_CR ((AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_RTOR ((AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_THR ((AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_CSR ((AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR ((AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_FIDI ((AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_BRGR ((AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_TTGR ((AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_IF ((AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER ((AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_MR ((AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_PTCR ((AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_TNPR ((AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR ((AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TPR ((AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RPR ((AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_PTSR ((AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR ((AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_RNCR ((AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -#define AT91C_US0_TCR ((AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_RCR ((AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_TTGR ((AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_BRGR ((AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_RHR ((AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IMR ((AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_NER ((AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_RTOR ((AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_XXR ((AT91_REG *) 0xFFFC0048) // (US0) XON_XOFF Register -#define AT91C_US0_FIDI ((AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_CR ((AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IER ((AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -#define AT91C_US0_IF ((AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_MR ((AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_IDR ((AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_CSR ((AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_THR ((AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_RHR ((AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -#define AT91C_TWI_IDR ((AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_SR ((AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_CWGR ((AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_SMR ((AT91_REG *) 0xFFFB8008) // (TWI) Slave Mode Register -#define AT91C_TWI_CR ((AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_THR ((AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IMR ((AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_IER ((AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_IADR ((AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR ((AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -// ========== Register definition for PDC_MCI peripheral ========== -#define AT91C_MCI_PTCR ((AT91_REG *) 0xFFFB4120) // (PDC_MCI) PDC Transfer Control Register -#define AT91C_MCI_TNPR ((AT91_REG *) 0xFFFB4118) // (PDC_MCI) Transmit Next Pointer Register -#define AT91C_MCI_RNPR ((AT91_REG *) 0xFFFB4110) // (PDC_MCI) Receive Next Pointer Register -#define AT91C_MCI_TPR ((AT91_REG *) 0xFFFB4108) // (PDC_MCI) Transmit Pointer Register -#define AT91C_MCI_RPR ((AT91_REG *) 0xFFFB4100) // (PDC_MCI) Receive Pointer Register -#define AT91C_MCI_PTSR ((AT91_REG *) 0xFFFB4124) // (PDC_MCI) PDC Transfer Status Register -#define AT91C_MCI_TNCR ((AT91_REG *) 0xFFFB411C) // (PDC_MCI) Transmit Next Counter Register -#define AT91C_MCI_RNCR ((AT91_REG *) 0xFFFB4114) // (PDC_MCI) Receive Next Counter Register -#define AT91C_MCI_TCR ((AT91_REG *) 0xFFFB410C) // (PDC_MCI) Transmit Counter Register -#define AT91C_MCI_RCR ((AT91_REG *) 0xFFFB4104) // (PDC_MCI) Receive Counter Register -// ========== Register definition for MCI peripheral ========== -#define AT91C_MCI_IDR ((AT91_REG *) 0xFFFB4048) // (MCI) MCI Interrupt Disable Register -#define AT91C_MCI_SR ((AT91_REG *) 0xFFFB4040) // (MCI) MCI Status Register -#define AT91C_MCI_RDR ((AT91_REG *) 0xFFFB4030) // (MCI) MCI Receive Data Register -#define AT91C_MCI_RSPR ((AT91_REG *) 0xFFFB4020) // (MCI) MCI Response Register -#define AT91C_MCI_ARGR ((AT91_REG *) 0xFFFB4010) // (MCI) MCI Argument Register -#define AT91C_MCI_DTOR ((AT91_REG *) 0xFFFB4008) // (MCI) MCI Data Timeout Register -#define AT91C_MCI_CR ((AT91_REG *) 0xFFFB4000) // (MCI) MCI Control Register -#define AT91C_MCI_IMR ((AT91_REG *) 0xFFFB404C) // (MCI) MCI Interrupt Mask Register -#define AT91C_MCI_IER ((AT91_REG *) 0xFFFB4044) // (MCI) MCI Interrupt Enable Register -#define AT91C_MCI_TDR ((AT91_REG *) 0xFFFB4034) // (MCI) MCI Transmit Data Register -#define AT91C_MCI_CMDR ((AT91_REG *) 0xFFFB4014) // (MCI) MCI Command Register -#define AT91C_MCI_SDCR ((AT91_REG *) 0xFFFB400C) // (MCI) MCI SD Card Register -#define AT91C_MCI_MR ((AT91_REG *) 0xFFFB4004) // (MCI) MCI Mode Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_ISR ((AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_IDR ((AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_GLBSTATE ((AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_FDR ((AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -#define AT91C_UDP_CSR ((AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_RSTEP ((AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_ICR ((AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_IMR ((AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_IER ((AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register -#define AT91C_UDP_FADDR ((AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_NUM ((AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -// ========== Register definition for TC5 peripheral ========== -#define AT91C_TC5_CMR ((AT91_REG *) 0xFFFA4084) // (TC5) Channel Mode Register -#define AT91C_TC5_IDR ((AT91_REG *) 0xFFFA40A8) // (TC5) Interrupt Disable Register -#define AT91C_TC5_SR ((AT91_REG *) 0xFFFA40A0) // (TC5) Status Register -#define AT91C_TC5_RB ((AT91_REG *) 0xFFFA4098) // (TC5) Register B -#define AT91C_TC5_CV ((AT91_REG *) 0xFFFA4090) // (TC5) Counter Value -#define AT91C_TC5_CCR ((AT91_REG *) 0xFFFA4080) // (TC5) Channel Control Register -#define AT91C_TC5_IMR ((AT91_REG *) 0xFFFA40AC) // (TC5) Interrupt Mask Register -#define AT91C_TC5_IER ((AT91_REG *) 0xFFFA40A4) // (TC5) Interrupt Enable Register -#define AT91C_TC5_RC ((AT91_REG *) 0xFFFA409C) // (TC5) Register C -#define AT91C_TC5_RA ((AT91_REG *) 0xFFFA4094) // (TC5) Register A -// ========== Register definition for TC4 peripheral ========== -#define AT91C_TC4_IMR ((AT91_REG *) 0xFFFA406C) // (TC4) Interrupt Mask Register -#define AT91C_TC4_IER ((AT91_REG *) 0xFFFA4064) // (TC4) Interrupt Enable Register -#define AT91C_TC4_RC ((AT91_REG *) 0xFFFA405C) // (TC4) Register C -#define AT91C_TC4_RA ((AT91_REG *) 0xFFFA4054) // (TC4) Register A -#define AT91C_TC4_CMR ((AT91_REG *) 0xFFFA4044) // (TC4) Channel Mode Register -#define AT91C_TC4_IDR ((AT91_REG *) 0xFFFA4068) // (TC4) Interrupt Disable Register -#define AT91C_TC4_SR ((AT91_REG *) 0xFFFA4060) // (TC4) Status Register -#define AT91C_TC4_RB ((AT91_REG *) 0xFFFA4058) // (TC4) Register B -#define AT91C_TC4_CV ((AT91_REG *) 0xFFFA4050) // (TC4) Counter Value -#define AT91C_TC4_CCR ((AT91_REG *) 0xFFFA4040) // (TC4) Channel Control Register -// ========== Register definition for TC3 peripheral ========== -#define AT91C_TC3_IMR ((AT91_REG *) 0xFFFA402C) // (TC3) Interrupt Mask Register -#define AT91C_TC3_CV ((AT91_REG *) 0xFFFA4010) // (TC3) Counter Value -#define AT91C_TC3_CCR ((AT91_REG *) 0xFFFA4000) // (TC3) Channel Control Register -#define AT91C_TC3_IER ((AT91_REG *) 0xFFFA4024) // (TC3) Interrupt Enable Register -#define AT91C_TC3_CMR ((AT91_REG *) 0xFFFA4004) // (TC3) Channel Mode Register -#define AT91C_TC3_RA ((AT91_REG *) 0xFFFA4014) // (TC3) Register A -#define AT91C_TC3_RC ((AT91_REG *) 0xFFFA401C) // (TC3) Register C -#define AT91C_TC3_IDR ((AT91_REG *) 0xFFFA4028) // (TC3) Interrupt Disable Register -#define AT91C_TC3_RB ((AT91_REG *) 0xFFFA4018) // (TC3) Register B -#define AT91C_TC3_SR ((AT91_REG *) 0xFFFA4020) // (TC3) Status Register -// ========== Register definition for TCB1 peripheral ========== -#define AT91C_TCB1_BCR ((AT91_REG *) 0xFFFA4140) // (TCB1) TC Block Control Register -#define AT91C_TCB1_BMR ((AT91_REG *) 0xFFFA4144) // (TCB1) TC Block Mode Register -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_IMR ((AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_IER ((AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_RC ((AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_RA ((AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_CMR ((AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register -#define AT91C_TC2_IDR ((AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_SR ((AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -#define AT91C_TC2_RB ((AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_CV ((AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_CCR ((AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_IMR ((AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_IER ((AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_RC ((AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_RA ((AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_CMR ((AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register -#define AT91C_TC1_IDR ((AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR ((AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_RB ((AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CV ((AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -#define AT91C_TC1_CCR ((AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_IMR ((AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -#define AT91C_TC0_IER ((AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RC ((AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RA ((AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_CMR ((AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register -#define AT91C_TC0_IDR ((AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_SR ((AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RB ((AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CV ((AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_CCR ((AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -// ========== Register definition for TCB0 peripheral ========== -#define AT91C_TCB0_BMR ((AT91_REG *) 0xFFFA00C4) // (TCB0) TC Block Mode Register -#define AT91C_TCB0_BCR ((AT91_REG *) 0xFFFA00C0) // (TCB0) TC Block Control Register -// ========== Register definition for UHP peripheral ========== -#define AT91C_UHP_HcRhDescriptorA ((AT91_REG *) 0x00300048) // (UHP) Root Hub characteristics A -#define AT91C_UHP_HcRhPortStatus ((AT91_REG *) 0x00300054) // (UHP) Root Hub Port Status Register -#define AT91C_UHP_HcRhDescriptorB ((AT91_REG *) 0x0030004C) // (UHP) Root Hub characteristics B -#define AT91C_UHP_HcControl ((AT91_REG *) 0x00300004) // (UHP) Operating modes for the Host Controller -#define AT91C_UHP_HcInterruptStatus ((AT91_REG *) 0x0030000C) // (UHP) Interrupt Status Register -#define AT91C_UHP_HcRhStatus ((AT91_REG *) 0x00300050) // (UHP) Root Hub Status register -#define AT91C_UHP_HcRevision ((AT91_REG *) 0x00300000) // (UHP) Revision -#define AT91C_UHP_HcCommandStatus ((AT91_REG *) 0x00300008) // (UHP) Command & status Register -#define AT91C_UHP_HcInterruptEnable ((AT91_REG *) 0x00300010) // (UHP) Interrupt Enable Register -#define AT91C_UHP_HcHCCA ((AT91_REG *) 0x00300018) // (UHP) Pointer to the Host Controller Communication Area -#define AT91C_UHP_HcControlHeadED ((AT91_REG *) 0x00300020) // (UHP) First Endpoint Descriptor of the Control list -#define AT91C_UHP_HcInterruptDisable ((AT91_REG *) 0x00300014) // (UHP) Interrupt Disable Register -#define AT91C_UHP_HcPeriodCurrentED ((AT91_REG *) 0x0030001C) // (UHP) Current Isochronous or Interrupt Endpoint Descriptor -#define AT91C_UHP_HcControlCurrentED ((AT91_REG *) 0x00300024) // (UHP) Endpoint Control and Status Register -#define AT91C_UHP_HcBulkCurrentED ((AT91_REG *) 0x0030002C) // (UHP) Current endpoint of the Bulk list -#define AT91C_UHP_HcFmInterval ((AT91_REG *) 0x00300034) // (UHP) Bit time between 2 consecutive SOFs -#define AT91C_UHP_HcBulkHeadED ((AT91_REG *) 0x00300028) // (UHP) First endpoint register of the Bulk list -#define AT91C_UHP_HcBulkDoneHead ((AT91_REG *) 0x00300030) // (UHP) Last completed transfer descriptor -#define AT91C_UHP_HcFmRemaining ((AT91_REG *) 0x00300038) // (UHP) Bit time remaining in the current Frame -#define AT91C_UHP_HcPeriodicStart ((AT91_REG *) 0x00300040) // (UHP) Periodic Start -#define AT91C_UHP_HcLSThreshold ((AT91_REG *) 0x00300044) // (UHP) LS Threshold -#define AT91C_UHP_HcFmNumber ((AT91_REG *) 0x0030003C) // (UHP) Frame number -// ========== Register definition for EMAC peripheral ========== -#define AT91C_EMAC_RSR ((AT91_REG *) 0xFFFBC020) // (EMAC) Receive Status Register -#define AT91C_EMAC_MAN ((AT91_REG *) 0xFFFBC034) // (EMAC) PHY Maintenance Register -#define AT91C_EMAC_HSH ((AT91_REG *) 0xFFFBC090) // (EMAC) Hash Address High[63:32] -#define AT91C_EMAC_MCOL ((AT91_REG *) 0xFFFBC048) // (EMAC) Multiple Collision Frame Register -#define AT91C_EMAC_IER ((AT91_REG *) 0xFFFBC028) // (EMAC) Interrupt Enable Register -#define AT91C_EMAC_SA2H ((AT91_REG *) 0xFFFBC0A4) // (EMAC) Specific Address 2 High, Last 2 bytes -#define AT91C_EMAC_HSL ((AT91_REG *) 0xFFFBC094) // (EMAC) Hash Address Low[31:0] -#define AT91C_EMAC_LCOL ((AT91_REG *) 0xFFFBC05C) // (EMAC) Late Collision Register -#define AT91C_EMAC_OK ((AT91_REG *) 0xFFFBC04C) // (EMAC) Frames Received OK Register -#define AT91C_EMAC_CFG ((AT91_REG *) 0xFFFBC004) // (EMAC) Network Configuration Register -#define AT91C_EMAC_SA3L ((AT91_REG *) 0xFFFBC0A8) // (EMAC) Specific Address 3 Low, First 4 bytes -#define AT91C_EMAC_SEQE ((AT91_REG *) 0xFFFBC050) // (EMAC) Frame Check Sequence Error Register -#define AT91C_EMAC_ECOL ((AT91_REG *) 0xFFFBC060) // (EMAC) Excessive Collision Register -#define AT91C_EMAC_ELR ((AT91_REG *) 0xFFFBC070) // (EMAC) Excessive Length Error Register -#define AT91C_EMAC_SR ((AT91_REG *) 0xFFFBC008) // (EMAC) Network Status Register -#define AT91C_EMAC_RBQP ((AT91_REG *) 0xFFFBC018) // (EMAC) Receive Buffer Queue Pointer -#define AT91C_EMAC_CSE ((AT91_REG *) 0xFFFBC064) // (EMAC) Carrier Sense Error Register -#define AT91C_EMAC_RJB ((AT91_REG *) 0xFFFBC074) // (EMAC) Receive Jabber Register -#define AT91C_EMAC_USF ((AT91_REG *) 0xFFFBC078) // (EMAC) Undersize Frame Register -#define AT91C_EMAC_IDR ((AT91_REG *) 0xFFFBC02C) // (EMAC) Interrupt Disable Register -#define AT91C_EMAC_SA1L ((AT91_REG *) 0xFFFBC098) // (EMAC) Specific Address 1 Low, First 4 bytes -#define AT91C_EMAC_IMR ((AT91_REG *) 0xFFFBC030) // (EMAC) Interrupt Mask Register -#define AT91C_EMAC_FRA ((AT91_REG *) 0xFFFBC040) // (EMAC) Frames Transmitted OK Register -#define AT91C_EMAC_SA3H ((AT91_REG *) 0xFFFBC0AC) // (EMAC) Specific Address 3 High, Last 2 bytes -#define AT91C_EMAC_SA1H ((AT91_REG *) 0xFFFBC09C) // (EMAC) Specific Address 1 High, Last 2 bytes -#define AT91C_EMAC_SCOL ((AT91_REG *) 0xFFFBC044) // (EMAC) Single Collision Frame Register -#define AT91C_EMAC_ALE ((AT91_REG *) 0xFFFBC054) // (EMAC) Alignment Error Register -#define AT91C_EMAC_TAR ((AT91_REG *) 0xFFFBC00C) // (EMAC) Transmit Address Register -#define AT91C_EMAC_SA4L ((AT91_REG *) 0xFFFBC0B0) // (EMAC) Specific Address 4 Low, First 4 bytes -#define AT91C_EMAC_SA2L ((AT91_REG *) 0xFFFBC0A0) // (EMAC) Specific Address 2 Low, First 4 bytes -#define AT91C_EMAC_TUE ((AT91_REG *) 0xFFFBC068) // (EMAC) Transmit Underrun Error Register -#define AT91C_EMAC_DTE ((AT91_REG *) 0xFFFBC058) // (EMAC) Deferred Transmission Frame Register -#define AT91C_EMAC_TCR ((AT91_REG *) 0xFFFBC010) // (EMAC) Transmit Control Register -#define AT91C_EMAC_CTL ((AT91_REG *) 0xFFFBC000) // (EMAC) Network Control Register -#define AT91C_EMAC_SA4H ((AT91_REG *) 0xFFFBC0B4) // (EMAC) Specific Address 4 High, Last 2 bytesr -#define AT91C_EMAC_CDE ((AT91_REG *) 0xFFFBC06C) // (EMAC) Code Error Register -#define AT91C_EMAC_SQEE ((AT91_REG *) 0xFFFBC07C) // (EMAC) SQE Test Error Register -#define AT91C_EMAC_TSR ((AT91_REG *) 0xFFFBC014) // (EMAC) Transmit Status Register -#define AT91C_EMAC_DRFC ((AT91_REG *) 0xFFFBC080) // (EMAC) Discarded RX Frame Register -// ========== Register definition for EBI peripheral ========== -#define AT91C_EBI_CFGR ((AT91_REG *) 0xFFFFFF64) // (EBI) Configuration Register -#define AT91C_EBI_CSA ((AT91_REG *) 0xFFFFFF60) // (EBI) Chip Select Assignment Register -// ========== Register definition for SMC2 peripheral ========== -#define AT91C_SMC2_CSR ((AT91_REG *) 0xFFFFFF70) // (SMC2) SMC2 Chip Select Register -// ========== Register definition for SDRC peripheral ========== -#define AT91C_SDRC_IMR ((AT91_REG *) 0xFFFFFFAC) // (SDRC) SDRAM Controller Interrupt Mask Register -#define AT91C_SDRC_IER ((AT91_REG *) 0xFFFFFFA4) // (SDRC) SDRAM Controller Interrupt Enable Register -#define AT91C_SDRC_SRR ((AT91_REG *) 0xFFFFFF9C) // (SDRC) SDRAM Controller Self Refresh Register -#define AT91C_SDRC_TR ((AT91_REG *) 0xFFFFFF94) // (SDRC) SDRAM Controller Refresh Timer Register -#define AT91C_SDRC_ISR ((AT91_REG *) 0xFFFFFFB0) // (SDRC) SDRAM Controller Interrupt Mask Register -#define AT91C_SDRC_IDR ((AT91_REG *) 0xFFFFFFA8) // (SDRC) SDRAM Controller Interrupt Disable Register -#define AT91C_SDRC_LPR ((AT91_REG *) 0xFFFFFFA0) // (SDRC) SDRAM Controller Low Power Register -#define AT91C_SDRC_CR ((AT91_REG *) 0xFFFFFF98) // (SDRC) SDRAM Controller Configuration Register -#define AT91C_SDRC_MR ((AT91_REG *) 0xFFFFFF90) // (SDRC) SDRAM Controller Mode Register -// ========== Register definition for BFC peripheral ========== -#define AT91C_BFC_MR ((AT91_REG *) 0xFFFFFFC0) // (BFC) BFC Mode Register - -#include - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91RM9200 -// ***************************************************************************** -#define AT91C_ID_FIQ 0u // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS 1u // System Peripheral -#define AT91C_ID_PIOA 2u // Parallel IO Controller A -#define AT91C_ID_PIOB 3u // Parallel IO Controller B -#define AT91C_ID_PIOC 4u // Parallel IO Controller C -#define AT91C_ID_PIOD 5u // Parallel IO Controller D -#define AT91C_ID_US0 6u // USART 0 -#define AT91C_ID_US1 7u // USART 1 -#define AT91C_ID_US2 8u // USART 2 -#define AT91C_ID_US3 9u // USART 3 -#define AT91C_ID_MCI 10u // Multimedia Card Interface -#define AT91C_ID_UDP 11u // USB Device Port -#define AT91C_ID_TWI 12u // Two-Wire Interface -#define AT91C_ID_SPI 13u // Serial Peripheral Interface -#define AT91C_ID_SSC0 14u // Serial Synchronous Controller 0 -#define AT91C_ID_SSC1 15u // Serial Synchronous Controller 1 -#define AT91C_ID_SSC2 16u // Serial Synchronous Controller 2 -#define AT91C_ID_TC0 17u // Timer Counter 0 -#define AT91C_ID_TC1 18u // Timer Counter 1 -#define AT91C_ID_TC2 19u // Timer Counter 2 -#define AT91C_ID_TC3 20u // Timer Counter 3 -#define AT91C_ID_TC4 21u // Timer Counter 4 -#define AT91C_ID_TC5 22u // Timer Counter 5 -#define AT91C_ID_UHP 23u // USB Host port -#define AT91C_ID_EMAC 24u // Ethernet MAC -#define AT91C_ID_IRQ0 25u // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 26u // Advanced Interrupt Controller (IRQ1) -#define AT91C_ID_IRQ2 27u // Advanced Interrupt Controller (IRQ2) -#define AT91C_ID_IRQ3 28u // Advanced Interrupt Controller (IRQ3) -#define AT91C_ID_IRQ4 29u // Advanced Interrupt Controller (IRQ4) -#define AT91C_ID_IRQ5 30u // Advanced Interrupt Controller (IRQ5) -#define AT91C_ID_IRQ6 31u // Advanced Interrupt Controller (IRQ6) - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91RM9200 -// ***************************************************************************** -#define AT91C_BASE_SYS ((AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_MC ((AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_RTC ((AT91PS_RTC) 0xFFFFFE00) // (RTC) Base Address -#define AT91C_BASE_ST ((AT91PS_ST) 0xFFFFFD00) // (ST) Base Address -#define AT91C_BASE_PMC ((AT91PS_PMC) 0xFFFFFC00) // (PMC) Base Address -#define AT91C_BASE_CKGR ((AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_PIOD ((AT91PS_PIO) 0xFFFFFA00) // (PIOD) Base Address -#define AT91C_BASE_PIOC ((AT91PS_PIO) 0xFFFFF800) // (PIOC) Base Address -#define AT91C_BASE_PIOB ((AT91PS_PIO) 0xFFFFF600) // (PIOB) Base Address -#define AT91C_BASE_PIOA ((AT91PS_PIO) 0xFFFFF400) // (PIOA) Base Address -#define AT91C_BASE_DBGU ((AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PDC_DBGU ((AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_AIC ((AT91PS_AIC) 0xFFFFF000) // (AIC) Base Address -#define AT91C_BASE_PDC_SPI ((AT91PS_PDC) 0xFFFE0100) // (PDC_SPI) Base Address -#define AT91C_BASE_SPI ((AT91PS_SPI) 0xFFFE0000) // (SPI) Base Address -#define AT91C_BASE_PDC_SSC2 ((AT91PS_PDC) 0xFFFD8100) // (PDC_SSC2) Base Address -#define AT91C_BASE_SSC2 ((AT91PS_SSC) 0xFFFD8000) // (SSC2) Base Address -#define AT91C_BASE_PDC_SSC1 ((AT91PS_PDC) 0xFFFD4100) // (PDC_SSC1) Base Address -#define AT91C_BASE_SSC1 ((AT91PS_SSC) 0xFFFD4000) // (SSC1) Base Address -#define AT91C_BASE_PDC_SSC0 ((AT91PS_PDC) 0xFFFD0100) // (PDC_SSC0) Base Address -#define AT91C_BASE_SSC0 ((AT91PS_SSC) 0xFFFD0000) // (SSC0) Base Address -#define AT91C_BASE_PDC_US3 ((AT91PS_PDC) 0xFFFCC100) // (PDC_US3) Base Address -#define AT91C_BASE_US3 ((AT91PS_USART) 0xFFFCC000) // (US3) Base Address -#define AT91C_BASE_PDC_US2 ((AT91PS_PDC) 0xFFFC8100) // (PDC_US2) Base Address -#define AT91C_BASE_US2 ((AT91PS_USART) 0xFFFC8000) // (US2) Base Address -#define AT91C_BASE_PDC_US1 ((AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 ((AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 ((AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 ((AT91PS_USART) 0xFFFC0000) // (US0) Base Address -#define AT91C_BASE_TWI ((AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_PDC_MCI ((AT91PS_PDC) 0xFFFB4100) // (PDC_MCI) Base Address -#define AT91C_BASE_MCI ((AT91PS_MCI) 0xFFFB4000) // (MCI) Base Address -#define AT91C_BASE_UDP ((AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address -#define AT91C_BASE_TC5 ((AT91PS_TC) 0xFFFA4080) // (TC5) Base Address -#define AT91C_BASE_TC4 ((AT91PS_TC) 0xFFFA4040) // (TC4) Base Address -#define AT91C_BASE_TC3 ((AT91PS_TC) 0xFFFA4000) // (TC3) Base Address -#define AT91C_BASE_TCB1 ((AT91PS_TCB) 0xFFFA4080) // (TCB1) Base Address -#define AT91C_BASE_TC2 ((AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TC1 ((AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC0 ((AT91PS_TC) 0xFFFA0000) // (TC0) Base Address -#define AT91C_BASE_TCB0 ((AT91PS_TCB) 0xFFFA0000) // (TCB0) Base Address -#define AT91C_BASE_UHP ((AT91PS_UHP) 0x00300000) // (UHP) Base Address -#define AT91C_BASE_EMAC ((AT91PS_EMAC) 0xFFFBC000) // (EMAC) Base Address -#define AT91C_BASE_EBI ((AT91PS_EBI) 0xFFFFFF60) // (EBI) Base Address -#define AT91C_BASE_SMC2 ((AT91PS_SMC2) 0xFFFFFF70) // (SMC2) Base Address -#define AT91C_BASE_SDRC ((AT91PS_SDRC) 0xFFFFFF90) // (SDRC) Base Address -#define AT91C_BASE_BFC ((AT91PS_BFC) 0xFFFFFFC0) // (BFC) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91RM9200 -// ***************************************************************************** -#define AT91C_ISRAM ((char *) 0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE 0x00004000u // Internal SRAM size in byte (16 Kbyte) -#define AT91C_IROM ((char *) 0x00100000) // Internal ROM base address -#define AT91C_IROM_SIZE 0x00020000u // Internal ROM size in byte (128 Kbyte) - -#endif Property changes on: head/sys/boot/arm/at91/libat91/at91rm9200.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/spi_flash.c =================================================================== --- head/sys/boot/arm/at91/libat91/spi_flash.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/spi_flash.c (nonexistent) @@ -1,267 +0,0 @@ -/****************************************************************************** - * - * Filename: spi_flash.c - * - * Instantiation of SPI flash control routines supporting AT45DB161B - * - * Revision information: - * - * 17JAN2005 kb_admin initial creation - * adapted from external sources - * tested for basic operation only!!! - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "at91rm9200.h" -#include "spi_flash.h" -#include "lib.h" - -/*********************** PRIVATE FUNCTIONS/DATA ******************************/ - - -static spiCommand_t spi_command; -static char tx_commandBuffer[8], rx_commandBuffer[8]; - -/* - * .KB_C_FN_DEFINITION_START - * void SendCommand(spiCommand_t *pCommand) - * Private function sends 8-bit value to the device and returns the 8-bit - * value in response. - * .KB_C_FN_DEFINITION_END - */ -static void -SendCommand(spiCommand_t *pCommand) -{ - AT91PS_SPI pSPI = AT91C_BASE_SPI; - - pSPI->SPI_PTCR = AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS; - - pSPI->SPI_RPR = (unsigned)pCommand->rx_cmd; - pSPI->SPI_RCR = pCommand->rx_cmd_size; - pSPI->SPI_TPR = (unsigned)pCommand->tx_cmd; - pSPI->SPI_TCR = pCommand->tx_cmd_size; - - pSPI->SPI_TNPR = (unsigned)pCommand->tx_data; - pSPI->SPI_TNCR = pCommand->tx_data_size; - pSPI->SPI_RNPR = (unsigned)pCommand->rx_data; - pSPI->SPI_RNCR = pCommand->rx_data_size; - - pSPI->SPI_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN; - - // wait for completion - while (!(pSPI->SPI_SR & AT91C_SPI_SPENDRX)) - Delay(700); -} - - -/* - * .KB_C_FN_DEFINITION_START - * char GetFlashStatus(void) - * Private function to return device status. - * .KB_C_FN_DEFINITION_END - */ -static char -GetFlashStatus(void) -{ - p_memset((char *)&spi_command, 0, sizeof(spi_command)); - p_memset(tx_commandBuffer, 0, 8); - tx_commandBuffer[0] = STATUS_REGISTER_READ; - p_memset(rx_commandBuffer, 0, 8); - spi_command.tx_cmd = tx_commandBuffer; - spi_command.rx_cmd = rx_commandBuffer; - spi_command.rx_cmd_size = 2; - spi_command.tx_cmd_size = 2; - SendCommand(&spi_command); - return (rx_commandBuffer[1]); -} - -/* - * .KB_C_FN_DEFINITION_START - * void WaitForDeviceReady(void) - * Private function to poll until the device is ready for next operation. - * .KB_C_FN_DEFINITION_END - */ -static void -WaitForDeviceReady(void) -{ - while (!(GetFlashStatus() & 0x80)) ; -} - -/*************************** GLOBAL FUNCTIONS ********************************/ - - -/* - * .KB_C_FN_DEFINITION_START - * void SPI_ReadFlash(unsigned flash_addr, unsigned dest_addr, unsigned size) - * Global function to read the SPI flash device using the continuous read - * array command. - * .KB_C_FN_DEFINITION_END - */ -void -SPI_ReadFlash(unsigned flash_addr, char *dest_addr, unsigned size) -{ - unsigned pageAddress, byteAddress; - - // determine page address - pageAddress = flash_addr / FLASH_PAGE_SIZE; - - // determine byte address - byteAddress = flash_addr % FLASH_PAGE_SIZE; - - p_memset(tx_commandBuffer, 0, 8); -#ifdef BOOT_BWCT - tx_commandBuffer[0] = 0xd2; - tx_commandBuffer[1] = ((pageAddress >> 6) & 0xFF); - tx_commandBuffer[2] = ((pageAddress << 2) & 0xFC) | - ((byteAddress >> 8) & 0x3); - tx_commandBuffer[3] = byteAddress & 0xFF; - spi_command.tx_cmd = tx_commandBuffer; - spi_command.tx_cmd_size = 8; - spi_command.tx_data_size = size; - spi_command.tx_data = dest_addr; - - p_memset(rx_commandBuffer, 0, 8); - spi_command.rx_cmd = rx_commandBuffer; - spi_command.rx_cmd_size = 8; - spi_command.rx_data_size = size; - spi_command.rx_data = dest_addr; -#else - tx_commandBuffer[0] = CONTINUOUS_ARRAY_READ_HF; - tx_commandBuffer[1] = ((pageAddress >> 5) & 0xFF); - tx_commandBuffer[2] = ((pageAddress << 3) & 0xF8) | - ((byteAddress >> 8) & 0x7); - tx_commandBuffer[3] = byteAddress & 0xFF; - spi_command.tx_cmd = tx_commandBuffer; - spi_command.tx_cmd_size = 5; - spi_command.tx_data_size = size; - spi_command.tx_data = dest_addr; - - p_memset(rx_commandBuffer, 0, 8); - spi_command.rx_cmd = rx_commandBuffer; - spi_command.rx_cmd_size = 5; - spi_command.rx_data_size = size; - spi_command.rx_data = dest_addr; -#endif - - SendCommand(&spi_command); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void SPI_WriteFlash(unsigned flash_addr, unsigned src_addr, unsigned size) - * Global function to program the SPI flash device. Notice the warning - * provided in lower-level functions regarding corruption of data in non- - * page aligned write operations. - * .KB_C_FN_DEFINITION_END - */ -void -SPI_WriteFlash(unsigned flash_addr, char *src_addr, unsigned size) -{ - unsigned pageAddress, byteAddress; - - // determine page address - pageAddress = flash_addr / FLASH_PAGE_SIZE; - - // determine byte address - byteAddress = flash_addr % FLASH_PAGE_SIZE; - - p_memset(tx_commandBuffer, 0, 8); -#ifdef BOOT_BWCT - tx_commandBuffer[0] = 0x82; - tx_commandBuffer[1] = ((pageAddress >> 6) & 0xFF); - tx_commandBuffer[2] = ((pageAddress << 2) & 0xFC) | - ((byteAddress >> 8) & 0x3); - tx_commandBuffer[3] = (byteAddress & 0xFF); -#else - tx_commandBuffer[0] = PROGRAM_THROUGH_BUFFER; - tx_commandBuffer[1] = ((pageAddress >> 5) & 0xFF); - tx_commandBuffer[2] = ((pageAddress << 3) & 0xF8) | - ((byteAddress >> 8) & 0x7); - tx_commandBuffer[3] = (byteAddress & 0xFF); -#endif - - p_memset(rx_commandBuffer, 0, 8); - - spi_command.tx_cmd = tx_commandBuffer; - spi_command.rx_cmd = rx_commandBuffer; - spi_command.rx_cmd_size = 4; - spi_command.tx_cmd_size = 4; - - spi_command.tx_data_size = size; - spi_command.tx_data = src_addr; - spi_command.rx_data_size = size; - spi_command.rx_data = src_addr; - - SendCommand(&spi_command); - - WaitForDeviceReady(); -} - -/* - * .KB_C_FN_DEFINITION_START - * void SPI_InitFlash(void) - * Global function to initialize the SPI flash device/accessor functions. - * .KB_C_FN_DEFINITION_END - */ -void -SPI_InitFlash(void) -{ - AT91PS_PIO pPio; - AT91PS_SPI pSPI = AT91C_BASE_SPI; - unsigned value; - - // enable CS0, CLK, MOSI, MISO - pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - pPio->PIO_ASR = AT91C_PIO_PA3 | AT91C_PIO_PA1 | AT91C_PIO_PA0 | - AT91C_PIO_PA2; - pPio->PIO_PDR = AT91C_PIO_PA3 | AT91C_PIO_PA1 | AT91C_PIO_PA0 | - AT91C_PIO_PA2; - - // enable clocks to SPI - AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_SPI; - - // reset the SPI - pSPI->SPI_CR = AT91C_SPI_SWRST; - - pSPI->SPI_MR = (0xf << 24) | AT91C_SPI_MSTR | AT91C_SPI_MODFDIS | - (0xE << 16); - - pSPI->SPI_CSR[0] = AT91C_SPI_CPOL | (4 << 16) | (2 << 8); - pSPI->SPI_CR = AT91C_SPI_SPIEN; - - pSPI->SPI_PTCR = AT91C_PDC_TXTDIS; - pSPI->SPI_PTCR = AT91C_PDC_RXTDIS; - pSPI->SPI_RNPR = 0; - pSPI->SPI_RNCR = 0; - pSPI->SPI_TNPR = 0; - pSPI->SPI_TNCR = 0; - pSPI->SPI_RPR = 0; - pSPI->SPI_RCR = 0; - pSPI->SPI_TPR = 0; - pSPI->SPI_TCR = 0; - pSPI->SPI_PTCR = AT91C_PDC_RXTEN; - pSPI->SPI_PTCR = AT91C_PDC_TXTEN; - - value = pSPI->SPI_RDR; - value = pSPI->SPI_SR; - - value = GetFlashStatus() & 0xFC; -#ifdef BOOT_BWCT - if (value != 0xB4 && value != 0xAC) - printf(" Bad SPI status: 0x%x\n", value); -#else - if (value != 0xBC) - printf(" Bad SPI status: 0x%x\n", value); -#endif -} Property changes on: head/sys/boot/arm/at91/libat91/spi_flash.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/spi_flash.h =================================================================== --- head/sys/boot/arm/at91/libat91/spi_flash.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/spi_flash.h (nonexistent) @@ -1,58 +0,0 @@ -/******************************************************************************* - * - * Filename: spi_flash.h - * - * Definition of flash control routines supporting AT45DB161B - * - * Revision information: - * - * 17JAN2005 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - ******************************************************************************/ - -#ifndef _SPI_FLASH_H_ -#define _SPI_FLASH_H_ - -typedef struct { - char *tx_cmd; - unsigned tx_cmd_size; - char *rx_cmd; - unsigned rx_cmd_size; - char *tx_data; - unsigned tx_data_size; - char *rx_data; - unsigned rx_data_size; -} spiCommand_t; - -void SPI_ReadFlash(unsigned flash_addr, char *dest_addr, unsigned size); -void SPI_WriteFlash(unsigned flash_addr, char *dest_addr, unsigned size); -void SPI_InitFlash(void); - -void SPI_GetId(unsigned *id); - -#ifdef BOOT_BWCT -#define FLASH_PAGE_SIZE 528 -#else -#define FLASH_PAGE_SIZE 1056 -#endif - -// Flash commands - -#define CONTINUOUS_ARRAY_READ 0xE8 -#define CONTINUOUS_ARRAY_READ_HF 0x0B -#define CONTINUOUS_ARRAY_READ_LF 0x03 -#define STATUS_REGISTER_READ 0xD7 -#define PROGRAM_THROUGH_BUFFER 0x82 -#define MANUFACTURER_ID 0x9F - -#endif Property changes on: head/sys/boot/arm/at91/libat91/spi_flash.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/tag_list.c =================================================================== --- head/sys/boot/arm/at91/libat91/tag_list.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/tag_list.c (nonexistent) @@ -1,81 +0,0 @@ -/****************************************************************************** - * - * Filename: tag_list.c - * - * Instantiation of basic routines that create linux-boot tag list. - * - * Revision information: - * - * 22AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -/******************************* GLOBALS *************************************/ - -/********************** PRIVATE FUNCTIONS/DATA/DEFINES ***********************/ - -#define u32 unsigned -#define u16 unsigned short -#define u8 unsigned char - -// #include "/usr/src/arm/linux/include/asm/setup.h" -#include -#include "tag_list.h" - -#define PAGE_SIZE 0x1000 -#define MEM_SIZE 0x2000000 -#define PHYS_OFFSET 0x20000000 - -/*************************** GLOBAL FUNCTIONS ********************************/ - -/* - * .KB_C_FN_DEFINITION_START - * void InitTagList(char*, void *) - * This global function populates a linux-boot style tag list from the - * string passed in the pointer at the location specified. - * .KB_C_FN_DEFINITION_END - */ -void InitTagList(char *parms, void *output) { - - char *src, *dst; - struct tag *tagList = (struct tag*)output; - - tagList->hdr.size = tag_size(tag_core); - tagList->hdr.tag = ATAG_CORE; - tagList->u.core.flags = 1; - tagList->u.core.pagesize = PAGE_SIZE; - tagList->u.core.rootdev = 0xff; - tagList = tag_next(tagList); - - tagList->hdr.size = tag_size(tag_mem32); - tagList->hdr.tag = ATAG_MEM; - tagList->u.mem.size = MEM_SIZE; - tagList->u.mem.start = PHYS_OFFSET; - tagList = tag_next(tagList); - - tagList->hdr.size = tag_size(tag_cmdline); - tagList->hdr.tag = ATAG_CMDLINE; - - src = parms; - dst = tagList->u.cmdline.cmdline; - while (*src) { - *dst++ = *src++; - } - *dst = 0; - - tagList->hdr.size += ((unsigned)(src - parms) + 1) / sizeof(unsigned); - tagList = tag_next(tagList); - - tagList->hdr.size = 0; - tagList->hdr.tag = ATAG_NONE; -} Property changes on: head/sys/boot/arm/at91/libat91/tag_list.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/Makefile =================================================================== --- head/sys/boot/arm/at91/libat91/Makefile (revision 324981) +++ head/sys/boot/arm/at91/libat91/Makefile (nonexistent) @@ -1,22 +0,0 @@ -# $FreeBSD$ - -.include -.include "${.CURDIR}/../Makefile.inc" - -SOC?=at91rm9200 - -LIB= at91 -INTERNALLIB= -SRCS=${SOC}_lowlevel.c delay.c eeprom.c emac.c emac_init.c getc.c \ - putchar.c printf.c reset.c spi_flash.c xmodem.c \ - sd-card.c strcvt.c strlen.c strcmp.c memcpy.c strcpy.c \ - memset.c memcmp.c -SRCS+=ashldi3.c divsi3.S -MAN= - -.if ${MK_TAG_LIST} != "no" -CFLAGS += -I${.CURDIR}/.. -DSUPPORT_TAG_LIST -SRCS+=tag_list.c -.endif - -.include Property changes on: head/sys/boot/arm/at91/libat91/Makefile ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/memset.c =================================================================== --- head/sys/boot/arm/at91/libat91/memset.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/memset.c (nonexistent) @@ -1,36 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -#include "lib.h" - -void -p_memset(char *buffer, char value, int size) -{ - while (size--) - *buffer++ = value; -} Property changes on: head/sys/boot/arm/at91/libat91/memset.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/tag_list.h =================================================================== --- head/sys/boot/arm/at91/libat91/tag_list.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/tag_list.h (nonexistent) @@ -1,28 +0,0 @@ -/***************************************************************************** - * - * Filename: tag_list.h - * - * Definition of basic routines that create linux-boot tag list. - * - * Revision information: - * - * 22AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - ****************************************************************************/ - -#ifndef _TAG_LIST_H_ -#define _TAG_LIST_H_ - -extern void InitTagList(char *parms, void*); - -#endif /* _TAG_LIST_H_ */ Property changes on: head/sys/boot/arm/at91/libat91/tag_list.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/p_string.c =================================================================== --- head/sys/boot/arm/at91/libat91/p_string.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/p_string.c (nonexistent) @@ -1,57 +0,0 @@ -/****************************************************************************** - * - * Filename: p_string.c - * - * Instantiation of basic string operations to prevent inclusion of full - * string library. These are simple implementations not necessarily optimized - * for speed, but rather to show intent. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin minor updates - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "lib.h" - -/* - * .KB_C_FN_DEFINITION_START - * void p_memset(char *buffer, char value, int size) - * This global function sets memory at the pointer for the specified - * number of bytes to value. - * .KB_C_FN_DEFINITION_END - */ -void -p_memset(char *buffer, char value, int size) -{ - while (size--) - *buffer++ = value; -} - -/* - * .KB_C_FN_DEFINITION_START - * int p_memcmp(char *to, char *from, unsigned size) - * This global function compares data at to against data at from for - * size bytes. Returns 0 if the locations are equal. size must be - * greater than 0. - * .KB_C_FN_DEFINITION_END - */ -int -p_memcmp(const char *to, const char *from, unsigned size) -{ - while ((--size) && (*to++ == *from++)) - continue; - - return (*to != *from); -} Property changes on: head/sys/boot/arm/at91/libat91/p_string.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/eeprom.c =================================================================== --- head/sys/boot/arm/at91/libat91/eeprom.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/eeprom.c (nonexistent) @@ -1,185 +0,0 @@ -/****************************************************************************** - * - * Filename: eeprom.c - * - * Instantiation of eeprom routines - * - * Revision information: - * - * 28AUG2004 kb_admin initial creation - adapted from Atmel sources - * 12JAN2005 kb_admin fixed clock generation, write polling, init - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - -#include "at91rm9200_lowlevel.h" -#include "at91rm9200.h" -#include "lib.h" - -/******************************* GLOBALS *************************************/ - - -/*********************** PRIVATE FUNCTIONS/DATA ******************************/ - - -/* Use a macro to calculate the TWI clock generator value to save code space. */ -#define AT91C_TWSI_CLOCK 100000 -#define TWSI_EEPROM_ADDRESS 0x50 - -#define TWI_CLK_BASE_DIV ((AT91C_MASTER_CLOCK/(4*AT91C_TWSI_CLOCK)) - 2) -#define SET_TWI_CLOCK ((0x00010000) | (TWI_CLK_BASE_DIV) | (TWI_CLK_BASE_DIV << 8)) - - -/*************************** GLOBAL FUNCTIONS ********************************/ - - -/* - * .KB_C_FN_DEFINITION_START - * void InitEEPROM(void) - * This global function initializes the EEPROM interface (TWI). Intended - * to be called a single time. - * .KB_C_FN_DEFINITION_END - */ -void -InitEEPROM(void) -{ - - AT91PS_TWI twiPtr = (AT91PS_TWI)AT91C_BASE_TWI; - - AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA; - AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC; - - pPio->PIO_ASR = AT91C_PIO_PA25 | AT91C_PIO_PA26; - pPio->PIO_PDR = AT91C_PIO_PA25 | AT91C_PIO_PA26; - - pPio->PIO_MDDR = ~AT91C_PIO_PA25; - pPio->PIO_MDER = AT91C_PIO_PA25; - - pPMC->PMC_PCER = 1u << AT91C_ID_TWI; - - twiPtr->TWI_IDR = 0xffffffffu; - twiPtr->TWI_CR = AT91C_TWI_SWRST; - twiPtr->TWI_CR = AT91C_TWI_MSEN | AT91C_TWI_SVDIS; - - twiPtr->TWI_CWGR = SET_TWI_CLOCK; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void ReadEEPROM(unsigned ee_addr, char *data_addr, unsigned size) - * This global function reads data from the eeprom at ee_addr storing data - * to data_addr for size bytes. Assume the TWI has been initialized. - * This function does not utilize the page read mode to simplify the code. - * .KB_C_FN_DEFINITION_END - */ -int -ReadEEPROM(unsigned ee_off, unsigned char *data_addr, unsigned size) -{ - const AT91PS_TWI twiPtr = AT91C_BASE_TWI; - unsigned int status; - unsigned int count; - - status = twiPtr->TWI_SR; - status = twiPtr->TWI_RHR; - - // Set the TWI Master Mode Register - twiPtr->TWI_MMR = (TWSI_EEPROM_ADDRESS << 16) | - AT91C_TWI_IADRSZ_2_BYTE | AT91C_TWI_MREAD; - - // Set TWI Internal Address Register - twiPtr->TWI_IADR = ee_off; - - // Start transfer - twiPtr->TWI_CR = AT91C_TWI_START; - - status = twiPtr->TWI_SR; - - while (size-- > 1){ - // Wait RHR Holding register is full - count = 1000000; - while (!(twiPtr->TWI_SR & AT91C_TWI_RXRDY) && --count > 0) - continue; - if (count <= 0) - return -1; - - // Read byte - *(data_addr++) = twiPtr->TWI_RHR; - } - - twiPtr->TWI_CR = AT91C_TWI_STOP; - - status = twiPtr->TWI_SR; - - // Wait transfer is finished - while (!(twiPtr->TWI_SR & AT91C_TWI_TXCOMP)) - continue; - - // Read last byte - *data_addr = twiPtr->TWI_RHR; - return 0; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void WriteEEPROM(unsigned ee_off, char *data_addr, unsigned size) - * This global function writes data to the eeprom at ee_off using data - * from data_addr for size bytes. Assume the TWI has been initialized. - * This function does not utilize the page write mode as the write time is - * much greater than the time required to access the device for byte-write - * functionality. This allows the function to be much simpler. - * .KB_C_FN_DEFINITION_END - */ -void -WriteEEPROM(unsigned ee_off, char *data_addr, unsigned size) -{ - const AT91PS_TWI twiPtr = AT91C_BASE_TWI; - unsigned status; - unsigned char test_data; - - while (size--) { - if (!(ee_off & 0x3f)) - putchar('.'); - - // Set the TWI Master Mode Register - twiPtr->TWI_MMR = ((TWSI_EEPROM_ADDRESS << 16) | - AT91C_TWI_IADRSZ_2_BYTE) & ~AT91C_TWI_MREAD; - - // Set TWI Internal Address Register - twiPtr->TWI_IADR = ee_off++; - - status = twiPtr->TWI_SR; - - twiPtr->TWI_THR = *(data_addr++); - - twiPtr->TWI_CR = AT91C_TWI_START; - - // Wait transfer is finished - while (!(twiPtr->TWI_SR & AT91C_TWI_TXRDY)) - continue; - - twiPtr->TWI_CR = AT91C_TWI_STOP; - - status = twiPtr->TWI_SR; - - // Wait transfer is finished - while (!(twiPtr->TWI_SR & AT91C_TWI_TXCOMP)) - continue; - - // wait for write operation to complete - ReadEEPROM(ee_off, &test_data, 1); - } - - putchar('\r'); - putchar('\n'); -} Property changes on: head/sys/boot/arm/at91/libat91/eeprom.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/delay.c =================================================================== --- head/sys/boot/arm/at91/libat91/delay.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/delay.c (nonexistent) @@ -1,43 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "spi_flash.h" -#include "lib.h" - -void -Delay(int us) -{ - unsigned later, now; - - now = AT91C_BASE_ST->ST_CRTR; - later = (now + us / 25 + 1) & AT91C_ST_CRTV; - while (later != AT91C_BASE_ST->ST_CRTR) - continue; -} Property changes on: head/sys/boot/arm/at91/libat91/delay.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/lib.h =================================================================== --- head/sys/boot/arm/at91/libat91/lib.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/lib.h (nonexistent) @@ -1,65 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef ARM_BOOT_LIB_H -#define ARM_BOOT_LIB_H - -int getc(int); -void putchar(int); -void xputchar(int); -void printf(const char *fmt,...); - -/* The following function write eeprom at ee_addr using data */ -/* from data_add for size bytes. */ -int ReadEEPROM(unsigned eeoff, unsigned char *data_addr, unsigned size); -void WriteEEPROM(unsigned eeoff, char *data_addr, unsigned size); -void InitEEPROM(void); - -/* XMODEM protocol */ -int xmodem_rx(char *dst); - -/* */ -void start_wdog(int n); -void reset(void); - -/* Delay us */ -void Delay(int us); - -#define ToASCII(x) ((x > 9) ? (x + 'A' - 0xa) : (x + '0')) - -int p_IsWhiteSpace(char cValue); -unsigned p_HexCharValue(char cValue); -unsigned p_ASCIIToHex(const char *buf); -unsigned p_ASCIIToDec(const char *buf); - -void p_memset(char *buffer, char value, int size); -int p_strlen(const char *buffer); -char *strcpy(char *to, const char *from); -void memcpy(void *to, const void *from, unsigned size); -int p_memcmp(const char *to, const char *from, unsigned size); -int strcmp(const char *to, const char *from); - -#endif Property changes on: head/sys/boot/arm/at91/libat91/lib.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/emac.c =================================================================== --- head/sys/boot/arm/at91/libat91/emac.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/emac.c (nonexistent) @@ -1,575 +0,0 @@ -/******************************************************************************* - * - * Filename: emac.c - * - * Instantiation of routines for MAC/ethernet functions supporting tftp. - * - * Revision information: - * - * 28AUG2004 kb_admin initial creation - * 08JAN2005 kb_admin added tftp download - * also adapted from external sources - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - ******************************************************************************/ - -#include "at91rm9200.h" -#include "at91rm9200_lowlevel.h" -#include "emac.h" -#include "lib.h" - -/* ****************************** GLOBALS *************************************/ - -/* ********************** PRIVATE FUNCTIONS/DATA ******************************/ - -static receive_descriptor_t *p_rxBD; -static unsigned short localPort; -static unsigned short serverPort; -static unsigned serverMACSet; -static unsigned localIPSet, serverIPSet; -static unsigned lastSize; -static unsigned char serverMACAddr[6]; -static unsigned char localIPAddr[4], serverIPAddr[4]; -static int ackBlock; -static char *dlAddress; - -static unsigned transmitBuffer[1024 / sizeof(unsigned)]; -static unsigned tftpSendPacket[256 / sizeof(unsigned)]; - -/* - * .KB_C_FN_DEFINITION_START - * unsigned short IP_checksum(unsigned short *p, int len) - * This private function calculates the IP checksum for various headers. - * .KB_C_FN_DEFINITION_END - */ -static unsigned short -IP_checksum(unsigned short *p, int len) -{ - unsigned i, t; - - len &= ~1; - - for (i=0,t=0; i> 16); - return (~t); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void GetServerAddress(void) - * This private function sends an ARP request to determine the server MAC. - * .KB_C_FN_DEFINITION_END - */ -static void -GetServerAddress(void) -{ - arp_header_t *p_ARP; - - p_ARP = (arp_header_t*)transmitBuffer; - - p_memset((char*)p_ARP->dest_mac, 0xFF, 6); - - memcpy(p_ARP->src_mac, localMACAddr, 6); - - p_ARP->frame_type = SWAP16(PROTOCOL_ARP); - p_ARP->hard_type = SWAP16(1); - p_ARP->prot_type = SWAP16(PROTOCOL_IP); - p_ARP->hard_size = 6; - p_ARP->prot_size = 4; - p_ARP->operation = SWAP16(ARP_REQUEST); - - memcpy(p_ARP->sender_mac, localMACAddr, 6); - memcpy(p_ARP->sender_ip, localIPAddr, 4); - p_memset((char*)p_ARP->target_mac, 0, 6); - memcpy(p_ARP->target_ip, serverIPAddr, 4); - - // wait until transmit is available - while (!(*AT91C_EMAC_TSR & AT91C_EMAC_BNQ)) - continue; - - *AT91C_EMAC_TSR |= AT91C_EMAC_COMP; - *AT91C_EMAC_TAR = (unsigned)transmitBuffer; - *AT91C_EMAC_TCR = 0x40; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void Send_TFTP_Packet(char *tftpData, unsigned tftpLength) - * This private function initializes and send a TFTP packet. - * .KB_C_FN_DEFINITION_END - */ -static void -Send_TFTP_Packet(char *tftpData, unsigned tftpLength) -{ - transmit_header_t *macHdr = (transmit_header_t*)tftpSendPacket; - ip_header_t *ipHdr; - udp_header_t *udpHdr; - unsigned t_checksum; - - memcpy(macHdr->dest_mac, serverMACAddr, 6); - memcpy(macHdr->src_mac, localMACAddr, 6); - macHdr->proto_mac = SWAP16(PROTOCOL_IP); - - ipHdr = (ip_header_t*)&macHdr->packet_length; - - ipHdr->ip_v_hl = 0x45; - ipHdr->ip_tos = 0; - ipHdr->ip_len = SWAP16(28 + tftpLength); - ipHdr->ip_id = 0; - ipHdr->ip_off = SWAP16(0x4000); - ipHdr->ip_ttl = 64; - ipHdr->ip_p = PROTOCOL_UDP; - ipHdr->ip_sum = 0; - - memcpy(ipHdr->ip_src, localIPAddr, 4); - memcpy(ipHdr->ip_dst, serverIPAddr, 4); - - ipHdr->ip_sum = SWAP16(IP_checksum((unsigned short*)ipHdr, 20)); - - udpHdr = (udp_header_t*)(ipHdr + 1); - - udpHdr->src_port = localPort; - udpHdr->dst_port = serverPort; - udpHdr->udp_len = SWAP16(8 + tftpLength); - udpHdr->udp_cksum = 0; - - memcpy((char *)udpHdr+8, tftpData, tftpLength); - - t_checksum = IP_checksum((unsigned short*)ipHdr + 6, (16 + tftpLength)); - - t_checksum = (~t_checksum) & 0xFFFF; - t_checksum += 25 + tftpLength; - - t_checksum = (t_checksum & 0xffff) + (t_checksum >> 16); - t_checksum = (~t_checksum) & 0xFFFF; - - udpHdr->udp_cksum = SWAP16(t_checksum); - - while (!(*AT91C_EMAC_TSR & AT91C_EMAC_BNQ)) - continue; - - *AT91C_EMAC_TSR |= AT91C_EMAC_COMP; - *AT91C_EMAC_TAR = (unsigned)tftpSendPacket; - *AT91C_EMAC_TCR = 42 + tftpLength; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void TFTP_RequestFile(char *filename) - * This private function sends a RRQ packet to the server. - * .KB_C_FN_DEFINITION_END - */ -static void -TFTP_RequestFile(char *filename) -{ - tftp_header_t tftpHeader; - char *cPtr, *ePtr, *mPtr; - unsigned length; - - tftpHeader.opcode = TFTP_RRQ_OPCODE; - - cPtr = (char*)&(tftpHeader.block_num); - - ePtr = strcpy(cPtr, filename); - mPtr = strcpy(ePtr, "octet"); - - length = mPtr - cPtr; - length += 2; - - Send_TFTP_Packet((char*)&tftpHeader, length); -} - - -/* - * .KB_C_FN_DEFINITION_START - * void TFTP_ACK_Data(char *data, unsigned short block_num, unsigned short len) - * This private function sends an ACK packet to the server. - * .KB_C_FN_DEFINITION_END - */ -static void -TFTP_ACK_Data(unsigned char *data, unsigned short block_num, unsigned short len) -{ - tftp_header_t tftpHeader; - - if (block_num == (ackBlock + 1)) { - ++ackBlock; - memcpy(dlAddress, data, len); - dlAddress += len; - lastSize += len; - if (ackBlock % 128 == 0) - printf("tftp: %u kB\r", lastSize / 1024); - } - tftpHeader.opcode = TFTP_ACK_OPCODE; - tftpHeader.block_num = SWAP16(ackBlock); - Send_TFTP_Packet((char*)&tftpHeader, 4); - if (len < 512) { - ackBlock = -2; - printf("tftp: %u byte\n", lastSize); - } -} - - -/* - * .KB_C_FN_DEFINITION_START - * void CheckForNewPacket(ip_header_t *pHeader) - * This private function polls for received ethernet packets and handles - * any here. - * .KB_C_FN_DEFINITION_END - */ -static int -CheckForNewPacket(ip_header_t *pHeader) -{ - unsigned short *pFrameType; - unsigned i; - char *pData; - ip_header_t *pIpHeader; - arp_header_t *p_ARP; - int process = 0; - - process = 0; - for (i = 0; i < MAX_RX_PACKETS; ++i) { - if(p_rxBD[i].address & 0x1) { - process = 1; - (*AT91C_EMAC_RSR) |= (*AT91C_EMAC_RSR); - break; - } - } - - if (!process) - return (0); - process = i; - - pFrameType = (unsigned short *)((p_rxBD[i].address & 0xFFFFFFFC) + 12); - pData = (char *)(p_rxBD[i].address & 0xFFFFFFFC); - - switch (*pFrameType) { - - case SWAP16(PROTOCOL_ARP): - p_ARP = (arp_header_t*)pData; - if (p_ARP->operation == SWAP16(ARP_REPLY)) { - // check if new server info is available - if ((!serverMACSet) && - (!(p_memcmp((char*)p_ARP->sender_ip, - (char*)serverIPAddr, 4)))) { - - serverMACSet = 1; - memcpy(serverMACAddr, p_ARP->sender_mac, 6); - } - } else if (p_ARP->operation == SWAP16(ARP_REQUEST)) { - // ARP REPLY operation - p_ARP->operation = SWAP16(ARP_REPLY); - - // Fill the dest address and src address - for (i = 0; i <6; i++) { - // swap ethernet dest address and ethernet src address - pData[i] = pData[i+6]; - pData[i+6] = localMACAddr[i]; - // swap sender ethernet address and target ethernet address - pData[i+22] = localMACAddr[i]; - pData[i+32] = pData[i+6]; - } - - // swap sender IP address and target IP address - for (i = 0; i<4; i++) { - pData[i+38] = pData[i+28]; - pData[i+28] = localIPAddr[i]; - } - - if (!(*AT91C_EMAC_TSR & AT91C_EMAC_BNQ)) break; - - *AT91C_EMAC_TSR |= AT91C_EMAC_COMP; - *AT91C_EMAC_TAR = (unsigned)pData; - *AT91C_EMAC_TCR = 0x40; - } - break; - case SWAP16(PROTOCOL_IP): - pIpHeader = (ip_header_t*)(pData + 14); - memcpy(pHeader, pIpHeader, sizeof(ip_header_t)); - - if (pIpHeader->ip_p == PROTOCOL_UDP) { - udp_header_t *udpHdr; - tftp_header_t *tftpHdr; - - udpHdr = (udp_header_t*)((char*)pIpHeader+20); - tftpHdr = (tftp_header_t*)((char*)udpHdr + 8); - - if (udpHdr->dst_port != localPort) - break; - - if (tftpHdr->opcode != TFTP_DATA_OPCODE) - break; - - if (ackBlock == -1) { - if (tftpHdr->block_num != SWAP16(1)) - break; - serverPort = udpHdr->src_port; - ackBlock = 0; - } - - if (serverPort != udpHdr->src_port) - break; - - TFTP_ACK_Data(tftpHdr->data, - SWAP16(tftpHdr->block_num), - SWAP16(udpHdr->udp_len) - 12); - } - } - p_rxBD[process].address &= ~0x01; - return (1); -} - - -/* - * .KB_C_FN_DEFINITION_START - * unsigned short AT91F_MII_ReadPhy (AT91PS_EMAC pEmac, unsigned char addr) - * This private function reads the PHY device. - * .KB_C_FN_DEFINITION_END - */ -#ifndef BOOT_BWCT -static unsigned short -AT91F_MII_ReadPhy (AT91PS_EMAC pEmac, unsigned char addr) -{ - unsigned value = 0x60020000 | (addr << 18); - - pEmac->EMAC_CTL |= AT91C_EMAC_MPE; - pEmac->EMAC_MAN = value; - while(!((pEmac->EMAC_SR) & AT91C_EMAC_IDLE)); - pEmac->EMAC_CTL &= ~AT91C_EMAC_MPE; - return (pEmac->EMAC_MAN & 0x0000ffff); -} -#endif - -/* - * .KB_C_FN_DEFINITION_START - * unsigned short AT91F_MII_WritePhy (AT91PS_EMAC pEmac, unsigned char addr, unsigned short s) - * This private function writes the PHY device. - * .KB_C_FN_DEFINITION_END - */ -#ifdef BOOT_TSC -static unsigned short -AT91F_MII_WritePhy (AT91PS_EMAC pEmac, unsigned char addr, unsigned short s) -{ - unsigned value = 0x50020000 | (addr << 18) | s; - - pEmac->EMAC_CTL |= AT91C_EMAC_MPE; - pEmac->EMAC_MAN = value; - while(!((pEmac->EMAC_SR) & AT91C_EMAC_IDLE)); - pEmac->EMAC_CTL &= ~AT91C_EMAC_MPE; - return (pEmac->EMAC_MAN & 0x0000ffff); -} -#endif - -/* - * .KB_C_FN_DEFINITION_START - * void MII_GetLinkSpeed(AT91PS_EMAC pEmac) - * This private function determines the link speed set by the PHY. - * .KB_C_FN_DEFINITION_END - */ -static void -MII_GetLinkSpeed(AT91PS_EMAC pEmac) -{ -#if defined(BOOT_TSC) || defined(BOOT_KB920X) || defined(BOOT_CENTIPAD) - unsigned short stat2; -#endif - unsigned update; -#ifdef BOOT_TSC - unsigned sec; - int i; -#endif -#ifdef BOOT_BWCT - /* hardcoded link speed since we connect a switch via MII */ - update = pEmac->EMAC_CFG & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD); - update |= AT91C_EMAC_SPD; - update |= AT91C_EMAC_FD; -#endif -#if defined(BOOT_KB920X) || defined(BOOT_CENTIPAD) - stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS2_REG); - if (!(stat2 & MII_STS2_LINK)) - return ; - update = pEmac->EMAC_CFG & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD); - if (stat2 & MII_STS2_100TX) - update |= AT91C_EMAC_SPD; - if (stat2 & MII_STS2_FDX) - update |= AT91C_EMAC_FD; -#endif -#ifdef BOOT_TSC - while (1) { - for (i = 0; i < 10; i++) { - stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS_REG); - if (stat2 & MII_STS_LINK_STAT) - break; - printf("."); - sec = GetSeconds(); - while (GetSeconds() == sec) - continue; - } - if (stat2 & MII_STS_LINK_STAT) - break; - printf("Resetting MII..."); - AT91F_MII_WritePhy(pEmac, 0x0, 0x8000); - while (AT91F_MII_ReadPhy(pEmac, 0x0) & 0x8000) continue; - } - printf("emac: link"); - stat2 = AT91F_MII_ReadPhy(pEmac, MII_SPEC_STS_REG); - update = pEmac->EMAC_CFG & ~(AT91C_EMAC_SPD | AT91C_EMAC_FD); - if (stat2 & (MII_SSTS_100FDX | MII_SSTS_100HDX)) { - printf(" 100TX"); - update |= AT91C_EMAC_SPD; - } - if (stat2 & (MII_SSTS_100FDX | MII_SSTS_10FDX)) { - printf(" FDX"); - update |= AT91C_EMAC_FD; - } - printf("\n"); -#endif - pEmac->EMAC_CFG = update; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void AT91F_EmacEntry(void) - * This private function initializes the EMAC on the chip. - * .KB_C_FN_DEFINITION_END - */ -static void -AT91F_EmacEntry(void) -{ - unsigned i; - char *pRxPacket = (char*)RX_DATA_START; - AT91PS_EMAC pEmac = AT91C_BASE_EMAC; - - p_rxBD = (receive_descriptor_t*)RX_BUFFER_START; - localPort = SWAP16(0x8002); - - for (i = 0; i < MAX_RX_PACKETS; ++i) { - - p_rxBD[i].address = (unsigned)pRxPacket; - p_rxBD[i].size = 0; - pRxPacket += RX_PACKET_SIZE; - } - - // Set the WRAP bit at the end of the list descriptor - p_rxBD[MAX_RX_PACKETS-1].address |= 0x02; - - if (!(pEmac->EMAC_SR & AT91C_EMAC_LINK)) - MII_GetLinkSpeed(pEmac); - - pEmac->EMAC_RBQP = (unsigned) p_rxBD; - pEmac->EMAC_RSR |= (AT91C_EMAC_OVR | AT91C_EMAC_REC | AT91C_EMAC_BNA); - pEmac->EMAC_CTL = AT91C_EMAC_TE | AT91C_EMAC_RE; - - pEmac->EMAC_TAR = (unsigned)transmitBuffer; -} - - -/* ************************** GLOBAL FUNCTIONS ********************************/ - -/* - * .KB_C_FN_DEFINITION_START - * void SetServerIPAddress(unsigned address) - * This global function sets the IP of the TFTP download server. - * .KB_C_FN_DEFINITION_END - */ -void -SetServerIPAddress(unsigned address) -{ - // force update in case the IP has changed - serverMACSet = 0; - - serverIPAddr[0] = (address >> 24) & 0xFF; - serverIPAddr[1] = (address >> 16) & 0xFF; - serverIPAddr[2] = (address >> 8) & 0xFF; - serverIPAddr[3] = (address >> 0) & 0xFF; - - serverIPSet = 1; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void SetLocalIPAddress(unsigned address) - * This global function sets the IP of this module. - * .KB_C_FN_DEFINITION_END - */ -void -SetLocalIPAddress(unsigned address) -{ - // force update in case the IP has changed - serverMACSet = 0; - - localIPAddr[0] = (address >> 24) & 0xFF; - localIPAddr[1] = (address >> 16) & 0xFF; - localIPAddr[2] = (address >> 8) & 0xFF; - localIPAddr[3] = (address >> 0) & 0xFF; - - localIPSet = 1; -} - - -/* - * .KB_C_FN_DEFINITION_START - * void TFTP_Download(unsigned address, char *filename) - * This global function initiates and processes a tftp download request. - * The server IP, local IP, local MAC must be set before this function is - * executed. - * .KB_C_FN_DEFINITION_END - */ -void -TFTP_Download(unsigned address, char *filename) -{ - ip_header_t IpHeader; - unsigned thisSeconds; - int timeout; - - if ((!localMACSet) || (!localIPSet) || (!serverIPSet)) - return ; - - AT91F_EmacEntry(); - GetServerAddress(); - dlAddress = (char*)address; - lastSize = 0; - timeout = 10; - thisSeconds = (GetSeconds() + 2) % 32; - serverPort = SWAP16(69); - ++localPort; - ackBlock = -1; - - while (timeout) { - if (CheckForNewPacket(&IpHeader)) { - if (ackBlock == -2) - break; - timeout = 10; - thisSeconds = (GetSeconds() + 2) % 32; - } else if (GetSeconds() == thisSeconds) { - --timeout; - thisSeconds = (GetSeconds() + 2) % 32; - if (!serverMACSet) - GetServerAddress(); - else if (ackBlock == -1) - TFTP_RequestFile(filename); - else { - // Be sure to send a NAK, which is done by - // ACKing the last block we got. - TFTP_ACK_Data(0, ackBlock, 512); - printf("\nNAK %u\n", ackBlock); - } - } - } - if (timeout == 0) - printf("TFTP TIMEOUT!\n"); -} Property changes on: head/sys/boot/arm/at91/libat91/emac.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/memcmp.c =================================================================== --- head/sys/boot/arm/at91/libat91/memcmp.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/memcmp.c (nonexistent) @@ -1,38 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -#include "lib.h" - -int -p_memcmp(const char *to, const char *from, unsigned size) -{ - while ((--size) && (*to++ == *from++)) - continue; - - return (size || (*to != *from)); -} Property changes on: head/sys/boot/arm/at91/libat91/memcmp.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/strlen.c =================================================================== --- head/sys/boot/arm/at91/libat91/strlen.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/strlen.c (nonexistent) @@ -1,68 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -/****************************************************************************** - * - * Filename: p_string.c - * - * Instantiation of basic string operations to prevent inclusion of full - * string library. These are simple implementations not necessarily optimized - * for speed, but rather to show intent. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin minor updates - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - *****************************************************************************/ - -#include "lib.h" - -/* - * .KB_C_FN_DEFINITION_START - * int p_strlen(char *) - * This global function returns the number of bytes starting at the pointer - * before (not including) the string termination character ('/0'). - * .KB_C_FN_DEFINITION_END - */ -int -p_strlen(const char *buffer) -{ - const char *ptr = buffer; - while (*ptr++) - continue; - return (ptr - buffer - 1); -} Property changes on: head/sys/boot/arm/at91/libat91/strlen.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/memcpy.c =================================================================== --- head/sys/boot/arm/at91/libat91/memcpy.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/memcpy.c (nonexistent) @@ -1,39 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -#include "lib.h" - -void -memcpy(void *dst, const void *src, unsigned len) -{ - const char *s = src; - char *d = dst; - - while (len--) - *d++ = *s++; -} Property changes on: head/sys/boot/arm/at91/libat91/memcpy.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/xmodem.c =================================================================== --- head/sys/boot/arm/at91/libat91/xmodem.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/xmodem.c (nonexistent) @@ -1,128 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. This version of xmodem has been nearly - * completely rewritten, but the CRC is from the original. - * - * $FreeBSD$ - */ - -#include "lib.h" - -#define PACKET_SIZE 128 - -/* Line control codes */ -#define SOH 0x01 /* start of header */ -#define ACK 0x06 /* Acknowledge */ -#define NAK 0x15 /* Negative acknowledge */ -#define CAN 0x18 /* Cancel */ -#define EOT 0x04 /* end of text */ - -#define TO 10 -/* - * int GetRecord(char , char *) - * This private function receives a x-modem record to the pointer and - * returns non-zero on success. - */ -static int -GetRecord(char blocknum, char *dest) -{ - int size; - int ch; - unsigned chk, j; - - chk = 0; - - if ((ch = getc(TO)) == -1) - goto err; - if (ch != blocknum) - goto err; - if ((ch = getc(TO)) == -1) - goto err; - if (ch != (~blocknum & 0xff)) - goto err; - - for (size = 0; size < PACKET_SIZE; ++size) { - if ((ch = getc(TO)) == -1) - goto err; - chk = chk ^ ch << 8; - for (j = 0; j < 8; ++j) { - if (chk & 0x8000) - chk = chk << 1 ^ 0x1021; - else - chk = chk << 1; - } - *dest++ = ch; - } - - chk &= 0xFFFF; - - if (((ch = getc(TO)) == -1) || ((ch & 0xff) != ((chk >> 8) & 0xFF))) - goto err; - if (((ch = getc(TO)) == -1) || ((ch & 0xff) != (chk & 0xFF))) - goto err; - putchar(ACK); - - return (1); -err:; - putchar(CAN); - // We should allow for resend, but we don't. - return (0); -} - -/* - * int xmodem_rx(char *) - * This global function receives a x-modem transmission consisting of - * (potentially) several blocks. Returns the number of bytes received or - * -1 on error. - */ -int -xmodem_rx(char *dest) -{ - int starting, ch; - char packetNumber, *startAddress = dest; - - packetNumber = 1; - starting = 1; - - while (1) { - if (starting) - putchar('C'); - if (((ch = getc(1)) == -1) || (ch != SOH && ch != EOT)) - continue; - if (ch == EOT) { - putchar(ACK); - return (dest - startAddress); - } - starting = 0; - // Xmodem packets: SOH PKT# ~PKT# 128-bytes CRC16 - if (!GetRecord(packetNumber, dest)) - return (-1); - dest += PACKET_SIZE; - packetNumber++; - } - - // the loop above should return in all cases - return (-1); -} Property changes on: head/sys/boot/arm/at91/libat91/xmodem.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/emac.h =================================================================== --- head/sys/boot/arm/at91/libat91/emac.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/emac.h (nonexistent) @@ -1,135 +0,0 @@ -/****************************************************************************** - * - * Filename: emac.h - * - * Definition of routine to set the MAC address. - * - * Revision information: - * - * 28AUG2004 kb_admin initial creation - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - *****************************************************************************/ - - -#ifndef _EMAC_H_ -#define _EMAC_H_ - -extern void EMAC_SetMACAddress(unsigned char addr[6]); -extern void SetServerIPAddress(unsigned address); -extern void SetLocalIPAddress(unsigned address); -extern void EMAC_Init(void); -extern void TFTP_Download(unsigned address, char *filename); - -#define MAX_RX_PACKETS 8 -#define RX_PACKET_SIZE 1536 -#define RX_BUFFER_START 0x21000000 -#define RX_DATA_START (RX_BUFFER_START + (8 * MAX_RX_PACKETS)) - -#define ARP_REQUEST 0x0001 -#define ARP_REPLY 0x0002 -#define PROTOCOL_ARP 0x0806 -#define PROTOCOL_IP 0x0800 -#define PROTOCOL_UDP 0x11 - -#define SWAP16(x) ((((x) & 0xff) << 8) | ((x) >> 8)) - -typedef struct { - unsigned address; - unsigned size; -} receive_descriptor_t; - -typedef struct { - - unsigned char dest_mac[6]; - - unsigned char src_mac[6]; - - unsigned short frame_type; - unsigned short hard_type; - unsigned short prot_type; - unsigned char hard_size; - unsigned char prot_size; - - unsigned short operation; - - unsigned char sender_mac[6]; - unsigned char sender_ip[4]; - - unsigned char target_mac[6]; - unsigned char target_ip[4]; - -} __attribute__((__packed__)) arp_header_t; - -typedef struct { - unsigned char ip_v_hl; - unsigned char ip_tos; - unsigned short ip_len; - unsigned short ip_id; - unsigned short ip_off; - unsigned char ip_ttl; - unsigned char ip_p; - unsigned short ip_sum; - unsigned char ip_src[4]; - unsigned char ip_dst[4]; -} __attribute__((__packed__)) ip_header_t; - -typedef struct { - unsigned char dest_mac[6]; - unsigned char src_mac[6]; - unsigned short proto_mac; - unsigned short packet_length; - ip_header_t iphdr; -} __attribute__((__packed__)) transmit_header_t; - -typedef struct { - unsigned short src_port; - unsigned short dst_port; - unsigned short udp_len; - unsigned short udp_cksum; -} __attribute__((__packed__)) udp_header_t; - -typedef struct { - unsigned short opcode; - unsigned short block_num; - unsigned char data[512]; -} __attribute__((__packed__)) tftp_header_t; - -// Preswap bytes -#define TFTP_RRQ_OPCODE 0x0100 -#define TFTP_WRQ_OPCODE 0x0200 -#define TFTP_DATA_OPCODE 0x0300 -#define TFTP_ACK_OPCODE 0x0400 -#define TFTP_ERROR_OPCODE 0x0500 - -/* MII registers definition */ -#define MII_STS_REG 0x01 -#define MII_STS_LINK_STAT 0x04 -#if defined(BOOT_KB920X) || defined(BOOT_CENTIPAD) -#define MII_STS2_REG 0x11 -#define MII_STS2_LINK 0x400 -#define MII_STS2_100TX 0x4000 -#define MII_STS2_FDX 0x200 -#else -#define MII_SPEC_STS_REG 0x11 -#define MII_SSTS_100FDX 0x8000 -#define MII_SSTS_100HDX 0x4000 -#define MII_SSTS_10FDX 0x2000 -#define MII_SSTS_10HDX 0x1000 -#endif - -extern unsigned char localMACAddr[6]; -extern unsigned localMAClow, localMAChigh; -extern unsigned localMACSet; -#define EMAC_Init() - -#endif /* _EMAC_H_ */ Property changes on: head/sys/boot/arm/at91/libat91/emac.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/printf.c =================================================================== --- head/sys/boot/arm/at91/libat91/printf.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/printf.c (nonexistent) @@ -1,70 +0,0 @@ -/*- - * Copyright (c) 1998 Robert Nordier - * All rights reserved. - * Copyright (c) 2006 M. Warner Losh - * All rights reserved. - * - * Redistribution and use in source and binary forms are freely - * permitted provided that the above copyright notice and this - * paragraph and the following disclaimer are duplicated in all - * such forms. - * - * This software is provided "AS IS" and without any express or - * implied warranties, including, without limitation, the implied - * warranties of merchantability and fitness for a particular - * purpose. - * - * $FreeBSD$ - */ - -#include -#include "lib.h" - -void -printf(const char *fmt,...) -{ - va_list ap; - const char *hex = "0123456789abcdef"; - char buf[10]; - char *s; - unsigned u; - int c; - - va_start(ap, fmt); - while ((c = *fmt++)) { - if (c == '%') { - c = *fmt++; - switch (c) { - case 'c': - xputchar(va_arg(ap, int)); - continue; - case 's': - for (s = va_arg(ap, char *); *s; s++) - xputchar(*s); - continue; - case 'd': /* A lie, always prints unsigned */ - case 'u': - u = va_arg(ap, unsigned); - s = buf; - do - *s++ = '0' + u % 10U; - while (u /= 10U); - dumpbuf:; - while (--s >= buf) - xputchar(*s); - continue; - case 'x': - u = va_arg(ap, unsigned); - s = buf; - do - *s++ = hex[u & 0xfu]; - while (u >>= 4); - goto dumpbuf; - } - } - xputchar(c); - } - va_end(ap); - - return; -} Property changes on: head/sys/boot/arm/at91/libat91/printf.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/lib_AT91RM9200.h =================================================================== --- head/sys/boot/arm/at91/libat91/lib_AT91RM9200.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/lib_AT91RM9200.h (nonexistent) @@ -1,277 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. - * - * $FreeBSD$ - */ - -#ifndef __LIBAT91RM9200_H -#define __LIBAT91RM9200_H - -#include "at91rm9200.h" - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PMC_EnablePeriphClock -//* \brief Enable peripheral clock -//*---------------------------------------------------------------------------- -static inline void -AT91F_PMC_EnablePeriphClock ( - AT91PS_PMC pPMC, // \arg pointer to PMC controller - unsigned int periphIds) // \arg IDs of peripherals to enable -{ - pPMC->PMC_PCER = periphIds; -} - -/* ***************************************************************************** - SOFTWARE API FOR PIO - ***************************************************************************** */ -//*---------------------------------------------------------------------------- -//* \fn AT91F_PIO_CfgPeriph -//* \brief Enable pins to be drived by peripheral -//*---------------------------------------------------------------------------- -static inline -void AT91F_PIO_CfgPeriph( - AT91PS_PIO pPio, // \arg pointer to a PIO controller - unsigned int periphAEnable, // \arg PERIPH A to enable - unsigned int periphBEnable) // \arg PERIPH B to enable - -{ - if (periphAEnable) - pPio->PIO_ASR = periphAEnable; - if (periphBEnable) - pPio->PIO_BSR = periphBEnable; - pPio->PIO_PDR = (periphAEnable | periphBEnable); // Set in Periph mode -} - -/* ***************************************************************************** - SOFTWARE API FOR MCI - ***************************************************************************** */ -//* Classic MCI Data Timeout Register Configuration with 1048576 MCK cycles between 2 data transfer -#define AT91C_MCI_DTOR_1MEGA_CYCLES (AT91C_MCI_DTOCYC | AT91C_MCI_DTOMUL) - -//* Classic MCI SDCard Register Configuration with 1-bit data bus on slot A -#define AT91C_MCI_MMC_SLOTA (AT91C_MCI_SCDSEL & 0x0) - -//* Classic MCI SDCard Register Configuration with 1-bit data bus on slot B -#define AT91C_MCI_MMC_SLOTB (AT91C_MCI_SCDSEL) - -//* Classic MCI SDCard Register Configuration with 4-bit data bus on slot A -#define AT91C_MCI_SDCARD_4BITS_SLOTA ( (AT91C_MCI_SCDSEL & 0x0) | AT91C_MCI_SCDBUS ) - -//* Classic MCI SDCard Register Configuration with 4-bit data bus on slot B -#define AT91C_MCI_SDCARD_4BITS_SLOTB (AT91C_MCI_SCDSEL | AT91C_MCI_SCDBUS) - - - -//*---------------------------------------------------------------------------- -//* \fn AT91F_MCI_Configure -//* \brief Configure the MCI -//*---------------------------------------------------------------------------- -static inline -void AT91F_MCI_Configure( - AT91PS_MCI pMCI, // \arg pointer to a MCI controller - unsigned int DTOR_register, // \arg Data Timeout Register to be programmed - unsigned int MR_register, // \arg Mode Register to be programmed - unsigned int SDCR_register) // \arg SDCard Register to be programmed -{ - //* Reset the MCI - pMCI->MCI_CR = AT91C_MCI_MCIEN | AT91C_MCI_PWSEN; - - //* Disable all the interrupts - pMCI->MCI_IDR = 0xFFFFFFFF; - - //* Set the Data Timeout Register - pMCI->MCI_DTOR = DTOR_register; - - //* Set the Mode Register - pMCI->MCI_MR = MR_register; - - //* Set the SDCard Register - pMCI->MCI_SDCR = SDCR_register; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_MCI_CfgPMC -//* \brief Enable Peripheral clock in PMC for MCI -//*---------------------------------------------------------------------------- -static inline void -AT91F_MCI_CfgPMC(void) -{ - AT91F_PMC_EnablePeriphClock( - AT91C_BASE_PMC, // PIO controller base address - ((unsigned int) 1 << AT91C_ID_MCI)); -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_MCI_CfgPIO -//* \brief Configure PIO controllers to drive MCI signals -//*---------------------------------------------------------------------------- -static inline void -AT91F_MCI_CfgPIO(void) -{ - // Configure PIO controllers to periph mode - AT91F_PIO_CfgPeriph( - AT91C_BASE_PIOA, // PIO controller base address - ((unsigned int) AT91C_PIO_PA28 ) | - ((unsigned int) AT91C_PIO_PA29 ) | - ((unsigned int) AT91C_PIO_PA27 ), // Peripheral A - 0); // Peripheral B - // Configure PIO controllers to periph mode - AT91F_PIO_CfgPeriph( - AT91C_BASE_PIOB, // PIO controller base address - 0, // Peripheral A - ((unsigned int) AT91C_PIO_PB5 ) | - ((unsigned int) AT91C_PIO_PB3 ) | - ((unsigned int) AT91C_PIO_PB4 )); // Peripheral B -} - - -/* ***************************************************************************** - SOFTWARE API FOR PDC - ***************************************************************************** */ -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_SetNextRx -//* \brief Set the next receive transfer descriptor -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_SetNextRx ( - AT91PS_PDC pPDC, // \arg pointer to a PDC controller - char *address, // \arg address to the next bloc to be received - unsigned int bytes) // \arg number of bytes to be received -{ - pPDC->PDC_RNPR = (unsigned int) address; - pPDC->PDC_RNCR = bytes; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_SetNextTx -//* \brief Set the next transmit transfer descriptor -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_SetNextTx( - AT91PS_PDC pPDC, // \arg pointer to a PDC controller - char *address, // \arg address to the next bloc to be transmitted - unsigned int bytes) // \arg number of bytes to be transmitted -{ - pPDC->PDC_TNPR = (unsigned int) address; - pPDC->PDC_TNCR = bytes; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_SetRx -//* \brief Set the receive transfer descriptor -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_SetRx( - AT91PS_PDC pPDC, // \arg pointer to a PDC controller - char *address, // \arg address to the next bloc to be received - unsigned int bytes) // \arg number of bytes to be received -{ - pPDC->PDC_RPR = (unsigned int) address; - pPDC->PDC_RCR = bytes; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_SetTx -//* \brief Set the transmit transfer descriptor -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_SetTx( - AT91PS_PDC pPDC, // \arg pointer to a PDC controller - char *address, // \arg address to the next bloc to be transmitted - unsigned int bytes) // \arg number of bytes to be transmitted -{ - pPDC->PDC_TPR = (unsigned int) address; - pPDC->PDC_TCR = bytes; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_EnableTx -//* \brief Enable transmit -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_EnableTx( - AT91PS_PDC pPDC ) // \arg pointer to a PDC controller -{ - pPDC->PDC_PTCR = AT91C_PDC_TXTEN; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_EnableRx -//* \brief Enable receive -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_EnableRx( - AT91PS_PDC pPDC ) // \arg pointer to a PDC controller -{ - pPDC->PDC_PTCR = AT91C_PDC_RXTEN; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_DisableTx -//* \brief Disable transmit -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_DisableTx( - AT91PS_PDC pPDC ) // \arg pointer to a PDC controller -{ - pPDC->PDC_PTCR = AT91C_PDC_TXTDIS; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_DisableRx -//* \brief Disable receive -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_DisableRx( - AT91PS_PDC pPDC ) // \arg pointer to a PDC controller -{ - pPDC->PDC_PTCR = AT91C_PDC_RXTDIS; -} - -//*---------------------------------------------------------------------------- -//* \fn AT91F_PDC_Open -//* \brief Open PDC: disable TX and RX reset transfer descriptors, re-enable RX and TX -//*---------------------------------------------------------------------------- -static inline void -AT91F_PDC_Open( - AT91PS_PDC pPDC) // \arg pointer to a PDC controller -{ - //* Disable the RX and TX PDC transfer requests - AT91F_PDC_DisableRx(pPDC); - AT91F_PDC_DisableTx(pPDC); - - //* Reset all Counter register Next buffer first - AT91F_PDC_SetNextTx(pPDC, (char *) 0, 0); - AT91F_PDC_SetNextRx(pPDC, (char *) 0, 0); - AT91F_PDC_SetTx(pPDC, (char *) 0, 0); - AT91F_PDC_SetRx(pPDC, (char *) 0, 0); - - //* Enable the RX and TX PDC transfer requests - AT91F_PDC_EnableRx(pPDC); - AT91F_PDC_EnableTx(pPDC); -} - -#endif Property changes on: head/sys/boot/arm/at91/libat91/lib_AT91RM9200.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/strcmp.c =================================================================== --- head/sys/boot/arm/at91/libat91/strcmp.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/strcmp.c (nonexistent) @@ -1,36 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -#include "lib.h" - -int -strcmp(const char *s1, const char *s2) -{ - for (; *s1 == *s2 && *s1; s1++, s2++); - return (unsigned char)*s1 - (unsigned char)*s2; -} Property changes on: head/sys/boot/arm/at91/libat91/strcmp.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/getc.c =================================================================== --- head/sys/boot/arm/at91/libat91/getc.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/getc.c (nonexistent) @@ -1,64 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provided by kwikbyte without - * copyright as follows: - * - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "at91rm9200_lowlevel.h" -#include "lib.h" - -/* - * int getc(int seconds) - * - * Reads a character from the DBGU port, if one is available within about - * seconds seconds. It assumes that DBGU has already been initialized. - */ -int -getc(int seconds) -{ - AT91PS_USART pUSART = (AT91PS_USART)AT91C_BASE_DBGU; - unsigned thisSecond; - - // Clamp to 20s - if (seconds > 20) - seconds = 20; - thisSecond = GetSeconds(); - seconds = thisSecond + seconds; - do { - if ((pUSART->US_CSR & AT91C_US_RXRDY)) - return (pUSART->US_RHR & 0xFF); - thisSecond = GetSeconds(); - } while (thisSecond != seconds); - return (-1); -} Property changes on: head/sys/boot/arm/at91/libat91/getc.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/strcpy.c =================================================================== --- head/sys/boot/arm/at91/libat91/strcpy.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/strcpy.c (nonexistent) @@ -1,38 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -#include "lib.h" - -char * -strcpy(char *to, const char *from) -{ - while (*from) - *to++ = *from++; - *to++ = '\0'; - return (to); -} Property changes on: head/sys/boot/arm/at91/libat91/strcpy.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/arm_init.S =================================================================== --- head/sys/boot/arm/at91/libat91/arm_init.S (revision 324981) +++ head/sys/boot/arm/at91/libat91/arm_init.S (nonexistent) @@ -1,129 +0,0 @@ -/******************************************************************************* - * - * Filename: arm_init.s - * - * Initialization for C-environment and basic operation. Adapted from - * ATMEL cstartup.s. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin updated for 16KB eeprom - * Atmel stack prevents loading full size at once - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - * - * $FreeBSD$ - ******************************************************************************/ - - .equ TWI_EEPROM_SIZE, 0x3000 - .equ ARM_MODE_USER, 0x10 - .equ ARM_MODE_FIQ, 0x11 - .equ ARM_MODE_IRQ, 0x12 - .equ ARM_MODE_SVC, 0x13 - .equ ARM_MODE_ABORT, 0x17 - .equ ARM_MODE_UNDEF, 0x1B - .equ ARM_MODE_SYS, 0x1F - .equ I_BIT, 0x80 - .equ F_BIT, 0x40 - .equ T_BIT, 0x20 - -/* - * Stack definitions - * - * Start near top of internal RAM. - */ - .equ END_INT_SRAM, 0x4000 - .equ SVC_STACK_START, (END_INT_SRAM - 0x4) - .equ SVC_STACK_USE, 0x21800000 - -start: - -/* vectors - must reside at address 0 */ -/* the format of this table is defined in the datasheet */ - B InitReset @; reset -undefvec: - B undefvec @; Undefined Instruction -swivec: - B swivec @; Software Interrupt -pabtvec: - B pabtvec @; Prefetch Abort -dabtvec: - B dabtvec @; Data Abort -rsvdvec: -#ifdef BOOT_IIC - .long (TWI_EEPROM_SIZE >> 9) -#else -#ifdef BOOT_BWCT - .long ((528 << 17) | (13 << 13) | (12 * 2)) -#else - .long ((1056 << 17) | (13 << 13) | (12 * 2)) -#endif -#endif -irqvec: - ldr pc, [pc,#-0xF20] @; IRQ : read the AIC -fiqvec: - B fiqvec @; FIQ - -InitReset: - -/* Set stack and init for SVC */ - ldr r1, = SVC_STACK_START - mov sp, r1 @; Init stack SYS - - msr cpsr_c, #(ARM_MODE_SVC | I_BIT | F_BIT) - mov sp, r1 @ ; Init stack SYS - -/* Perform system initialization */ - - .extern _init - bl _init -#ifndef BOOT_BOOT0 - ldr r1, = SVC_STACK_USE - mov sp, r1 @ ; Move the stack to SDRAM -#endif - -/* Start execution at main */ - .extern main -_main: -__main: - bl main -/* main should not return. If it does, spin forever */ -infiniteLoop: - b infiniteLoop - -#ifdef BOOT_COMMANDS -/* the following section is used to store boot commands in */ -/* non-volatile memory. */ - - .global BootCommandSection -BootCommandSection: -#ifdef SUPPORT_LINUX - .string "Bootloader for KB9202 Evaluation Board." - .string "c 0x20210000 0x10100000 0x80000 " - .string "m 0 0 0 0 0 0 " - .string "t 0x20000100 console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933" - .string "e 0x10000000 " - .string " " -#else -#if 1 - .string "m 42 53 44 0 0 1" - .string "ip 206 168 13 194" - .string "server_ip 206 168 13 207" - .string "tftp 0x20000000 kernel.bin" - .string "e 0x20000000" -#else - .string "m 42 53 44 0 0 1" - .string "k 0x20000000" - .string "e 0x20000000" -#endif - .word 0 -#endif -#endif Property changes on: head/sys/boot/arm/at91/libat91/arm_init.S ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/strcvt.c =================================================================== --- head/sys/boot/arm/at91/libat91/strcvt.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/strcvt.c (nonexistent) @@ -1,132 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); - -/****************************************************************************** - * - * Filename: p_string.c - * - * Instantiation of basic string operations to prevent inclusion of full - * string library. These are simple implementations not necessarily optimized - * for speed, but rather to show intent. - * - * Revision information: - * - * 20AUG2004 kb_admin initial creation - * 12JAN2005 kb_admin minor updates - * - * BEGIN_KBDD_BLOCK - * No warranty, expressed or implied, is included with this software. It is - * provided "AS IS" and no warranty of any kind including statutory or aspects - * relating to merchantability or fitness for any purpose is provided. All - * intellectual property rights of others is maintained with the respective - * owners. This software is not copyrighted and is intended for reference - * only. - * END_BLOCK - *****************************************************************************/ - -#include "lib.h" - -/* - * .KB_C_FN_DEFINITION_START - * int p_IsWhiteSpace(char) - * This global function returns true if the character is not considered - * a non-space character. - * .KB_C_FN_DEFINITION_END - */ -int -p_IsWhiteSpace(char cValue) -{ - return ((cValue == ' ') || - (cValue == '\t') || - (cValue == 0) || - (cValue == '\r') || - (cValue == '\n')); -} - - -/* - * .KB_C_FN_DEFINITION_START - * unsigned p_HexCharValue(char) - * This global function returns the decimal value of the validated hex char. - * .KB_C_FN_DEFINITION_END - */ -unsigned -p_HexCharValue(char cValue) -{ - if (cValue < ('9' + 1)) - return (cValue - '0'); - if (cValue < ('F' + 1)) - return (cValue - 'A' + 10); - return (cValue - 'a' + 10); -} - -/* - * .KB_C_FN_DEFINITION_START - * unsigned p_ASCIIToHex(char *) - * This global function set the unsigned value equal to the converted - * hex number passed as a string. No error checking is performed; the - * string must be valid hex value, point at the start of string, and be - * NULL-terminated. - * .KB_C_FN_DEFINITION_END - */ -unsigned -p_ASCIIToHex(const char *buf) -{ - unsigned lValue = 0; - - if ((*buf == '0') && ((buf[1] == 'x') || (buf[1] == 'X'))) - buf += 2; - - while (*buf) { - lValue <<= 4; - lValue += p_HexCharValue(*buf++); - } - return (lValue); -} - - -/* - * .KB_C_FN_DEFINITION_START - * unsigned p_ASCIIToDec(char *) - * This global function set the unsigned value equal to the converted - * decimal number passed as a string. No error checking is performed; the - * string must be valid decimal value, point at the start of string, and be - * NULL-terminated. - * .KB_C_FN_DEFINITION_END - */ -unsigned -p_ASCIIToDec(const char *buf) -{ - unsigned v = 0; - - while (*buf) { - v *= 10; - v += (*buf++) - '0'; - } - return (v); -} Property changes on: head/sys/boot/arm/at91/libat91/strcvt.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/mci_device.h =================================================================== --- head/sys/boot/arm/at91/libat91/mci_device.h (revision 324981) +++ head/sys/boot/arm/at91/libat91/mci_device.h (nonexistent) @@ -1,434 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. - * - * $FreeBSD$ - */ - -//*--------------------------------------------------------------------------- -//* ATMEL Microcontroller Software Support - ROUSSET - -//*--------------------------------------------------------------------------- -//* The software is delivered "AS IS" without warranty or condition of any -//* kind, either express, implied or statutory. This includes without -//* limitation any warranty or condition with respect to merchantability or -//* fitness for any particular purpose, or against the infringements of -//* intellectual property rights of others. -//*--------------------------------------------------------------------------- -//* File Name : AT91C_MCI_Device.h -//* Object : Data Flash Atmel Description File -//* Translator : -//* -//* 1.0 26/11/02 FB : Creation -//*--------------------------------------------------------------------------- - -#ifndef __MCI_Device_h -#define __MCI_Device_h - -#include - -typedef unsigned int AT91S_MCIDeviceStatus; - -/////////////////////////////////////////////////////////////////////////////// - -#define AT91C_CARD_REMOVED 0 -#define AT91C_MMC_CARD_INSERTED 1 -#define AT91C_SD_CARD_INSERTED 2 - -#define AT91C_NO_ARGUMENT 0x0 - -#define AT91C_FIRST_RCA 0xCAFE -#define AT91C_MAX_MCI_CARDS 10 - -#define AT91C_BUS_WIDTH_1BIT 0x00 -#define AT91C_BUS_WIDTH_4BITS 0x02 - -/* Driver State */ -#define AT91C_MCI_IDLE 0x0 -#define AT91C_MCI_TIMEOUT_ERROR 0x1 -#define AT91C_MCI_RX_SINGLE_BLOCK 0x2 -#define AT91C_MCI_RX_MULTIPLE_BLOCK 0x3 -#define AT91C_MCI_RX_STREAM 0x4 -#define AT91C_MCI_TX_SINGLE_BLOCK 0x5 -#define AT91C_MCI_TX_MULTIPLE_BLOCK 0x6 -#define AT91C_MCI_TX_STREAM 0x7 - -/* TimeOut */ -#define AT91C_TIMEOUT_CMDRDY 30 - - - -/////////////////////////////////////////////////////////////////////////////// -// MMC & SDCard Structures -/////////////////////////////////////////////////////////////////////////////// - -/*---------------------------------------------*/ -/* MCI Device Structure Definition */ -/*---------------------------------------------*/ -typedef struct _AT91S_MciDevice -{ - volatile unsigned char state; - unsigned char SDCard_bus_width; - unsigned char IsSDv2; - unsigned char IsSDHC; - unsigned int RCA; // RCA - unsigned int READ_BL_LEN; -#ifdef REPORT_SIZE - unsigned int Memory_Capacity; -#endif -} AT91S_MciDevice; - -#include - -/////////////////////////////////////////////////////////////////////////////// -// Functions returnals -/////////////////////////////////////////////////////////////////////////////// -#define AT91C_CMD_SEND_OK 0 // Command ok -#define AT91C_CMD_SEND_ERROR -1 // Command failed -#define AT91C_INIT_OK 2 // Init Successful -#define AT91C_INIT_ERROR 3 // Init Failed -#define AT91C_READ_OK 4 // Read Successful -#define AT91C_READ_ERROR 5 // Read Failed -#define AT91C_WRITE_OK 6 // Write Successful -#define AT91C_WRITE_ERROR 7 // Write Failed -#define AT91C_ERASE_OK 8 // Erase Successful -#define AT91C_ERASE_ERROR 9 // Erase Failed -#define AT91C_CARD_SELECTED_OK 10 // Card Selection Successful -#define AT91C_CARD_SELECTED_ERROR 11 // Card Selection Failed - -#define AT91C_MCI_SR_ERROR (AT91C_MCI_UNRE | AT91C_MCI_OVRE | AT91C_MCI_DTOE | \ - AT91C_MCI_DCRCE | AT91C_MCI_RTOE | AT91C_MCI_RENDE | AT91C_MCI_RCRCE | \ - AT91C_MCI_RDIRE | AT91C_MCI_RINDE) - -#define MMC_CMDNB (0x1Fu << 0) // Command Number -#define MMC_RSPTYP (0x3u << 6) // Response Type -#define MMC_RSPTYP_NO (0x0u << 6) // No response -#define MMC_RSPTYP_48 (0x1u << 6) // 48-bit response -#define MMC_RSPTYP_136 (0x2u << 6) // 136-bit response -#define MMC_SPCMD (0x7u << 8) // Special CMD -#define MMC_SPCMD_NONE (0x0u << 8) // Not a special CMD -#define MMC_SPCMD_INIT (0x1u << 8) // Initialization CMD -#define MMC_SPCMD_SYNC (0x2u << 8) // Synchronized CMD -#define MMC_SPCMD_IT_CMD (0x4u << 8) // Interrupt command -#define MMC_SPCMD_IT_REP (0x5u << 8) // Interrupt response -#define MMC_OPDCMD (0x1u << 11) // Open Drain Command -#define MMC_MAXLAT (0x1u << 12) // Maximum Latency for Command to respond -#define MMC_TRCMD (0x3u << 16) // Transfer CMD -#define MMC_TRCMD_NO (0x0u << 16) // No transfer -#define MMC_TRCMD_START (0x1u << 16) // Start transfer -#define MMC_TRCMD_STOP (0x2u << 16) // Stop transfer -#define MMC_TRDIR (0x1u << 18) // Transfer Direction -#define MMC_TRTYP (0x3u << 19) // Transfer Type -#define MMC_TRTYP_BLOCK (0x0u << 19) // Block Transfer type -#define MMC_TRTYP_MULTIPLE (0x1u << 19) // Multiple Block transfer type -#define MMC_TRTYP_STREAM (0x2u << 19) // Stream transfer type - -/////////////////////////////////////////////////////////////////////////////// -// MCI_CMD Register Value -/////////////////////////////////////////////////////////////////////////////// -#define POWER_ON_INIT \ - (0 | MMC_TRCMD_NO | MMC_SPCMD_INIT | MMC_OPDCMD) - -///////////////////////////////////////////////////////////////// -// Class 0 & 1 commands: Basic commands and Read Stream commands -///////////////////////////////////////////////////////////////// - -#define GO_IDLE_STATE_CMD \ - (0 | MMC_TRCMD_NO | MMC_SPCMD_NONE ) -#define MMC_GO_IDLE_STATE_CMD \ - (0 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_OPDCMD) -#define MMC_SEND_OP_COND_CMD \ - (1 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_48 | \ - MMC_OPDCMD) - -#define ALL_SEND_CID_CMD \ - (2 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_136) -#define MMC_ALL_SEND_CID_CMD \ - (2 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_136 | \ - MMC_OPDCMD) - -#define SET_RELATIVE_ADDR_CMD \ - (3 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_48 | \ - MMC_MAXLAT) -#define MMC_SET_RELATIVE_ADDR_CMD \ - (3 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_48 | \ - MMC_MAXLAT | MMC_OPDCMD) - -#define SET_DSR_CMD \ - (4 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_NO | \ - MMC_MAXLAT) // no tested - -#define SEL_DESEL_CARD_CMD \ - (7 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_48 | \ - MMC_MAXLAT) -#define SEND_CSD_CMD \ - (9 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_136 | \ - MMC_MAXLAT) -#define SEND_CID_CMD \ - (10 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_136 | \ - MMC_MAXLAT) -#define MMC_READ_DAT_UNTIL_STOP_CMD \ - (11 | MMC_TRTYP_STREAM | MMC_SPCMD_NONE | \ - MMC_RSPTYP_48 | MMC_TRDIR | MMC_TRCMD_START | \ - MMC_MAXLAT) - -#define STOP_TRANSMISSION_CMD \ - (12 | MMC_TRCMD_STOP | MMC_SPCMD_NONE | MMC_RSPTYP_48 | \ - MMC_MAXLAT) -#define STOP_TRANSMISSION_SYNC_CMD \ - (12 | MMC_TRCMD_STOP | MMC_SPCMD_SYNC | MMC_RSPTYP_48 | \ - MMC_MAXLAT) -#define SEND_STATUS_CMD \ - (13 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_48 | \ - MMC_MAXLAT) -#define GO_INACTIVE_STATE_CMD \ - (15 | MMC_RSPTYP_NO) -#define SD_SEND_IF_COND_CMD \ - (8 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_48 | \ - MMC_MAXLAT) -//*------------------------------------------------ -//* Class 2 commands: Block oriented Read commands -//*------------------------------------------------ - -#define SET_BLOCKLEN_CMD (16 | MMC_TRCMD_NO | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_MAXLAT ) -#define READ_SINGLE_BLOCK_CMD (17 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_START | MMC_TRTYP_BLOCK | MMC_TRDIR | MMC_MAXLAT) -#define READ_MULTIPLE_BLOCK_CMD (18 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_START | MMC_TRTYP_MULTIPLE | MMC_TRDIR | MMC_MAXLAT) - -//*-------------------------------------------- -//* Class 3 commands: Sequential write commands -//*-------------------------------------------- - -#define MMC_WRITE_DAT_UNTIL_STOP_CMD (20 | MMC_TRTYP_STREAM| MMC_SPCMD_NONE | MMC_RSPTYP_48 & ~(MMC_TRDIR) | MMC_TRCMD_START | MMC_MAXLAT ) // MMC - -//*------------------------------------------------ -//* Class 4 commands: Block oriented write commands -//*------------------------------------------------ - -#define WRITE_BLOCK_CMD (24 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_START | (MMC_TRTYP_BLOCK & ~(MMC_TRDIR)) | MMC_MAXLAT) -#define WRITE_MULTIPLE_BLOCK_CMD (25 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_START | (MMC_TRTYP_MULTIPLE & ~(MMC_TRDIR)) | MMC_MAXLAT) -#define PROGRAM_CSD_CMD (27 | MMC_RSPTYP_48 ) - - -//*---------------------------------------- -//* Class 6 commands: Group Write protect -//*---------------------------------------- - -#define SET_WRITE_PROT_CMD (28 | MMC_RSPTYP_48 ) -#define CLR_WRITE_PROT_CMD (29 | MMC_RSPTYP_48 ) -#define SEND_WRITE_PROT_CMD (30 | MMC_RSPTYP_48 ) - - -//*---------------------------------------- -//* Class 5 commands: Erase commands -//*---------------------------------------- - -#define TAG_SECTOR_START_CMD (32 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define TAG_SECTOR_END_CMD (33 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define MMC_UNTAG_SECTOR_CMD (34 | MMC_RSPTYP_48 ) -#define MMC_TAG_ERASE_GROUP_START_CMD (35 | MMC_RSPTYP_48 ) -#define MMC_TAG_ERASE_GROUP_END_CMD (36 | MMC_RSPTYP_48 ) -#define MMC_UNTAG_ERASE_GROUP_CMD (37 | MMC_RSPTYP_48 ) -#define ERASE_CMD (38 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT ) - -//*---------------------------------------- -//* Class 7 commands: Lock commands -//*---------------------------------------- - -#define LOCK_UNLOCK (42 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) // no tested - -//*----------------------------------------------- -// Class 8 commands: Application specific commands -//*----------------------------------------------- - -#define APP_CMD (55 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define GEN_CMD (56 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) // no tested - -#define SDCARD_SET_BUS_WIDTH_CMD (6 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define SDCARD_STATUS_CMD (13 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define SDCARD_SEND_NUM_WR_BLOCKS_CMD (22 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define SDCARD_SET_WR_BLK_ERASE_COUNT_CMD (23 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define SDCARD_APP_OP_COND_CMD (41 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define SDCARD_SET_CLR_CARD_DETECT_CMD (42 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) -#define SDCARD_SEND_SCR_CMD (51 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) - -#define SDCARD_APP_ALL_CMD (SDCARD_SET_BUS_WIDTH_CMD +\ - SDCARD_STATUS_CMD +\ - SDCARD_SEND_NUM_WR_BLOCKS_CMD +\ - SDCARD_SET_WR_BLK_ERASE_COUNT_CMD +\ - SDCARD_APP_OP_COND_CMD +\ - SDCARD_SET_CLR_CARD_DETECT_CMD +\ - SDCARD_SEND_SCR_CMD) - -//*---------------------------------------- -//* Class 9 commands: IO Mode commands -//*---------------------------------------- - -#define MMC_FAST_IO_CMD (39 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_MAXLAT) -#define MMC_GO_IRQ_STATE_CMD (40 | MMC_SPCMD_NONE | MMC_RSPTYP_48 | MMC_TRCMD_NO | MMC_MAXLAT) - -/////////////////////////////////////////////////////////////////////////////// -// OCR Register -/////////////////////////////////////////////////////////////////////////////// -#define AT91C_VDD_16_17 (1 << 4) -#define AT91C_VDD_17_18 (1 << 5) -#define AT91C_VDD_18_19 (1 << 6) -#define AT91C_VDD_19_20 (1 << 7) -#define AT91C_VDD_20_21 (1 << 8) -#define AT91C_VDD_21_22 (1 << 9) -#define AT91C_VDD_22_23 (1 << 10) -#define AT91C_VDD_23_24 (1 << 11) -#define AT91C_VDD_24_25 (1 << 12) -#define AT91C_VDD_25_26 (1 << 13) -#define AT91C_VDD_26_27 (1 << 14) -#define AT91C_VDD_27_28 (1 << 15) -#define AT91C_VDD_28_29 (1 << 16) -#define AT91C_VDD_29_30 (1 << 17) -#define AT91C_VDD_30_31 (1 << 18) -#define AT91C_VDD_31_32 (1 << 19) -#define AT91C_VDD_32_33 (1 << 20) -#define AT91C_VDD_33_34 (1 << 21) -#define AT91C_VDD_34_35 (1 << 22) -#define AT91C_VDD_35_36 (1 << 23) -#define AT91C_CCS (1 << 30) -#define AT91C_CARD_POWER_UP_DONE (1U << 31) - -#define AT91C_MMC_HOST_VOLTAGE_RANGE (AT91C_VDD_27_28 | AT91C_VDD_28_29 | \ - AT91C_VDD_29_30 | AT91C_VDD_30_31 | AT91C_VDD_31_32 | AT91C_VDD_32_33) - -/////////////////////////////////////////////////////////////////////////////// -// CURRENT_STATE & READY_FOR_DATA in SDCard Status Register definition (response type R1) -/////////////////////////////////////////////////////////////////////////////// -#define AT91C_SR_READY_FOR_DATA (1 << 8) // corresponds to buffer empty signalling on the bus -#define AT91C_SR_IDLE (0 << 9) -#define AT91C_SR_READY (1 << 9) -#define AT91C_SR_IDENT (2 << 9) -#define AT91C_SR_STBY (3 << 9) -#define AT91C_SR_TRAN (4 << 9) -#define AT91C_SR_DATA (5 << 9) -#define AT91C_SR_RCV (6 << 9) -#define AT91C_SR_PRG (7 << 9) -#define AT91C_SR_DIS (8 << 9) - -#define AT91C_SR_CARD_SELECTED (AT91C_SR_READY_FOR_DATA + AT91C_SR_TRAN) - -#define MMC_FIRST_RCA 0xCAFE - -/////////////////////////////////////////////////////////////////////////////// -// MMC CSD register header File -// CSD_x_xxx_S for shift value for word x -// CSD_x_xxx_M for mask value for word x -/////////////////////////////////////////////////////////////////////////////// - -// First Response INT <=> CSD[3] : bits 0 to 31 -#define CSD_3_BIT0_S 0 // [0:0] -#define CSD_3_BIT0_M 0x01 -#define CSD_3_CRC_S 1 // [7:1] -#define CSD_3_CRC_M 0x7F -#define CSD_3_MMC_ECC_S 8 // [9:8] reserved for MMC compatibility -#define CSD_3_MMC_ECC_M 0x03 -#define CSD_3_FILE_FMT_S 10 // [11:10] -#define CSD_3_FILE_FMT_M 0x03 -#define CSD_3_TMP_WP_S 12 // [12:12] -#define CSD_3_TMP_WP_M 0x01 -#define CSD_3_PERM_WP_S 13 // [13:13] -#define CSD_3_PERM_WP_M 0x01 -#define CSD_3_COPY_S 14 // [14:14] -#define CSD_3_COPY_M 0x01 -#define CSD_3_FILE_FMT_GRP_S 15 // [15:15] -#define CSD_3_FILE_FMT_GRP_M 0x01 -// reserved 16 // [20:16] -// reserved 0x1F -#define CSD_3_WBLOCK_P_S 21 // [21:21] -#define CSD_3_WBLOCK_P_M 0x01 -#define CSD_3_WBLEN_S 22 // [25:22] -#define CSD_3_WBLEN_M 0x0F -#define CSD_3_R2W_F_S 26 // [28:26] -#define CSD_3_R2W_F_M 0x07 -#define CSD_3_MMC_DEF_ECC_S 29 // [30:29] reserved for MMC compatibility -#define CSD_3_MMC_DEF_ECC_M 0x03 -#define CSD_3_WP_GRP_EN_S 31 // [31:31] -#define CSD_3_WP_GRP_EN_M 0x01 - -// Seconde Response INT <=> CSD[2] : bits 32 to 63 -#define CSD_2_v21_WP_GRP_SIZE_S 0 // [38:32] -#define CSD_2_v21_WP_GRP_SIZE_M 0x7F -#define CSD_2_v21_SECT_SIZE_S 7 // [45:39] -#define CSD_2_v21_SECT_SIZE_M 0x7F -#define CSD_2_v21_ER_BLEN_EN_S 14 // [46:46] -#define CSD_2_v21_ER_BLEN_EN_M 0x01 - -#define CSD_2_v22_WP_GRP_SIZE_S 0 // [36:32] -#define CSD_2_v22_WP_GRP_SIZE_M 0x1F -#define CSD_2_v22_ER_GRP_SIZE_S 5 // [41:37] -#define CSD_2_v22_ER_GRP_SIZE_M 0x1F -#define CSD_2_v22_SECT_SIZE_S 10 // [46:42] -#define CSD_2_v22_SECT_SIZE_M 0x1F - -#define CSD_2_C_SIZE_M_S 15 // [49:47] -#define CSD_2_C_SIZE_M_M 0x07 -#define CSD_2_VDD_WMAX_S 18 // [52:50] -#define CSD_2_VDD_WMAX_M 0x07 -#define CSD_2_VDD_WMIN_S 21 // [55:53] -#define CSD_2_VDD_WMIN_M 0x07 -#define CSD_2_RCUR_MAX_S 24 // [58:56] -#define CSD_2_RCUR_MAX_M 0x07 -#define CSD_2_RCUR_MIN_S 27 // [61:59] -#define CSD_2_RCUR_MIN_M 0x07 -#define CSD_2_CSIZE_L_S 30 // [63:62] <=> 2 LSB of CSIZE -#define CSD_2_CSIZE_L_M 0x03 - -// Third Response INT <=> CSD[1] : bits 64 to 95 -#define CSD_1_CSIZE_H_S 0 // [73:64] <=> 10 MSB of CSIZE -#define CSD_1_CSIZE_H_M 0x03FF -// reserved 10 // [75:74] -// reserved 0x03 -#define CSD_1_DSR_I_S 12 // [76:76] -#define CSD_1_DSR_I_M 0x01 -#define CSD_1_RD_B_MIS_S 13 // [77:77] -#define CSD_1_RD_B_MIS_M 0x01 -#define CSD_1_WR_B_MIS_S 14 // [78:78] -#define CSD_1_WR_B_MIS_M 0x01 -#define CSD_1_RD_B_PAR_S 15 // [79:79] -#define CSD_1_RD_B_PAR_M 0x01 -#define CSD_1_RD_B_LEN_S 16 // [83:80] -#define CSD_1_RD_B_LEN_M 0x0F -#define CSD_1_CCC_S 20 // [95:84] -#define CSD_1_CCC_M 0x0FFF - -// Fourth Response INT <=> CSD[0] : bits 96 to 127 -#define CSD_0_TRANS_SPEED_S 0 // [103:96] -#define CSD_0_TRANS_SPEED_M 0xFF -#define CSD_0_NSAC_S 8 // [111:104] -#define CSD_0_NSAC_M 0xFF -#define CSD_0_TAAC_S 16 // [119:112] -#define CSD_0_TAAC_M 0xFF -// reserved 24 // [121:120] -// reserved 0x03 -#define CSD_0_MMC_SPEC_VERS_S 26 // [125:122] reserved for MMC compatibility -#define CSD_0_MMC_SPEC_VERS_M 0x0F -#define CSD_0_STRUCT_S 30 // [127:126] -#define CSD_0_STRUCT_M 0x03 - -/////////////////////////////////////////////////////////////////////////////// -#endif Property changes on: head/sys/boot/arm/at91/libat91/mci_device.h ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c =================================================================== --- head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c (nonexistent) @@ -1,223 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. - * - * $FreeBSD$ - */ - -#include "at91rm9200.h" -#include "at91rm9200_lowlevel.h" - -extern int __bss_start__[]; -extern int __bss_end__[]; - -#define BAUD 115200 -#define AT91C_US_ASYNC_MODE (AT91C_US_USMODE_NORMAL | AT91C_US_NBSTOP_1_BIT | \ - AT91C_US_PAR_NONE | AT91C_US_CHRL_8_BITS | AT91C_US_CLKS_CLOCK) - -/* - * void DefaultSystemInit(void) - * Load the system with sane values based on how the system is configured. - * at91rm9200_lowlevel.h is expected to define the necessary parameters. - */ -void -_init(void) -{ - int *i; - - AT91PS_USART pUSART = (AT91PS_USART)AT91C_BASE_DBGU; - AT91PS_PDC pPDC = (AT91PS_PDC)&(pUSART->US_RPR); - - register unsigned value; - volatile sdram_size_t *p = (sdram_size_t *)SDRAM_BASE; - - AT91C_BASE_ST->ST_RTMR = 1; -#ifdef BOOT_TSC - // For the TSC board, we turn ON the one LED we have while - // early in boot. - AT91C_BASE_PIOC->PIO_PER = AT91C_PIO_PC10; - AT91C_BASE_PIOC->PIO_OER = AT91C_PIO_PC10; - AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC10; -#endif - -#if defined(BOOT_KB920X) - AT91C_BASE_PIOC->PIO_PER = AT91C_PIO_PC18 | AT91C_PIO_PC19 | - AT91C_PIO_PC20; - AT91C_BASE_PIOC->PIO_OER = AT91C_PIO_PC18 | AT91C_PIO_PC19 | - AT91C_PIO_PC20; - AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC18 | AT91C_PIO_PC19 | - AT91C_PIO_PC20; - AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC18; -#endif - - // configure clocks - // assume: - // main osc = 10Mhz - // PLLB configured for 96MHz (48MHz after div) - // CSS = PLLB - // set PLLA = 180MHz - // assume main osc = 10Mhz - // div = 5 , out = 2 (150MHz = 240MHz) - value = AT91C_BASE_CKGR->CKGR_PLLAR; - value &= ~(AT91C_CKGR_DIVA | AT91C_CKGR_OUTA | AT91C_CKGR_MULA); - value |= OSC_MAIN_FREQ_DIV | AT91C_CKGR_OUTA_2 | AT91C_CKGR_SRCA | - ((OSC_MAIN_MULT - 1) << 16); - AT91C_BASE_CKGR->CKGR_PLLAR = value; - - // wait for lock - while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA)) - continue; - - // change divider = 3, pres = 1 - value = AT91C_BASE_PMC->PMC_MCKR; - value &= ~(AT91C_PMC_MDIV | AT91C_PMC_PRES); - value |= AT91C_PMC_MDIV_3 | AT91C_PMC_PRES_CLK; - AT91C_BASE_PMC->PMC_MCKR = value; - - // wait for update - while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY)) - continue; - - // change CSS = PLLA - value &= ~AT91C_PMC_CSS; - value |= AT91C_PMC_CSS_PLLA_CLK; - AT91C_BASE_PMC->PMC_MCKR = value; - - // wait for update - while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY)) - continue; - -#ifdef BOOT_KB920X - // setup flash access (allow ample margin) - // 9 wait states, 1 setup, 1 hold, 1 float for 8-bit device - ((AT91PS_SMC2)AT91C_BASE_SMC2)->SMC2_CSR[0] = - AT91C_SMC2_WSEN | - (9 & AT91C_SMC2_NWS) | - ((1 << 8) & AT91C_SMC2_TDF) | - AT91C_SMC2_DBW_8 | - ((1 << 24) & AT91C_SMC2_RWSETUP) | - ((1 << 29) & AT91C_SMC2_RWHOLD); -#endif - - // setup SDRAM access - // EBI chip-select register (CS1 = SDRAM controller) - // 9 col, 13row, 4 bank, CAS2 - // write recovery = 2 (Twr) - // row cycle = 5 (Trc) - // precharge delay = 2 (Trp) - // row to col delay 2 (Trcd) - // active to precharge = 4 (Tras) - // exit self refresh to active = 6 (Txsr) - value = ((AT91PS_EBI)AT91C_BASE_EBI)->EBI_CSA; - value &= ~AT91C_EBI_CS1A; - value |= AT91C_EBI_CS1A_SDRAMC; - AT91C_BASE_EBI->EBI_CSA = value; - - AT91C_BASE_SDRC->SDRC_CR = -#if defined(KB9202_B) || defined(SDRAM_128M) - AT91C_SDRC_NC_10 | -#else - AT91C_SDRC_NC_9 | -#endif - AT91C_SDRC_NR_13 | - AT91C_SDRC_NB_4_BANKS | - AT91C_SDRC_CAS_2 | - ((2 << 7) & AT91C_SDRC_TWR) | - ((5 << 11) & AT91C_SDRC_TRC) | - ((2 << 15) & AT91C_SDRC_TRP) | - ((2 << 19) & AT91C_SDRC_TRCD) | - ((4 << 23) & AT91C_SDRC_TRAS) | - ((6 << 27) & AT91C_SDRC_TXSR); - - // Step 1: We assume 200us of idle time. - // Step 2: Issue an all banks precharge command - AT91C_BASE_SDRC->SDRC_MR = SDRAM_WIDTH | AT91C_SDRC_MODE_PRCGALL_CMD; - *p = 0; - - // Step 3: Issue 8 Auto-refresh (CBR) cycles - AT91C_BASE_SDRC->SDRC_MR = SDRAM_WIDTH | AT91C_SDRC_MODE_RFSH_CMD; - *p = 0; - *p = 0; - *p = 0; - *p = 0; - *p = 0; - *p = 0; - *p = 0; - *p = 0; - - // Step 4: Issue an Mode Set Register (MRS) cycle to program in - // the parameters that we setup in the SDRC_CR register above. - AT91C_BASE_SDRC->SDRC_MR = SDRAM_WIDTH | AT91C_SDRC_MODE_LMR_CMD; - *p = 0; - - // Step 5: set the refresh timer and access memory to start it - // running. We have to wait 3 clocks after the LMR_CMD above, - // and this fits the bill nicely. - AT91C_BASE_SDRC->SDRC_TR = 7 * AT91C_MASTER_CLOCK / 1000000; - *p = 0; - - // Step 6: Set normal mode. - AT91C_BASE_SDRC->SDRC_MR = SDRAM_WIDTH | AT91C_SDRC_MODE_NORMAL_CMD; - *p = 0; - -#if SDRAM_WIDTH == AT91C_SDRC_DBW_32_BITS - // Turn on the upper 16 bits on the SDRAM bus. - AT91C_BASE_PIOC->PIO_ASR = 0xffff0000; - AT91C_BASE_PIOC->PIO_PDR = 0xffff0000; -#endif - // Configure DBGU -use local routine optimized for space - AT91C_BASE_PIOA->PIO_ASR = AT91C_PIO_PA31 | AT91C_PIO_PA30; - AT91C_BASE_PIOA->PIO_PDR = AT91C_PIO_PA31 | AT91C_PIO_PA30; - pUSART->US_IDR = (unsigned int) -1; - pUSART->US_CR = - AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS; - pUSART->US_BRGR = ((((AT91C_MASTER_CLOCK*10)/(BAUD*16))+5)/10); - pUSART->US_TTGR = 0; - pPDC->PDC_PTCR = AT91C_PDC_RXTDIS; - pPDC->PDC_PTCR = AT91C_PDC_TXTDIS; - pPDC->PDC_TNPR = 0; - pPDC->PDC_TNCR = 0; - - pPDC->PDC_RNPR = 0; - pPDC->PDC_RNCR = 0; - - pPDC->PDC_TPR = 0; - pPDC->PDC_TCR = 0; - - pPDC->PDC_RPR = 0; - pPDC->PDC_RCR = 0; - - pPDC->PDC_PTCR = AT91C_PDC_RXTEN; - pPDC->PDC_PTCR = AT91C_PDC_TXTEN; - - pUSART->US_MR = AT91C_US_ASYNC_MODE; - pUSART->US_CR = AT91C_US_TXEN; - pUSART->US_CR = AT91C_US_RXEN; - - /* Zero BSS now that we have memory setup */ - i = (int *)__bss_start__; - while (i < (int *)__bss_end__) - *i++ = 0; -} Property changes on: head/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/at91/libat91/sd-card.c =================================================================== --- head/sys/boot/arm/at91/libat91/sd-card.c (revision 324981) +++ head/sys/boot/arm/at91/libat91/sd-card.c (nonexistent) @@ -1,517 +0,0 @@ -/*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This software is derived from software provide by Kwikbyte who specifically - * disclaimed copyright on the code. - * - * $FreeBSD$ - */ - -//*---------------------------------------------------------------------------- -//* ATMEL Microcontroller Software Support - ROUSSET - -//*---------------------------------------------------------------------------- -//* The software is delivered "AS IS" without warranty or condition of any -//* kind, either express, implied or statutory. This includes without -//* limitation any warranty or condition with respect to merchantability or -//* fitness for any particular purpose, or against the infringements of -//* intellectual property rights of others. -//*---------------------------------------------------------------------------- -//* File Name : main.c -//* Object : main application written in C -//* Creation : FB 21/11/2002 -//* -//*---------------------------------------------------------------------------- -#include "at91rm9200.h" -#include "lib_AT91RM9200.h" -#include "mci_device.h" -#include "lib.h" -#include "sd-card.h" - -#define AT91C_MCI_TIMEOUT 1000000 /* For AT91F_MCIDeviceWaitReady */ -#define SD_BLOCK_SIZE 512 - -//* Global Variables -static AT91S_MciDevice MCI_Device; - -/****************************************************************************** -**Error return codes -******************************************************************************/ -#define MCI_UNSUPP_SIZE_ERROR 5 -#define MCI_UNSUPP_OFFSET_ERROR 6 - -//*---------------------------------------------------------------------------- -//* \fn MCIDeviceWaitReady -//* \brief Wait for MCI Device ready -//*---------------------------------------------------------------------------- -static unsigned int -MCIDeviceWaitReady(unsigned int timeout) -{ - volatile unsigned int status; - int waitfor; - - if (MCI_Device.state == AT91C_MCI_RX_SINGLE_BLOCK) - waitfor = AT91C_MCI_RXBUFF; - else - waitfor = AT91C_MCI_NOTBUSY; - do - { - status = AT91C_BASE_MCI->MCI_SR; - timeout--; - } - while( !(status & waitfor) && (timeout>0) ); - - status = AT91C_BASE_MCI->MCI_SR; - - // If End of Tx Buffer Empty interrupt occurred - if (MCI_Device.state == AT91C_MCI_TX_SINGLE_BLOCK && status & AT91C_MCI_TXBUFE) { - AT91C_BASE_MCI->MCI_IDR = AT91C_MCI_TXBUFE; - AT91C_BASE_PDC_MCI->PDC_PTCR = AT91C_PDC_TXTDIS; - MCI_Device.state = AT91C_MCI_IDLE; - } // End of if AT91C_MCI_TXBUFF - - // If End of Rx Buffer Full interrupt occurred - if (MCI_Device.state == AT91C_MCI_RX_SINGLE_BLOCK && status & AT91C_MCI_RXBUFF) { - AT91C_BASE_MCI->MCI_IDR = AT91C_MCI_RXBUFF; - AT91C_BASE_PDC_MCI->PDC_PTCR = AT91C_PDC_RXTDIS; - MCI_Device.state = AT91C_MCI_IDLE; - } // End of if AT91C_MCI_RXBUFF - - //printf("WaitReady returning status %x\n", status); - - return status; -} - -static inline unsigned int -swap(unsigned int v) -{ - unsigned int t1; - - __asm __volatile("eor %1, %0, %0, ror #16\n" - "bic %1, %1, #0x00ff0000\n" - "mov %0, %0, ror #8\n" - "eor %0, %0, %1, lsr #8\n" - : "+r" (v), "=r" (t1)); - - return (v); -} - -inline static unsigned int -wait_ready() -{ - int status; - int timeout = AT91C_MCI_TIMEOUT; - - // wait for CMDRDY Status flag to read the response - do - { - status = AT91C_BASE_MCI->MCI_SR; - } while( !(status & AT91C_MCI_CMDRDY) && (--timeout > 0) ); - - return status; -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_SendCommand -//* \brief Generic function to send a command to the MMC or SDCard -//*---------------------------------------------------------------------------- -static int -MCI_SendCommand( - unsigned int Cmd, - unsigned int Arg) -{ - unsigned int error; - unsigned int errorMask = AT91C_MCI_SR_ERROR; - unsigned int opcode = Cmd & 0x3F; - - //printf("SendCmd %d (%x) arg %x\n", opcode, Cmd, Arg); - - // Don't check response CRC on ACMD41 (R3 response type). - - if (opcode == 41) - errorMask &= ~AT91C_MCI_RCRCE; - - AT91C_BASE_MCI->MCI_ARGR = Arg; - AT91C_BASE_MCI->MCI_CMDR = Cmd; - - error = wait_ready(); - - if ((error & errorMask) != 0) { - return (1); - } - return 0; -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_GetStatus -//* \brief Addressed card sends its status register -//*---------------------------------------------------------------------------- -static unsigned int -MCI_GetStatus() -{ - if (MCI_SendCommand(SEND_STATUS_CMD, MCI_Device.RCA << 16)) - return 0; - return (AT91C_BASE_MCI->MCI_RSPR[0]); - -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_ReadBlock -//* \brief Start the read for a single 512-byte block -//*---------------------------------------------------------------------------- -static int -MCI_StartReadBlock(unsigned blknum, void *dataBuffer) -{ - // Init Mode Register - AT91C_BASE_MCI->MCI_MR |= ((SD_BLOCK_SIZE << 16) | AT91C_MCI_PDCMODE); - - // (PDC) Receiver Transfer Enable - AT91C_BASE_PDC_MCI->PDC_PTCR = (AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS); - AT91C_BASE_PDC_MCI->PDC_RPR = (unsigned int)dataBuffer; - AT91C_BASE_PDC_MCI->PDC_RCR = SD_BLOCK_SIZE / 4; - AT91C_BASE_PDC_MCI->PDC_PTCR = AT91C_PDC_RXTEN; - - // SDHC wants block offset, non-HC wants byte offset. - if (!MCI_Device.IsSDHC) - blknum *= SD_BLOCK_SIZE; - - // Send the Read single block command - if (MCI_SendCommand(READ_SINGLE_BLOCK_CMD, blknum)) { - return AT91C_READ_ERROR; - } - MCI_Device.state = AT91C_MCI_RX_SINGLE_BLOCK; - - return 0; -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_readblocks -//* \brief Read one or more blocks -//*---------------------------------------------------------------------------- -int -MCI_readblocks(char* dest, unsigned blknum, unsigned blkcount) -{ - unsigned int status; - unsigned int *walker; - - if (MCI_Device.state != AT91C_MCI_IDLE) { - return 1; - } - - if ((MCI_GetStatus() & AT91C_SR_READY_FOR_DATA) == 0) { - return 1; - } - - // As long as there is data to read - while (blkcount) - { - //Do the reading - if (MCI_StartReadBlock(blknum, dest)) - return -1; - - // Wait MCI Device Ready - status = MCIDeviceWaitReady(AT91C_MCI_TIMEOUT); - if (status & AT91C_MCI_SR_ERROR) - return 1; - - // Fix erratum in MCI part - endian-swap all data. - for (walker = (unsigned int *)dest; - walker < (unsigned int *)(dest + SD_BLOCK_SIZE); walker++) - *walker = swap(*walker); - - // Update counters & pointers - ++blknum; - --blkcount; - dest += SD_BLOCK_SIZE; - } - - - return 0; -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_read -//* \brief Legacy read function, takes byte offset and length but was always -//* used to read full blocks; interface preserved for existing boot code. -//*---------------------------------------------------------------------------- -int -MCI_read(char* dest, unsigned byteoffset, unsigned length) -{ - return MCI_readblocks(dest, - byteoffset/SD_BLOCK_SIZE, length/SD_BLOCK_SIZE); -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_SDCard_SendAppCommand -//* \brief Specific function to send a specific command to the SDCard -//*---------------------------------------------------------------------------- -static int -MCI_SDCard_SendAppCommand( - unsigned int Cmd_App, - unsigned int Arg) -{ - int status; - - if ((status = MCI_SendCommand(APP_CMD, (MCI_Device.RCA << 16))) == 0) - status = MCI_SendCommand(Cmd_App,Arg); - return status; -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_GetCSD -//* \brief Asks to the specified card to send its CSD -//*---------------------------------------------------------------------------- -static int -MCI_GetCSD(unsigned int rca, unsigned int *response) -{ - if (MCI_SendCommand(SEND_CSD_CMD, (rca << 16))) - return 1; - - response[0] = AT91C_BASE_MCI->MCI_RSPR[0]; - response[1] = AT91C_BASE_MCI->MCI_RSPR[1]; - response[2] = AT91C_BASE_MCI->MCI_RSPR[2]; - response[3] = AT91C_BASE_MCI->MCI_RSPR[3]; - - return 0; -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_SDCard_GetOCR -//* \brief Wait for card to power up and determine whether it's SDHC or not. -//*---------------------------------------------------------------------------- -static int -MCI_SDCard_GetOCR() -{ - unsigned int response; - unsigned int arg = AT91C_MMC_HOST_VOLTAGE_RANGE; - int timeout = AT91C_MCI_TIMEOUT; - - // Force card to idle state. - - MCI_SendCommand(GO_IDLE_STATE_CMD, AT91C_NO_ARGUMENT); - - // Begin probe for SDHC by sending CMD8; only v2.0 cards respond to it. - // - // Arg is vvpp where vv is voltage range and pp is an arbitrary bit - // pattern that gets echoed back in the response. The only voltage - // ranges defined are: - // 0x01 = 2.7 - 3.6 - // 0x02 = "reserved for low voltage" whatever that means. - // - // If the card fails to respond then it's not v2.0. If it responds by - // echoing back exactly the arg we sent, then it's a v2.0 card and can - // run at our voltage. That means that when we send the ACMD41 (in - // MCI_SDCard_GetOCR) we can include the HCS bit to inquire about SDHC. - - if (MCI_SendCommand(SD_SEND_IF_COND_CMD, 0x01AA) == 0) { - MCI_Device.IsSDv2 = (AT91C_BASE_MCI->MCI_RSPR[0] == 0x01AA); - } - - // If we've determined the card supports v2.0 functionality, set the - // HCS/CCS bit to indicate that we support SDHC. This will cause a - // v2.0 card to report whether it is SDHC in the ACMD41 response. - - if (MCI_Device.IsSDv2) { - arg |= AT91C_CCS; - } - - // The RCA to be used for CMD55 in Idle state shall be the card's - // default RCA=0x0000. - - MCI_Device.RCA = 0x0; - - // Repeat ACMD41 until the card comes out of power-up-busy state. - - do { - if (MCI_SDCard_SendAppCommand(SDCARD_APP_OP_COND_CMD, arg)) { - return 1; - } - response = AT91C_BASE_MCI->MCI_RSPR[0]; - } while (!(response & AT91C_CARD_POWER_UP_DONE) && (--timeout > 0)); - - // A v2.0 card sets CCS (card capacity status) in the response if it's SDHC. - - if (MCI_Device.IsSDv2) { - MCI_Device.IsSDHC = ((response & AT91C_CCS) == AT91C_CCS); - } - - return (0); -} - -//*---------------------------------------------------------------------------- -//* \fn MCI_SDCard_GetCID -//* \brief Asks to the SDCard on the chosen slot to send its CID -//*---------------------------------------------------------------------------- -static int -MCI_SDCard_GetCID(unsigned int *response) -{ - if (MCI_SendCommand(ALL_SEND_CID_CMD, AT91C_NO_ARGUMENT)) - return 1; - - response[0] = AT91C_BASE_MCI->MCI_RSPR[0]; - response[1] = AT91C_BASE_MCI->MCI_RSPR[1]; - response[2] = AT91C_BASE_MCI->MCI_RSPR[2]; - response[3] = AT91C_BASE_MCI->MCI_RSPR[3]; - - return 0; -} - -//*---------------------------------------------------------------------------- -//* \fn sdcard_4wire -//* \brief Set bus width to 1-bit or 4-bit according to the parm. -//* -//* Unlike most functions in this file, the return value from this one is -//* bool-ish; returns 0 on failure, 1 on success. -//*---------------------------------------------------------------------------- -int -sdcard_use4wire(int use4wire) -{ - volatile int ret_value; - - do { - ret_value=MCI_GetStatus(); - } - while((ret_value > 0) && ((ret_value & AT91C_SR_READY_FOR_DATA) == 0)); - - // If going to 4-wire mode, ask the card to turn off the DAT3 card detect - // pullup resistor, if going to 1-wire ask it to turn it back on. - - ret_value = MCI_SDCard_SendAppCommand(SDCARD_SET_CLR_CARD_DETECT_CMD, - use4wire ? 0 : 1); - if (ret_value != AT91C_CMD_SEND_OK) - return 0; - - // Ask the card to go into the requested mode. - - ret_value = MCI_SDCard_SendAppCommand(SDCARD_SET_BUS_WIDTH_CMD, - use4wire ? AT91C_BUS_WIDTH_4BITS : - AT91C_BUS_WIDTH_1BIT); - if (ret_value != AT91C_CMD_SEND_OK) - return 0; - - // Set the MCI device to match the mode we set in the card. - - if (use4wire) { - MCI_Device.SDCard_bus_width = AT91C_BUS_WIDTH_4BITS; - AT91C_BASE_MCI->MCI_SDCR |= AT91C_MCI_SCDBUS; - } else { - MCI_Device.SDCard_bus_width = AT91C_BUS_WIDTH_1BIT; - AT91C_BASE_MCI->MCI_SDCR &= ~AT91C_MCI_SCDBUS; - } - - return 1; -} - -//*---------------------------------------------------------------------------- -//* \fn sdcard_init -//* \brief get the mci device ready to read from an SD or SDHC card. -//* -//* Unlike most functions in this file, the return value from this one is -//* bool-ish; returns 0 on failure, 1 on success. -//*---------------------------------------------------------------------------- -int -sdcard_init(void) -{ - unsigned int tab_response[4]; - int i; - - // Init MCI for MMC and SDCard interface - AT91F_MCI_CfgPIO(); - AT91F_MCI_CfgPMC(); - AT91F_PDC_Open(AT91C_BASE_PDC_MCI); - - // Init Device Structure - MCI_Device.state = AT91C_MCI_IDLE; - MCI_Device.SDCard_bus_width = 0; - MCI_Device.IsSDv2 = 0; - MCI_Device.IsSDHC = 0; - - // Reset the MCI and set the bus speed. - // Using MCK/230 gives a legal (under 400khz) bus speed for the card id - // sequence for all reasonable master clock speeds. - - AT91C_BASE_MCI->MCI_CR = AT91C_MCI_MCIDIS | 0x80; - AT91C_BASE_MCI->MCI_IDR = 0xFFFFFFFF; - AT91C_BASE_MCI->MCI_DTOR = AT91C_MCI_DTOR_1MEGA_CYCLES; - AT91C_BASE_MCI->MCI_MR = AT91C_MCI_PDCMODE | 114; /* clkdiv 114 = MCK/230 */ - AT91C_BASE_MCI->MCI_SDCR = AT91C_MCI_MMC_SLOTA; - AT91C_BASE_MCI->MCI_CR = AT91C_MCI_MCIEN|AT91C_MCI_PWSEN; - - // Wait for the card to come out of power-up-busy state by repeatedly - // sending ACMD41. This also probes for SDHC versus standard cards. - - for (i = 0; i < 100; i++) { - if (MCI_SDCard_GetOCR() == 0) - break; - if ((i & 0x01) == 0) { - printf("."); - } - } - if (i >= 100) - return 0; - - if (MCI_SDCard_GetCID(tab_response)) - return 0; - - // Tell the card to set its address, and remember the result. - - if (MCI_SendCommand(SET_RELATIVE_ADDR_CMD, 0)) - return 0; - MCI_Device.RCA = (AT91C_BASE_MCI->MCI_RSPR[0] >> 16); - - // After sending CMD3 (set addr) we can increase the clock to full speed. - // Using MCK/4 gives a legal (under 25mhz) bus speed for all reasonable - // master clock speeds. - - AT91C_BASE_MCI->MCI_MR = AT91C_MCI_PDCMODE | 1; /* clkdiv 1 = MCK/4 */ - - if (MCI_GetCSD(MCI_Device.RCA,tab_response)) - return 0; - MCI_Device.READ_BL_LEN = (tab_response[1] >> CSD_1_RD_B_LEN_S) & - CSD_1_RD_B_LEN_M; - -#ifdef REPORT_SIZE - { - unsigned int mult,blocknr; - // compute MULT - mult = 1 << ( ((tab_response[2] >> CSD_2_C_SIZE_M_S) & - CSD_2_C_SIZE_M_M) + 2 ); - // compute MSB of C_SIZE - blocknr = ((tab_response[1] >> CSD_1_CSIZE_H_S) & - CSD_1_CSIZE_H_M) << 2; - // compute MULT * (LSB of C-SIZE + MSB already computed + 1) = BLOCKNR - blocknr = mult * ((blocknr + ((tab_response[2] >> CSD_2_CSIZE_L_S) & - CSD_2_CSIZE_L_M)) + 1); - MCI_Device.Memory_Capacity = (1 << MCI_Device.READ_BL_LEN) * blocknr; - printf("Found SD card %u bytes\n", MCI_Device.Memory_Capacity); - } -#endif - - // Select card and set block length for following transfers. - - if (MCI_SendCommand(SEL_DESEL_CARD_CMD, (MCI_Device.RCA)<<16)) - return 0; - if (MCI_SendCommand(SET_BLOCKLEN_CMD, SD_BLOCK_SIZE)) - return 0; - - return 1; -} Property changes on: head/sys/boot/arm/at91/libat91/sd-card.c ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sys/boot/arm/ixp425/Makefile.inc =================================================================== --- head/sys/boot/arm/ixp425/Makefile.inc (revision 324981) +++ head/sys/boot/arm/ixp425/Makefile.inc (nonexistent) @@ -1,42 +0,0 @@ -# $FreeBSD$ - -.if !target(__ixp425_boot_Makefile.inc__) -.PATH: ${.CURDIR}/../../../../libkern ${.CURDIR}/../../../../libkern/arm - -__ixp425_boot_Makefile.inc__: - -# Both Avila and Pronghorn Metro are supported by ixp425 -BOOT_FLAVOR=ixp425 - -CFLAGS+=-Os -ffreestanding \ - -I${.CURDIR}/../../../.. \ - -I${.CURDIR}/../../../../arm \ - -DCPU_XSCALE_IXP425 \ - -Wall -Waggregate-return \ - -Werror \ - -Wnested-externs \ - -Wpointer-arith -Wshadow -Wwrite-strings \ - -Wmissing-prototypes \ - -Wmissing-declarations - -# -Wstrict-prototypes - -CFLAGS+=-DBOOT_${BOOT_FLAVOR:tu} - -LD ?= ld -OBJCOPY ?= objcopy - -.if defined(P) -${P}: ${OBJS} - ${LD} ${LDFLAGS} -o ${.TARGET} ${OBJS} - -CLEANFILES+= ${P} -.endif - -.if defined(WITH_TAG_LIST) -MK_TAG_LIST:=yes -.else -MK_TAG_LIST:=no -.endif - -.endif Property changes on: head/sys/boot/arm/ixp425/Makefile.inc ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/sys/boot/arm/ixp425/boot2/arm_init.S =================================================================== --- head/sys/boot/arm/ixp425/boot2/arm_init.S (revision 324981) +++ head/sys/boot/arm/ixp425/boot2/arm_init.S (nonexistent) @@ -1,58 +0,0 @@ -/*- - * Copyright (c) 2008 John Hay. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include - -ASENTRY_NP(start) -/* Initialise bss and sp */ - nop - adr r1, .Lstart - ldmia r1, {r1, r2, sp} /* Set initial stack and */ - sub r2, r2, r1 /* get zero init data */ - mov r3, #0 -.L1: - str r3, [r1], #0x0004 /* get zero init data */ - subs r2, r2, #4 - bgt .L1 - - .extern main - bl main -/* main should not return. If it does, spin forever */ -infiniteLoop: - b infiniteLoop -END(start) - -.Lstart: - .word _edata - .word _end - .word BOOT_STACK - -ENTRY(cpu_id) - mrc p15, 0, r0, c0, c0, 0 - RET -END(cpu_id) - -/* End */ Property changes on: head/sys/boot/arm/ixp425/boot2/arm_init.S ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/sys/boot/arm/ixp425/boot2/lib.h =================================================================== --- head/sys/boot/arm/ixp425/boot2/lib.h (revision 324981) +++ head/sys/boot/arm/ixp425/boot2/lib.h (nonexistent) @@ -1,67 +0,0 @@ -/*- - * Copyright (c) 2008 John Hay. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef ARM_BOOT_LIB_H -#define ARM_BOOT_LIB_H - -#include -#include - -int main(void); - -void DELAY(int); - -int getc(int); -void putchar(int); -void xputchar(int); -void putstr(const char *); -void puthex8(u_int8_t); -void puthexlist(const u_int8_t *, int); -void printf(const char *fmt,...); - -void bzero(void *, size_t); -char *strcpy(char *to, const char *from); -int strcmp(const char *to, const char *from); -int p_strlen(const char *); -int p_memcmp(const char *, const char *, unsigned); -void *memchr(const void *, int, size_t); -void memcpy(void *to, const void *from, unsigned size); -void *memmem(const void *, size_t, const void *, size_t); -void p_memset(char *buffer, char value, int size); - -#define strlen p_strlen -#define memcmp p_memcmp -#define memset p_memset - -u_int16_t swap16(u_int16_t); -u_int32_t swap32(u_int32_t); - -const char *board_init(void); -void clr_board(void); -int avila_read(char*, unsigned, unsigned); -u_int cpu_id(void); - -#endif /* !ARM_BOOT_LIB_H */ Property changes on: head/sys/boot/arm/ixp425/boot2/lib.h ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/sys/boot/arm/ixp425/boot2/ixp425_board.c =================================================================== --- head/sys/boot/arm/ixp425/boot2/ixp425_board.c (revision 324981) +++ head/sys/boot/arm/ixp425/boot2/ixp425_board.c (nonexistent) @@ -1,771 +0,0 @@ -/*- - * Copyright (c) 2008 John Hay. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -__FBSDID("$FreeBSD$"); -#include -#include -#include - -#include - -#include "lib.h" -#include "cf_ata.h" - -#include -#include -#include - -struct board_config { - const char *desc; - int (*probe)(int boardtype_hint); - void (*init)(void); -}; -/* set of registered boards */ -SET_DECLARE(boards, struct board_config); -#define BOARD_CONFIG(name, _desc) \ -static struct board_config name##config = { \ - .desc = _desc, \ - .probe = name##_probe, \ - .init = name##_init, \ -}; \ -DATA_SET(boards, name##config) - -static u_int cputype; -#define cpu_is_ixp43x() (cputype == CPU_ID_IXP435) -static u_int8_t *ubase; - -static u_int8_t uart_getreg(u_int8_t *, int); -static void uart_setreg(u_int8_t *, int, u_int8_t); - -static void cf_init(void); -static void cf_clr(void); - -#ifdef DEBUG -#define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__) -#else -#define DPRINTF(fmt, ...) -#endif - -const char * -board_init(void) -{ - struct board_config **pbp; - - cputype = cpu_id() & CPU_ID_CPU_MASK; - - SET_FOREACH(pbp, boards) - /* XXX pass down redboot board type */ - if ((*pbp)->probe(0)) { - (*pbp)->init(); - return (*pbp)->desc; - } - /* XXX panic, unknown board type */ - return "???"; -} - -/* - * This should be called just before starting the kernel. This is so - * that one can undo incompatible hardware settings. - */ -void -clr_board(void) -{ - cf_clr(); -} - -/* - * General support functions. - */ - -/* - * DELAY should delay for the number of microseconds. - * The idea is that the inner loop should take 1us, so val is the - * number of usecs to delay. - */ -void -DELAY(int val) -{ - volatile int sub; - volatile int subsub; - - sub = val; - while(sub) { - subsub = 3; - while(subsub) - subsub--; - sub--; - } -} - -u_int32_t -swap32(u_int32_t a) -{ - return (((a & 0xff) << 24) | ((a & 0xff00) << 8) | - ((a & 0xff0000) >> 8) | ((a & 0xff000000) >> 24)); -} - -u_int16_t -swap16(u_int16_t val) -{ - return (val << 8) | (val >> 8); -} - -/* - * uart related funcs - */ -static u_int8_t -uart_getreg(u_int8_t *bas, int off) -{ - return *((volatile u_int32_t *)(bas + (off << 2))) & 0xff; -} - -static void -uart_setreg(u_int8_t *bas, int off, u_int8_t val) -{ - *((volatile u_int32_t *)(bas + (off << 2))) = (u_int32_t)val; -} - -int -getc(int seconds) -{ - int c, delay, limit; - - c = 0; - delay = 10000; - limit = seconds * 1000000/10000; - while ((uart_getreg(ubase, REG_LSR) & LSR_RXRDY) == 0 && --limit) - DELAY(delay); - - if ((uart_getreg(ubase, REG_LSR) & LSR_RXRDY) == LSR_RXRDY) - c = uart_getreg(ubase, REG_DATA); - - return c; -} - -void -putchar(int ch) -{ - int delay, limit; - - delay = 500; - limit = 20; - while ((uart_getreg(ubase, REG_LSR) & LSR_THRE) == 0 && --limit) - DELAY(delay); - uart_setreg(ubase, REG_DATA, ch); - - limit = 40; - while ((uart_getreg(ubase, REG_LSR) & LSR_TEMT) == 0 && --limit) - DELAY(delay); -} - -void -xputchar(int ch) -{ - if (ch == '\n') - putchar('\r'); - putchar(ch); -} - -void -putstr(const char *str) -{ - while(*str) - xputchar(*str++); -} - -void -puthex8(u_int8_t ch) -{ - const char *hex = "0123456789abcdef"; - - putchar(hex[ch >> 4]); - putchar(hex[ch & 0xf]); -} - -void -puthexlist(const u_int8_t *str, int length) -{ - while(length) { - puthex8(*str); - putchar(' '); - str++; - length--; - } -} - -/* - * - * CF/IDE functions. - * - */ - -struct { - u_int64_t dsize; - u_int64_t total_secs; - u_int8_t heads; - u_int8_t sectors; - u_int32_t cylinders; - - u_int32_t *cs1to; - u_int32_t *cs2to; - - u_int8_t *cs1; - u_int8_t *cs2; - - u_int32_t use_lba; - u_int32_t use_stream8; - u_int32_t debug; - - u_int8_t status; - u_int8_t error; -} dskinf; - -static void cfenable16(void); -static void cfdisable16(void); -static u_int8_t cfread8(u_int32_t off); -static u_int16_t cfread16(u_int32_t off); -static void cfreadstream8(void *buf, int length); -static void cfreadstream16(void *buf, int length); -static void cfwrite8(u_int32_t off, u_int8_t val); -static u_int8_t cfaltread8(u_int32_t off); -static void cfaltwrite8(u_int32_t off, u_int8_t val); -static int cfwait(u_int8_t mask); -static int cfaltwait(u_int8_t mask); -static int cfcmd(u_int32_t cmd, u_int32_t cylinder, u_int32_t head, - u_int32_t sector, u_int32_t count, u_int32_t feature); -static void cfreset(void); -#ifdef DEBUG -static int cfgetparams(void); -#endif -static void cfprintregs(void); - -static void -cf_init(void) -{ - u_int8_t status; -#ifdef DEBUG - int rval; -#endif - - /* NB: board init routines setup other parts of dskinf */ - dskinf.use_stream8 = 0; - dskinf.use_lba = 0; - dskinf.debug = 1; - - DPRINTF("cs1 %x, cs2 %x\n", dskinf.cs1, dskinf.cs2); - - /* Setup the CF window */ - *dskinf.cs1to |= (EXP_BYTE_EN | EXP_WR_EN | EXP_BYTE_RD16 | EXP_CS_EN); - DPRINTF("t1 %x, ", *dskinf.cs1to); - - *dskinf.cs2to |= (EXP_BYTE_EN | EXP_WR_EN | EXP_BYTE_RD16 | EXP_CS_EN); - DPRINTF("t2 %x\n", *dskinf.cs2to); - - /* Detect if there is a disk. */ - cfwrite8(CF_DRV_HEAD, CF_D_IBM); - DELAY(1000); - status = cfread8(CF_STATUS); - if (status != 0x50) - printf("cf-ata0 %x\n", (u_int32_t)status); - if (status == 0xff) { - printf("cf_ata0: No disk!\n"); - return; - } - - cfreset(); - - if (dskinf.use_stream8) { - DPRINTF("setting %d bit mode.\n", 8); - cfwrite8(CF_FEATURE, 0x01); /* Enable 8 bit transfers */ - cfwrite8(CF_COMMAND, ATA_SETFEATURES); - cfaltwait(CF_S_READY); - } - -#ifdef DEBUG - rval = cfgetparams(); - if (rval) - return; -#endif - dskinf.use_lba = 1; - dskinf.debug = 0; -} - -static void -cf_clr(void) -{ - cfwrite8(CF_DRV_HEAD, CF_D_IBM); - cfaltwait(CF_S_READY); - cfwrite8(CF_FEATURE, 0x81); /* Enable 8 bit transfers */ - cfwrite8(CF_COMMAND, ATA_SETFEATURES); - cfaltwait(CF_S_READY); -} - -static void -cfenable16(void) -{ - u_int32_t val; - - val = *dskinf.cs1to; - *dskinf.cs1to = val &~ EXP_BYTE_EN; - DELAY(100); -#if 0 - DPRINTF("%s: cs1 timing reg %x\n", *dskinf.cs1to, __func__); -#endif -} - -static void -cfdisable16(void) -{ - u_int32_t val; - - DELAY(100); - val = *dskinf.cs1to; - *dskinf.cs1to = val | EXP_BYTE_EN; -#if 0 - DPRINTF("%s: cs1 timing reg %x\n", *dskinf.cs1to, __func__); -#endif -} - -static u_int8_t -cfread8(u_int32_t off) -{ - volatile u_int8_t *vp; - - vp = (volatile u_int8_t *)(dskinf.cs1 + off); - return *vp; -} - -static void -cfreadstream8(void *buf, int length) -{ - u_int8_t *lbuf; - u_int8_t tmp; - - lbuf = buf; - while (length) { - tmp = cfread8(CF_DATA); - *lbuf = tmp; -#ifdef DEBUG - if (dskinf.debug && (length > (512 - 32))) { - if ((length % 16) == 0) - xputchar('\n'); - puthex8(tmp); - putchar(' '); - } -#endif - lbuf++; - length--; - } -#ifdef DEBUG - if (dskinf.debug) - xputchar('\n'); -#endif -} - -static u_int16_t -cfread16(u_int32_t off) -{ - volatile u_int16_t *vp; - - vp = (volatile u_int16_t *)(dskinf.cs1 + off); - return swap16(*vp); -} - -static void -cfreadstream16(void *buf, int length) -{ - u_int16_t *lbuf; - - length = length / 2; - cfenable16(); - lbuf = buf; - while (length--) { - *lbuf = cfread16(CF_DATA); - lbuf++; - } - cfdisable16(); -} - -static void -cfwrite8(u_int32_t off, u_int8_t val) -{ - volatile u_int8_t *vp; - - vp = (volatile u_int8_t *)(dskinf.cs1 + off); - *vp = val; -} - -#if 0 -static void -cfwrite16(u_int32_t off, u_int16_t val) -{ - volatile u_int16_t *vp; - - vp = (volatile u_int16_t *)(dskinf.cs1 + off); - *vp = val; -} -#endif - -static u_int8_t -cfaltread8(u_int32_t off) -{ - volatile u_int8_t *vp; - - off &= 0x0f; - vp = (volatile u_int8_t *)(dskinf.cs2 + off); - return *vp; -} - -static void -cfaltwrite8(u_int32_t off, u_int8_t val) -{ - volatile u_int8_t *vp; - - /* - * This is documented in the Intel appnote 302456. - */ - off &= 0x0f; - vp = (volatile u_int8_t *)(dskinf.cs2 + off); - *vp = val; -} - -static int -cfwait(u_int8_t mask) -{ - u_int8_t status; - u_int32_t tout; - - tout = 0; - while (tout <= 5000000) { - status = cfread8(CF_STATUS); - if (status == 0xff) { - printf("%s: master: no status, reselecting\n", - __func__); - cfwrite8(CF_DRV_HEAD, CF_D_IBM); - DELAY(1); - status = cfread8(CF_STATUS); - } - if (status == 0xff) - return -1; - dskinf.status = status; - if (!(status & CF_S_BUSY)) { - if (status & CF_S_ERROR) { - dskinf.error = cfread8(CF_ERROR); - printf("%s: error, status 0x%x error 0x%x\n", - __func__, status, dskinf.error); - } - if ((status & mask) == mask) { - DPRINTF("%s: status 0x%x mask 0x%x tout %u\n", - __func__, status, mask, tout); - return (status & CF_S_ERROR); - } - } - if (tout > 1000) { - tout += 1000; - DELAY(1000); - } else { - tout += 10; - DELAY(10); - } - } - return -1; -} - -static int -cfaltwait(u_int8_t mask) -{ - u_int8_t status; - u_int32_t tout; - - tout = 0; - while (tout <= 5000000) { - status = cfaltread8(CF_ALT_STATUS); - if (status == 0xff) { - printf("cfaltwait: master: no status, reselecting\n"); - cfwrite8(CF_DRV_HEAD, CF_D_IBM); - DELAY(1); - status = cfread8(CF_STATUS); - } - if (status == 0xff) - return -1; - dskinf.status = status; - if (!(status & CF_S_BUSY)) { - if (status & CF_S_ERROR) - dskinf.error = cfread8(CF_ERROR); - if ((status & mask) == mask) { - DPRINTF("cfaltwait: tout %u\n", tout); - return (status & CF_S_ERROR); - } - } - if (tout > 1000) { - tout += 1000; - DELAY(1000); - } else { - tout += 10; - DELAY(10); - } - } - return -1; -} - -static int -cfcmd(u_int32_t cmd, u_int32_t cylinder, u_int32_t head, u_int32_t sector, - u_int32_t count, u_int32_t feature) -{ - if (cfwait(0) < 0) { - printf("cfcmd: timeout\n"); - return -1; - } - cfwrite8(CF_FEATURE, feature); - cfwrite8(CF_CYL_L, cylinder); - cfwrite8(CF_CYL_H, cylinder >> 8); - if (dskinf.use_lba) - cfwrite8(CF_DRV_HEAD, CF_D_IBM | CF_D_LBA | head); - else - cfwrite8(CF_DRV_HEAD, CF_D_IBM | head); - cfwrite8(CF_SECT_NUM, sector); - cfwrite8(CF_SECT_CNT, count); - cfwrite8(CF_COMMAND, cmd); - return 0; -} - -static void -cfreset(void) -{ - u_int8_t status; - u_int32_t tout; - - cfwrite8(CF_DRV_HEAD, CF_D_IBM); - DELAY(1); -#ifdef DEBUG - cfprintregs(); -#endif - cfread8(CF_STATUS); - cfaltwrite8(CF_ALT_DEV_CTR, CF_A_IDS | CF_A_RESET); - DELAY(10000); - cfaltwrite8(CF_ALT_DEV_CTR, CF_A_IDS); - DELAY(10000); - cfread8(CF_ERROR); - DELAY(3000); - - for (tout = 0; tout < 310000; tout++) { - cfwrite8(CF_DRV_HEAD, CF_D_IBM); - DELAY(1); - status = cfread8(CF_STATUS); - if (!(status & CF_S_BUSY)) - break; - DELAY(100); - } - DELAY(1); - if (status & CF_S_BUSY) { - cfprintregs(); - printf("cfreset: Status stayed busy after reset.\n"); - } - DPRINTF("cfreset: finished, tout %u\n", tout); -} - -#ifdef DEBUG -static int -cfgetparams(void) -{ - u_int8_t *buf; - - buf = (u_int8_t *)(0x170000); - p_memset((char *)buf, 0, 1024); - /* Select the drive. */ - cfwrite8(CF_DRV_HEAD, CF_D_IBM); - DELAY(1); - cfcmd(ATA_ATA_IDENTIFY, 0, 0, 0, 0, 0); - if (cfaltwait(CF_S_READY | CF_S_DSC | CF_S_DRQ)) { - printf("cfgetparams: ATA_IDENTIFY failed.\n"); - return -1; - } - if (dskinf.use_stream8) - cfreadstream8(buf, 512); - else - cfreadstream16(buf, 512); - if (dskinf.debug) - cfprintregs(); -#if 0 - memcpy(&dskinf.ata_params, buf, sizeof(struct ata_params)); - dskinf.cylinders = dskinf.ata_params.cylinders; - dskinf.heads = dskinf.ata_params.heads; - dskinf.sectors = dskinf.ata_params.sectors; - printf("dsk0: sec %x, hd %x, cyl %x, stat %x, err %x\n", - (u_int32_t)dskinf.ata_params.sectors, - (u_int32_t)dskinf.ata_params.heads, - (u_int32_t)dskinf.ata_params.cylinders, - (u_int32_t)dskinf.status, - (u_int32_t)dskinf.error); -#endif - dskinf.status = cfread8(CF_STATUS); - if (dskinf.debug) - printf("cfgetparams: ata_params * %x, stat %x\n", - (u_int32_t)buf, (u_int32_t)dskinf.status); - return 0; -} -#endif /* DEBUG */ - -static void -cfprintregs(void) -{ - u_int8_t rv; - - putstr("cfprintregs: regs error "); - rv = cfread8(CF_ERROR); - puthex8(rv); - putstr(", count "); - rv = cfread8(CF_SECT_CNT); - puthex8(rv); - putstr(", sect "); - rv = cfread8(CF_SECT_NUM); - puthex8(rv); - putstr(", cyl low "); - rv = cfread8(CF_CYL_L); - puthex8(rv); - putstr(", cyl high "); - rv = cfread8(CF_CYL_H); - puthex8(rv); - putstr(", drv head "); - rv = cfread8(CF_DRV_HEAD); - puthex8(rv); - putstr(", status "); - rv = cfread8(CF_STATUS); - puthex8(rv); - putstr("\n"); -} - -int -avila_read(char *dest, unsigned source, unsigned length) -{ - if (dskinf.use_lba == 0 && source == 0) - source++; - if (dskinf.debug) - printf("avila_read: 0x%x, sect %d num secs %d\n", - (u_int32_t)dest, source, length); - while (length) { - cfwait(CF_S_READY); - /* cmd, cyl, head, sect, count, feature */ - cfcmd(ATA_READ, (source >> 8) & 0xffff, source >> 24, - source & 0xff, 1, 0); - - cfwait(CF_S_READY | CF_S_DRQ | CF_S_DSC); - if (dskinf.use_stream8) - cfreadstream8(dest, 512); - else - cfreadstream16(dest, 512); - length--; - source++; - dest += 512; - } - return 0; -} - -/* - * Gateworks Avila Support. - */ -static int -avila_probe(int boardtype_hint) -{ - volatile u_int32_t *cs; - /* - * Redboot only configure the chip selects that are needed, so - * use that to figure out if it is an Avila or ADI board. The - * Avila boards use CS2 and ADI does not. - */ - cs = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS2_OFFSET); - return (*cs != 0); -} - -static void -avila_init(void) -{ - /* Config the serial port. RedBoot should do the rest. */ - ubase = (u_int8_t *)(IXP425_UART0_HWBASE); - - dskinf.cs1to = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS1_OFFSET); - dskinf.cs2to = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS2_OFFSET); - dskinf.cs1 = (u_int8_t *)IXP425_EXP_BUS_CS1_HWBASE; - dskinf.cs2 = (u_int8_t *)IXP425_EXP_BUS_CS2_HWBASE; - - cf_init(); -} -BOARD_CONFIG(avila, "Gateworks Avila"); - -/* - * Gateworks Cambria Support. - */ -static int -cambria_probe(int boardtype_hint) -{ - return cpu_is_ixp43x(); -} - -static void -cambria_init(void) -{ - /* Config the serial port. RedBoot should do the rest. */ - ubase = (u_int8_t *)(IXP425_UART0_HWBASE); - - dskinf.cs1to = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS3_OFFSET); - dskinf.cs2to = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS4_OFFSET); - dskinf.cs1 = (u_int8_t *)CAMBRIA_CFSEL0_HWBASE; - dskinf.cs2 = (u_int8_t *)CAMBRIA_CFSEL1_HWBASE; - - cf_init(); -} -BOARD_CONFIG(cambria, "Gateworks Cambria"); - -/* - * Pronghorn Metro Support. - */ -static int -pronghorn_probe(int boardtype_hint) -{ - volatile u_int32_t *cs; - /* - * Redboot only configure the chip selects that are needed, so - * use that to figure out if it is an Avila or ADI board. The - * Avila boards use CS2 and ADI does not. - */ - cs = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS2_OFFSET); - return (*cs == 0); -} - -static void -pronghorn_init(void) -{ - /* Config the serial port. RedBoot should do the rest. */ - ubase = (u_int8_t *)(IXP425_UART1_HWBASE); - - dskinf.cs1to = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS3_OFFSET); - dskinf.cs2to = (u_int32_t *)(IXP425_EXP_HWBASE + EXP_TIMING_CS4_OFFSET); - dskinf.cs1 = (u_int8_t *)IXP425_EXP_BUS_CS3_HWBASE; - dskinf.cs2 = (u_int8_t *)IXP425_EXP_BUS_CS4_HWBASE; - - cf_init(); -} -BOARD_CONFIG(pronghorn, "Pronghorn Metro"); Property changes on: head/sys/boot/arm/ixp425/boot2/ixp425_board.c ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/sys/boot/arm/ixp425/boot2/boot2.c =================================================================== --- head/sys/boot/arm/ixp425/boot2/boot2.c (revision 324981) +++ head/sys/boot/arm/ixp425/boot2/boot2.c (nonexistent) @@ -1,446 +0,0 @@ -/*- - * Copyright (c) 2008 John Hay - * Copyright (c) 1998 Robert Nordier - * All rights reserved. - * - * Redistribution and use in source and binary forms are freely - * permitted provided that the above copyright notice and this - * paragraph and the following disclaimer are duplicated in all - * such forms. - * - * This software is provided "AS IS" and without any express or - * implied warranties, including, without limitation, the implied - * warranties of merchantability and fitness for a particular - * purpose. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include - -#include - -#include - -#include "lib.h" -#include "paths.h" -#include "rbx.h" - -extern uint32_t _end; - -#define NOPT 6 - -static const char optstr[NOPT] = "agnrsv"; -static const unsigned char flags[NOPT] = { - RBX_ASKNAME, - RBX_GDB, - RBX_NOINTR, - RBX_DFLTROOT, - RBX_SINGLE, - RBX_VERBOSE -}; - -static unsigned dsk_start; -static char cmd[512]; -static char kname[1024]; -static uint32_t opts; -static uint8_t dsk_meta; -static int bootslice; -static int bootpart; -static int disk_layout; -#define DL_UNKNOWN 0 -#define DL_RAW 1 /* Dangerously dedicated */ -#define DL_SLICE 2 /* Use only slices (DOS partitions) */ -#define DL_SLICEPART 3 /* Use slices and partitions */ - -static void load(void); -static int parse(void); -static int dskread(void *, unsigned, unsigned); -static int drvread(void *, unsigned, unsigned); -#ifdef FIXUP_BOOT_DRV -static void fixup_boot_drv(caddr_t, int, int, int); -#endif - -#include "ufsread.c" - -#ifdef DEBUG -#define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__) -#else -#define DPRINTF(fmt, ...) -#endif - -static inline int -xfsread(ufs_ino_t inode, void *buf, size_t nbyte) -{ - if ((size_t)fsread(inode, buf, nbyte) != nbyte) - return -1; - return 0; -} - -static inline void -getstr(int c) -{ - char *s; - - s = cmd; - if (c == 0) - c = getc(10000); - for (;;) { - switch (c) { - case 0: - break; - case '\177': - case '\b': - if (s > cmd) { - s--; - printf("\b \b"); - } - break; - case '\n': - case '\r': - *s = 0; - return; - default: - if (s - cmd < sizeof(cmd) - 1) - *s++ = c; - xputchar(c); - } - c = getc(10000); - } -} - -int -main(void) -{ - const char *bt; - int autoboot, c = 0; - ufs_ino_t ino; - - dmadat = (void *)(0x1c0000); - p_memset((char *)dmadat, 0, 32 * 1024); - bt = board_init(); - - printf("FreeBSD ARM (%s) boot2 v%d.%d\n", bt, 0, 4); - - autoboot = 1; - - /* Process configuration file */ - if ((ino = lookup(PATH_CONFIG)) || - (ino = lookup(PATH_DOTCONFIG))) - fsread(ino, cmd, sizeof(cmd)); - - if (*cmd) { - if (parse()) - autoboot = 0; - printf("%s: %s\n", PATH_CONFIG, cmd); - /* Do not process this command twice */ - *cmd = 0; - } - - if (*kname == '\0') - strcpy(kname, PATH_KERNEL); - - /* Present the user with the boot2 prompt. */ - for (;;) { - printf("\nDefault: %s\nboot: ", kname); - if (!autoboot || - (OPT_CHECK(RBX_NOINTR) == 0 && (c = getc(2)) != 0)) - getstr(c); - xputchar('\n'); - autoboot = 0; - c = 0; - DPRINTF("cmd is '%s'\n", cmd); - if (parse()) - xputchar('\a'); - else - load(); - } -} - -static void -load(void) -{ - Elf32_Ehdr eh; - static Elf32_Phdr ep[2]; - caddr_t p; - ufs_ino_t ino; - uint32_t addr; - int i, j; -#ifdef FIXUP_BOOT_DRV - caddr_t staddr; - int klen; - - staddr = (caddr_t)0xffffffff; - klen = 0; -#endif - if (!(ino = lookup(kname))) { - if (!ls) - printf("No %s\n", kname); - return; - } - DPRINTF("Found %s\n", kname); - if (xfsread(ino, &eh, sizeof(eh))) - return; - if (!IS_ELF(eh)) { - printf("Invalid %s\n", "format"); - return; - } - fs_off = eh.e_phoff; - for (j = i = 0; i < eh.e_phnum && j < 2; i++) { - if (xfsread(ino, ep + j, sizeof(ep[0]))) - return; - if (ep[j].p_type == PT_LOAD) - j++; - } - for (i = 0; i < 2; i++) { - p = (caddr_t)(ep[i].p_paddr & 0x0fffffff); - fs_off = ep[i].p_offset; -#ifdef FIXUP_BOOT_DRV - if (staddr == (caddr_t)0xffffffff) - staddr = p; - klen += ep[i].p_filesz; -#endif - if (xfsread(ino, p, ep[i].p_filesz)) - return; - } - addr = eh.e_entry & 0x0fffffff; - DPRINTF("Entry point %x for %s\n", addr, kname); - clr_board(); -#ifdef FIXUP_BOOT_DRV - fixup_boot_drv(staddr, klen, bootslice, bootpart); -#endif - ((void(*)(int))addr)(RB_BOOTINFO /* XXX | (opts & RBX_MASK) */); -} - -static int -parse() -{ - char *arg = cmd; - char *ep, *p; - int c, i; - - while ((c = *arg++)) { - if (c == ' ' || c == '\t' || c == '\n') - continue; - for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++); - ep = p; - if (*p) - *p++ = 0; - if (c == '-') { - while ((c = *arg++)) { - for (i = 0; c != optstr[i]; i++) - if (i == NOPT - 1) - return -1; - opts ^= OPT_SET(flags[i]); - } - } else { - arg--; - /* look for ad0s1a:... | ad0s1:... */ - if (strlen(arg) > 6 && arg[0] == 'a' && - arg[1] == 'd' && arg[3] == 's' && - (arg[5] == ':' || arg[6] == ':')) { - /* XXX Should also handle disk. */ - bootslice = arg[4] - '0'; - if (bootslice < 1 || bootslice > 4) - return (-1); - bootpart = 0; - if (arg[5] != ':') - bootpart = arg[5] - 'a'; - if (bootpart < 0 || bootpart > 7) - return (-1); - dsk_meta = 0; - if (arg[5] == ':') - arg += 6; - else - arg += 7; - /* look for ad0a:... */ - } else if (strlen(arg) > 4 && arg[0] == 'a' && - arg[1] == 'd' && arg[2] == '0' && arg[4] == ':') { - bootslice = 0; - bootpart = arg[3] - 'a'; - if (bootpart < 0 || bootpart > 7) - return (-1); - dsk_meta = 0; - arg += 5; - } - if ((i = ep - arg)) { - if ((size_t)i >= sizeof(kname)) - return -1; - memcpy(kname, arg, i + 1); - } - } - arg = p; - } - return 0; -} - -/* - * dskread() will try to handle the disk layouts that are typically - * encountered. - * - raw or "Dangerously Dedicated" mode. No real slice table, just the - * default one that is included with bsdlabel -B. Typically this is - * used with ROOTDEVNAME=\"ufs:ad0a\". - * - slice only. Only a slice table is installed with no bsd label or - * bsd partition table. This is typically used with - * ROOTDEVNAME=\"ufs:ad0s1\". - * - slice + bsd label + partition table. This is typically done with - * with fdisk + bsdlabel and is used with ROOTDEVNAME=\"ufs:ad0s1a\". - */ -static int -dskread(void *buf, unsigned lba, unsigned nblk) -{ - struct dos_partition *dp; - struct disklabel *d; - char *sec; - int i; - - if (!dsk_meta) { - sec = dmadat->secbuf; - dsk_start = 0; - if (drvread(sec, DOSBBSECTOR, 1)) - return -1; - dp = (void *)(sec + DOSPARTOFF); - if (bootslice != 0) { - i = bootslice - 1; - if (dp[i].dp_typ != DOSPTYP_386BSD) - return -1; - } else { - for (i = 0; i < NDOSPART; i++) { - if ((dp[i].dp_typ == DOSPTYP_386BSD) && - (dp[i].dp_flag == 0x80)) - break; - } - } - if (i != NDOSPART) { - bootslice = i + 1; - DPRINTF("Found an active fbsd slice. (%d)\n", i + 1); - /* - * Although dp_start is aligned within the disk - * partition structure, DOSPARTOFF is 446, which - * is only word (2) aligned, not longword (4) - * aligned. Cope by using memcpy to fetch the - * start of this partition. - */ - memcpy(&dsk_start, &dp[i].dp_start, 4); - dsk_start = swap32(dsk_start); - DPRINTF("dsk_start %x\n", dsk_start); - if ((bootslice == 4) && (dsk_start == 0)) { - disk_layout = DL_RAW; - bootslice = 0; - } - } - if (drvread(sec, dsk_start + LABELSECTOR, 1)) - return -1; - d = (void *)(sec + LABELOFFSET); - if ((d->d_magic == DISKMAGIC && d->d_magic2 == DISKMAGIC) || - (swap32(d->d_magic) == DISKMAGIC && - swap32(d->d_magic2) == DISKMAGIC)) { - DPRINTF("p_size = %x\n", - !d->d_partitions[bootpart].p_size); - if (!d->d_partitions[bootpart].p_size) { - printf("Invalid partition\n"); - return -1; - } - DPRINTF("p_offset %x, RAW %x\n", - swap32(d->d_partitions[bootpart].p_offset), - swap32(d->d_partitions[RAW_PART].p_offset)); - dsk_start += swap32(d->d_partitions[bootpart].p_offset); - dsk_start -= swap32(d->d_partitions[RAW_PART].p_offset); - if ((disk_layout == DL_UNKNOWN) && (bootslice == 0)) - disk_layout = DL_RAW; - else if (disk_layout == DL_UNKNOWN) - disk_layout = DL_SLICEPART; - } else { - disk_layout = DL_SLICE; - DPRINTF("Invalid %s\n", "label"); - } - DPRINTF("bootslice %d, bootpart %d, dsk_start %u\n", bootslice, - bootpart, dsk_start); - dsk_meta++; - } - return drvread(buf, dsk_start + lba, nblk); -} - -static int -drvread(void *buf, unsigned lba, unsigned nblk) -{ - static unsigned c = 0x2d5c7c2f; - - printf("%c\b", c = c << 8 | c >> 24); - return (avila_read((char *)buf, lba, nblk)); -} - -#ifdef FIXUP_BOOT_DRV -/* - * fixup_boot_drv() will try to find the ROOTDEVNAME spec in the kernel - * and change it to what was specified on the comandline or /boot.conf - * file or to what was encountered on the disk. It will try to handle 3 - * different disk layouts, raw (dangerously dedicated), slice only and - * slice + partition. It will look for the following strings in the - * kernel, but if it is one of the first three, the string in the kernel - * must use the correct form to match the actual disk layout: - * - ufs:ad0a - * - ufs:ad0s1 - * - ufs:ad0s1a - * - ufs:ROOTDEVNAME - * In the case of the first three strings, only the "a" at the end and - * the "1" after the "s" will be modified, if they exist. The string - * length will not be changed. In the case of the last string, the - * whole string will be built up and nul, '\0' terminated. - */ -static void -fixup_boot_drv(caddr_t addr, int klen, int bs, int bp) -{ - const u_int8_t op[] = "ufs:ROOTDEVNAME"; - const u_int8_t op2[] = "ufs:ad0"; - u_int8_t *p, *ps; - - DPRINTF("fixup_boot_drv: 0x%x, %d, slice %d, partition %d\n", - (int)addr, klen, bs, bp); - if (bs > 4) - return; - if (bp > 7) - return; - ps = memmem(addr, klen, op, sizeof(op)); - if (ps != NULL) { - p = ps + 4; /* past ufs: */ - DPRINTF("Found it at 0x%x\n", (int)ps); - p[0] = 'a'; p[1] = 'd'; p[2] = '0'; /* ad0 */ - p += 3; - if (bs > 0) { - /* append slice */ - *p++ = 's'; - *p++ = bs + '0'; - } - if (disk_layout != DL_SLICE) { - /* append partition */ - *p++ = bp + 'a'; - } - *p = '\0'; - } else { - ps = memmem(addr, klen, op2, sizeof(op2) - 1); - if (ps != NULL) { - p = ps + sizeof(op2) - 1; - DPRINTF("Found it at 0x%x\n", (int)ps); - if (*p == 's') { - /* fix slice */ - p++; - *p++ = bs + '0'; - } - if (*p == 'a') - *p = bp + 'a'; - } - } - if (ps == NULL) { - printf("Could not locate \"%s\" to fix kernel boot device, " - "check ROOTDEVNAME is set\n", op); - return; - } - DPRINTF("Changed boot device to %s\n", ps); -} -#endif Property changes on: head/sys/boot/arm/ixp425/boot2/boot2.c ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/sys/boot/arm/ixp425/boot2/cf_ata.h =================================================================== --- head/sys/boot/arm/ixp425/boot2/cf_ata.h (revision 324981) +++ head/sys/boot/arm/ixp425/boot2/cf_ata.h (nonexistent) @@ -1,62 +0,0 @@ -/*- - * Copyright (c) 2008 John Hay. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef ARM_BOOT_CF_ATA_H -#define ARM_BOOT_CF_ATA_H - -#define CF_DATA 0x00 -#define CF_ERROR 0x01 -#define CF_FEATURE 0x01 -#define CF_SECT_CNT 0x02 -#define CF_SECT_NUM 0x03 -#define CF_CYL_L 0x04 -#define CF_CYL_H 0x05 -#define CF_DRV_HEAD 0x06 -#define CF_D_MASTER 0x00 -#define CF_D_LBA 0x40 -#define CF_D_IBM 0xa0 -#define CF_STATUS 0x07 -#define CF_S_ERROR 0x01 -#define CF_S_INDEX 0x02 -#define CF_S_CORR 0x04 -#define CF_S_DRQ 0x08 -#define CF_S_DSC 0x10 -#define CF_S_DWF 0x20 -#define CF_S_READY 0x40 -#define CF_S_BUSY 0x80 -#define CF_COMMAND 0x07 - -/* This is according to the appnote, but Sam use 0x1e in avila_ata.c */ -#define CF_ALT_STATUS 0x16 -#define CF_ALT_DEV_CTR 0x16 -#define CF_ALT_DEV_CTR2 0x1e -#define CF_A_IDS 0x02 -#define CF_A_RESET 0x04 -#define CF_A_4BIT 0x08 - -#define AVILA_IDE_GPIN 12 - -#endif /* !ARM_BOOT_CF_ATA_H */ Property changes on: head/sys/boot/arm/ixp425/boot2/cf_ata.h ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/sys/boot/arm/ixp425/boot2/Makefile =================================================================== --- head/sys/boot/arm/ixp425/boot2/Makefile (revision 324981) +++ head/sys/boot/arm/ixp425/boot2/Makefile (nonexistent) @@ -1,78 +0,0 @@ -# $FreeBSD$ - -.include - -# We get a lot of the std lib functions from here. -.PATH: ${.CURDIR}/../../at91/libat91 - -# Enable to get debug msgs -#DEBUG=yes - -# Hack to search through the kernel for ufs:ad0s1a and replace it with -# the correct one for the active slice/partition. -FIXUP_BOOT_DRV=yes - -P=boot2 -FILES=${P} -SRCS=arm_init.S boot2.c ${BOOT_FLAVOR:tl}_board.c -SRCS+=memchr.c memcmp.c memcpy.c memmem.c memset.c printf.c strcmp.c strcpy.c -SRCS+=strlen.c ashldi3.c divsi3.S muldi3.c -SRCS+=aeabi_unwind.c -MAN= - -KERNPHYSADDR=0x180000 -KERNVIRTADDR=${KERNPHYSADDR} -BOOT_STACK=0x200000-4 -M=${MACHINE} -LDFLAGS=-e ${KERNPHYSADDR} -EB -T ldscript.${M} -OBJS+= ${SRCS:N*.h:R:S/$/.o/g} -S=${.CURDIR}/../../../.. - -CFLAGS+= \ - -DBOOT_STACK=${BOOT_STACK} \ - -I${.CURDIR}/../../../common \ - -I${.CURDIR} - -.if defined(FIXUP_BOOT_DRV) -CFLAGS+=-DFIXUP_BOOT_DRV -.endif -.if defined(DEBUG) -CFLAGS+=-DDEBUG -.endif - -ldscript.$M: $S/conf/ldscript.$M - cat $S/conf/ldscript.$M|sed s/KERNPHYSADDR/${KERNPHYSADDR}/g| \ - sed s/KERNVIRTADDR/${KERNVIRTADDR}/g | \ - sed s/" + SIZEOF_HEADERS"// > ldscript.$M - -${P}: ldscript.$M - -CLEANFILES+=ldscript.$M - -memchr.c: $S/../lib/libc/string/memchr.c - sed -e 's/string\.h/lib.h/' < $S/../lib/libc/string/memchr.c > \ - ${.TARGET} - -memmem.c: $S/../lib/libc/string/memmem.c - sed -e 's/string\.h/lib.h/' < $S/../lib/libc/string/memmem.c > \ - ${.TARGET} - -CLEANFILES+=memchr.c memmem.c - -ashldi3.o: $S/libkern/ashldi3.c - ${CC} -c ${CFLAGS} -D_KERNEL -o ${.TARGET} ${.IMPSRC} - -divsi3.o: $S/libkern/${M}/divsi3.S - ${CC} -c ${CFLAGS} -D_KERNEL -o ${.TARGET} ${.IMPSRC} - -muldi3.o: $S/libkern/${M}/muldi3.c - ${CC} -c ${CFLAGS} -D_KERNEL -o ${.TARGET} ${.IMPSRC} - -inflate.c: $S/kern/inflate.c - sed -e 's/extern void putstr (char/extern void putstr (const char/' < \ - $S/kern/inflate.c > ${.TARGET} - -CLEANFILES+=inflate.c - -.include - Property changes on: head/sys/boot/arm/ixp425/boot2/Makefile ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property