#define __PROXMARK3_H\r
\r
// Might as well have the hardware-specific defines everywhere.\r
-#include <at91sam7s128.h>\r
-\r
+#include <at91sam7s512.h>\r
#include <config_gpio.h>\r
-#define LOW(x) PIO_OUTPUT_DATA_CLEAR = (1 << (x))\r
-#define HIGH(x) PIO_OUTPUT_DATA_SET = (1 << (x))\r
+\r
+#define WDT_HIT() AT91C_BASE_WDTC->WDTC_WDCR = 0xa5000001\r
+\r
+#define PWM_CH_MODE_PRESCALER(x) ((x)<<0)\r
+#define PWM_CHANNEL(x) (1<<(x))\r
+\r
+#define TC_CMR_TCCLKS_TIMER_CLOCK1 (0<<0)\r
+#define TC_CMR_TCCLKS_TIMER_CLOCK2 (1<<0)\r
+#define TC_CMR_TCCLKS_TIMER_CLOCK3 (2<<0)\r
+#define TC_CMR_TCCLKS_TIMER_CLOCK4 (3<<0)\r
+#define TC_CMR_TCCLKS_TIMER_CLOCK5 (4<<0)\r
+\r
+#define ADC_CHAN_LF 4\r
+#define ADC_CHAN_HF 5\r
+#define ADC_MODE_PRESCALE(x) ((x)<<8)\r
+#define ADC_MODE_STARTUP_TIME(x) ((x)<<16)\r
+#define ADC_MODE_SAMPLE_HOLD_TIME(x) ((x)<<24)\r
+#define ADC_CHANNEL(x) (1<<(x))\r
+#define ADC_END_OF_CONVERSION(x) (1<<(x))\r
+\r
+#define SSC_CLOCK_MODE_START(x) ((x)<<8)\r
+#define SSC_FRAME_MODE_WORDS_PER_TRANSFER(x) ((x)<<8)\r
+#define SSC_CLOCK_MODE_SELECT(x) ((x)<<0)\r
+#define SSC_FRAME_MODE_BITS_IN_WORD(x) (((x)-1)<<0)\r
+\r
+#define MC_FLASH_COMMAND_KEY ((0x5a)<<24)\r
+#define MC_FLASH_STATUS_READY (1<<0)\r
+#define MC_FLASH_MODE_FLASH_WAIT_STATES(x) ((x)<<8)\r
+#define MC_FLASH_MODE_MASTER_CLK_IN_MHZ(x) ((x)<<16)\r
+#define MC_FLASH_COMMAND_PAGEN(x) ((x)<<8)\r
+\r
+#define RST_CONTROL_KEY (0xa5<<24)\r
+\r
+#define PMC_MAIN_OSC_ENABLE (1<<0)\r
+#define PMC_MAIN_OSC_STABILIZED (1<<0)\r
+#define PMC_MAIN_OSC_PLL_LOCK (1<<2)\r
+#define PMC_MAIN_OSC_MCK_READY (1<<3)\r
+\r
+#define PMC_MAIN_OSC_STARTUP_DELAY(x) ((x)<<8)\r
+#define PMC_PLL_DIVISOR(x) (x)\r
+#define PMC_CLK_PRESCALE_DIV_2 (1<<2)\r
+#define PMC_PLL_MULTIPLIER(x) (((x)-1)<<16)\r
+#define PMC_PLL_COUNT_BEFORE_LOCK(x) ((x)<<8)\r
+#define PMC_PLL_FREQUENCY_RANGE(x) ((x)<<14)\r
+#define PMC_PLL_USB_DIVISOR(x) ((x)<<28)\r
+\r
+#define UDP_INTERRUPT_ENDPOINT(x) (1<<(x))\r
+#define UDP_CSR_BYTES_RECEIVED(x) (((x) >> 16) & 0x7ff)\r
+//**************************************************************\r
+\r
+#define LOW(x) AT91C_BASE_PIOA->PIO_CODR = (x)\r
+#define HIGH(x) AT91C_BASE_PIOA->PIO_SODR = (x)\r
\r
#define SPI_FPGA_MODE 0\r
#define SPI_LCD_MODE 1\r
#define PACKED __attribute__((__packed__))\r
\r
#define USB_D_PLUS_PULLUP_ON() { \\r
- PIO_OUTPUT_DATA_SET = (1<<GPIO_USB_PU); \\r
- PIO_OUTPUT_ENABLE = (1<<GPIO_USB_PU); \\r
+ HIGH(GPIO_USB_PU); \\r
+ AT91C_BASE_PIOA->PIO_OER = GPIO_USB_PU; \\r
}\r
-#define USB_D_PLUS_PULLUP_OFF() PIO_OUTPUT_DISABLE = (1<<GPIO_USB_PU)\r
-\r
-#define LED_A_ON() PIO_OUTPUT_DATA_SET = (1<<GPIO_LED_A)\r
-#define LED_A_OFF() PIO_OUTPUT_DATA_CLEAR = (1<<GPIO_LED_A)\r
-#define LED_B_ON() PIO_OUTPUT_DATA_SET = (1<<GPIO_LED_B)\r
-#define LED_B_OFF() PIO_OUTPUT_DATA_CLEAR = (1<<GPIO_LED_B)\r
-#define LED_C_ON() PIO_OUTPUT_DATA_SET = (1<<GPIO_LED_C)\r
-#define LED_C_OFF() PIO_OUTPUT_DATA_CLEAR = (1<<GPIO_LED_C)\r
-#define LED_D_ON() PIO_OUTPUT_DATA_SET = (1<<GPIO_LED_D)\r
-#define LED_D_OFF() PIO_OUTPUT_DATA_CLEAR = (1<<GPIO_LED_D)\r
-#define RELAY_ON() PIO_OUTPUT_DATA_SET = (1<<GPIO_RELAY)\r
-#define RELAY_OFF() PIO_OUTPUT_DATA_CLEAR = (1<<GPIO_RELAY)\r
-#define BUTTON_PRESS() !(PIO_PIN_DATA_STATUS & (1<<GPIO_BUTTON))\r
+#define USB_D_PLUS_PULLUP_OFF() AT91C_BASE_PIOA->PIO_ODR = GPIO_USB_PU\r
+\r
+#define LED_A_ON() HIGH(GPIO_LED_A)\r
+#define LED_A_OFF() LOW(GPIO_LED_A)\r
+#define LED_B_ON() HIGH(GPIO_LED_B)\r
+#define LED_B_OFF() LOW(GPIO_LED_B)\r
+#define LED_C_ON() HIGH(GPIO_LED_C)\r
+#define LED_C_OFF() LOW(GPIO_LED_C)\r
+#define LED_D_ON() HIGH(GPIO_LED_D)\r
+#define LED_D_OFF() LOW(GPIO_LED_D)\r
+#define RELAY_ON() HIGH(GPIO_RELAY)\r
+#define RELAY_OFF() LOW(GPIO_RELAY)\r
+#define BUTTON_PRESS() !(AT91C_BASE_PIOA->PIO_PDSR & GPIO_BUTTON)\r
//--------------------------------\r
// USB declarations\r
\r
\r
#define VERSION_INFORMATION_MAGIC 0x56334d50\r
struct version_information {\r
- int magic; /* Magic sequence to identify this as a correct version information structure. Must be VERSION_INFORMATION_MAGIC */ \r
+ int magic; /* Magic sequence to identify this as a correct version information structure. Must be VERSION_INFORMATION_MAGIC */\r
char versionversion; /* Must be 1 */\r
char present; /* 1 if the version information could be created at compile time, otherwise 0 and the remaining fields (except for magic) are empty */\r
char clean; /* 1: Tree was clean, no local changes. 0: Tree was unclean. 2: Couldn't be determined */\r
char buildtime[30]; /* string with the build time */\r
} __attribute__((packed));\r
\r
+#define COMMON_AREA_MAGIC 0x43334d50\r
+#define COMMON_AREA_COMMAND_NONE 0\r
+#define COMMON_AREA_COMMAND_ENTER_FLASH_MODE 1\r
+struct common_area {\r
+ int magic; /* Magic sequence, to distinguish against random uninitialized memory */\r
+ char version; /* Must be 1 */\r
+ char command;\r
+ struct {\r
+ unsigned int bootrom_present:1; /* Set when a bootrom that is capable of parsing the common area is present */\r
+ unsigned int osimage_present:1; /* Set when a osimage that is capable of parsing the common area is present */\r
+ } __attribute__((packed)) flags;\r
+ int arg1, arg2;\r
+} __attribute__((packed));\r
+\r
#endif\r