1/*- 2 * Copyright (c) 2006 M. Warner Losh. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * 24 * This software is derived from software provide by Kwikbyte who specifically 25 * disclaimed copyright on the code. 26 *
| 1/*- 2 * Copyright (c) 2006 M. Warner Losh. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * 24 * This software is derived from software provide by Kwikbyte who specifically 25 * disclaimed copyright on the code. 26 *
|
27 * $FreeBSD: head/sys/boot/arm/at91/libat91/emac_init.c 161370 2006-08-16 23:39:58Z imp $
| 27 * $FreeBSD: head/sys/boot/arm/at91/libat91/emac_init.c 163533 2006-10-20 09:12:05Z imp $
|
28 */ 29 30/****************************************************************************** 31 * 32 * Filename: emac.c 33 * 34 * Instantiation of routines for MAC/ethernet functions supporting tftp. 35 * 36 * Revision information: 37 * 38 * 28AUG2004 kb_admin initial creation 39 * 08JAN2005 kb_admin added tftp download 40 * also adapted from external sources 41 * 42 * BEGIN_KBDD_BLOCK 43 * No warranty, expressed or implied, is included with this software. It is 44 * provided "AS IS" and no warranty of any kind including statutory or aspects 45 * relating to merchantability or fitness for any purpose is provided. All 46 * intellectual property rights of others is maintained with the respective 47 * owners. This software is not copyrighted and is intended for reference 48 * only. 49 * END_BLOCK 50 ******************************************************************************/ 51 52#include "at91rm9200.h" 53#include "at91rm9200_lowlevel.h" 54#include "emac.h" 55#include "lib.h" 56 57/* ****************************** GLOBALS *************************************/ 58
| 28 */ 29 30/****************************************************************************** 31 * 32 * Filename: emac.c 33 * 34 * Instantiation of routines for MAC/ethernet functions supporting tftp. 35 * 36 * Revision information: 37 * 38 * 28AUG2004 kb_admin initial creation 39 * 08JAN2005 kb_admin added tftp download 40 * also adapted from external sources 41 * 42 * BEGIN_KBDD_BLOCK 43 * No warranty, expressed or implied, is included with this software. It is 44 * provided "AS IS" and no warranty of any kind including statutory or aspects 45 * relating to merchantability or fitness for any purpose is provided. All 46 * intellectual property rights of others is maintained with the respective 47 * owners. This software is not copyrighted and is intended for reference 48 * only. 49 * END_BLOCK 50 ******************************************************************************/ 51 52#include "at91rm9200.h" 53#include "at91rm9200_lowlevel.h" 54#include "emac.h" 55#include "lib.h" 56 57/* ****************************** GLOBALS *************************************/ 58
|
59unsigned lastSize; 60unsigned localMACSet, serverMACSet;
| 59unsigned localMACSet;
|
61unsigned char localMACAddr[6]; 62unsigned localMAClow, localMAChigh;
| 60unsigned char localMACAddr[6]; 61unsigned localMAClow, localMAChigh;
|
63unsigned localIPSet, serverIPSet; 64unsigned short serverPort, localPort; 65receive_descriptor_t *p_rxBD;
| |
66 67/* ********************** PRIVATE FUNCTIONS/DATA ******************************/ 68 69/* 70 * .KB_C_FN_DEFINITION_START 71 * void EMAC_SetMACAddress(unsigned low_address, unsigned high_address) 72 * This global function sets the MAC address. low_address is the first 73 * four bytes while high_address is the last 2 bytes of the 48-bit value. 74 * .KB_C_FN_DEFINITION_END 75 */ 76void 77EMAC_SetMACAddress(unsigned char mac[6]) 78{ 79 AT91PS_PMC pPMC = AT91C_BASE_PMC; 80 AT91PS_EMAC pEmac = AT91C_BASE_EMAC; 81 82 /* enable the peripheral clock before using EMAC */ 83 pPMC->PMC_PCER = ((unsigned) 1 << AT91C_ID_EMAC); 84
| 62 63/* ********************** PRIVATE FUNCTIONS/DATA ******************************/ 64 65/* 66 * .KB_C_FN_DEFINITION_START 67 * void EMAC_SetMACAddress(unsigned low_address, unsigned high_address) 68 * This global function sets the MAC address. low_address is the first 69 * four bytes while high_address is the last 2 bytes of the 48-bit value. 70 * .KB_C_FN_DEFINITION_END 71 */ 72void 73EMAC_SetMACAddress(unsigned char mac[6]) 74{ 75 AT91PS_PMC pPMC = AT91C_BASE_PMC; 76 AT91PS_EMAC pEmac = AT91C_BASE_EMAC; 77 78 /* enable the peripheral clock before using EMAC */ 79 pPMC->PMC_PCER = ((unsigned) 1 << AT91C_ID_EMAC); 80
|
85 p_memcpy(localMACAddr, mac, 6);
| 81 memcpy(localMACAddr, mac, 6);
|
86 localMAClow = (mac[2] << 24) | (mac[3] << 16) | (mac[4] << 8) | mac[5]; 87 localMAChigh = (mac[0] << 8) | mac[1]; 88 localMACSet = 1; 89 90 AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_EMAC; 91 AT91C_BASE_PIOA->PIO_ASR = 92 AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 | 93 AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 | 94 AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC | 95 AT91C_PA7_ETXCK_EREFCK; 96 AT91C_BASE_PIOA->PIO_PDR = 97 AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 | 98 AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 | 99 AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC | 100 AT91C_PA7_ETXCK_EREFCK; 101#ifdef BOOT_KB9202 /* Really !RMII */ 102 AT91C_BASE_PIOB->PIO_BSR = 103 AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER | 104 AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV | 105 AT91C_PB18_ECOL | AT91C_PB19_ERXCK; 106 AT91C_BASE_PIOB->PIO_PDR = 107 AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER | 108 AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV | 109 AT91C_PB18_ECOL | AT91C_PB19_ERXCK; 110#endif 111 pEmac->EMAC_CTL = 0; 112 113 pEmac->EMAC_CFG = (pEmac->EMAC_CFG & ~(AT91C_EMAC_CLK)) | 114#ifdef BOOT_TSC 115 AT91C_EMAC_RMII | 116#endif 117 AT91C_EMAC_CLK_HCLK_32 | AT91C_EMAC_CAF; 118 // the sequence write EMAC_SA1L and write EMAC_SA1H must be respected 119 pEmac->EMAC_SA1L = localMAClow; 120 pEmac->EMAC_SA1H = localMAChigh; 121}
| 82 localMAClow = (mac[2] << 24) | (mac[3] << 16) | (mac[4] << 8) | mac[5]; 83 localMAChigh = (mac[0] << 8) | mac[1]; 84 localMACSet = 1; 85 86 AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_EMAC; 87 AT91C_BASE_PIOA->PIO_ASR = 88 AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 | 89 AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 | 90 AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC | 91 AT91C_PA7_ETXCK_EREFCK; 92 AT91C_BASE_PIOA->PIO_PDR = 93 AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 | 94 AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 | 95 AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC | 96 AT91C_PA7_ETXCK_EREFCK; 97#ifdef BOOT_KB9202 /* Really !RMII */ 98 AT91C_BASE_PIOB->PIO_BSR = 99 AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER | 100 AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV | 101 AT91C_PB18_ECOL | AT91C_PB19_ERXCK; 102 AT91C_BASE_PIOB->PIO_PDR = 103 AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER | 104 AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV | 105 AT91C_PB18_ECOL | AT91C_PB19_ERXCK; 106#endif 107 pEmac->EMAC_CTL = 0; 108 109 pEmac->EMAC_CFG = (pEmac->EMAC_CFG & ~(AT91C_EMAC_CLK)) | 110#ifdef BOOT_TSC 111 AT91C_EMAC_RMII | 112#endif 113 AT91C_EMAC_CLK_HCLK_32 | AT91C_EMAC_CAF; 114 // the sequence write EMAC_SA1L and write EMAC_SA1H must be respected 115 pEmac->EMAC_SA1L = localMAClow; 116 pEmac->EMAC_SA1H = localMAChigh; 117}
|
122 123/* 124 * .KB_C_FN_DEFINITION_START 125 * void EMAC_Init(void) 126 * This global function initializes variables used in tftp transfers. 127 * .KB_C_FN_DEFINITION_END 128 */ 129void 130EMAC_Init(void) 131{ 132 p_rxBD = (receive_descriptor_t*)RX_BUFFER_START; 133 localMACSet = 0; 134 serverMACSet = 0; 135 localIPSet = 0; 136 serverIPSet = 0; 137 localPort = SWAP16(0x8002); 138 lastSize = 0; 139}
| |
| |