added mostly dummy changes to allow building of a Sansa e200 bootloader

without functionality


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10399 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Daniel Stenberg 2006-08-01 22:28:14 +00:00
parent 97cf946e4d
commit 0fc30d1174
18 changed files with 874 additions and 5 deletions

View file

@ -1,5 +1,9 @@
#if (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020)
ipod.c
#elif defined(SANSA_E200)
e200.c
#elif defined(IRIVER_H10)
h10.c
#else
main.c
#endif

353
bootloader/e200.c Normal file
View file

@ -0,0 +1,353 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2005 by Dave Chapman
*
* Based on ipod.c by Dave Chapman
* Based on Rockbox iriver bootloader by Linus Nielsen Feltzing
* and the ipodlinux bootloader by Daniel Palffy and Bernard Leach
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "cpu.h"
#include "system.h"
#include "lcd.h"
#include "kernel.h"
#include "thread.h"
#include "ata.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "adc.h"
#include "backlight.h"
#include "panic.h"
#include "power.h"
#include "file.h"
#define XSC(X) #X
#define SC(X) XSC(X)
#define DRAM_START 0x10000000
#define BUTTON_LEFT 1
#define BUTTON_MENU 2
#define BUTTON_RIGHT 3
#define BUTTON_PLAY 4
#define BUTTON_HOLD 5
/* Size of the buffer to store the loaded Rockbox/Linux image */
#define MAX_LOADSIZE (4*1024*1024)
char version[] = APPSVERSION;
typedef struct _image {
unsigned type; /* '' */
unsigned id; /* */
unsigned pad1; /* 0000 0000 */
unsigned devOffset; /* byte offset of start of image code */
unsigned len; /* length in bytes of image */
void *addr; /* load address */
unsigned entryOffset; /* execution start within image */
unsigned chksum; /* checksum for image */
unsigned vers; /* image version */
unsigned loadAddr; /* load address for image */
} image_t;
extern image_t boot_table[];
int line=0;
static void memmove16(void *dest, const void *src, unsigned count)
{
struct bufstr {
unsigned _buf[4];
} *d, *s;
if (src >= dest) {
count = (count + 15) >> 4;
d = (struct bufstr *) dest;
s = (struct bufstr *) src;
while (count--)
*d++ = *s++;
} else {
count = (count + 15) >> 4;
d = (struct bufstr *)(dest + (count <<4));
s = (struct bufstr *)(src + (count <<4));
while (count--)
*--d = *--s;
}
}
#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI)
/* check if number of seconds has past */
int timer_check(int clock_start, unsigned int usecs)
{
if ((USEC_TIMER - clock_start) >= usecs) {
return 1;
} else {
return 0;
}
}
static void ser_opto_keypad_cfg(int val)
{
int start_time;
outl(inl(0x6000d004) & ~0x80, 0x6000d004);
outl(inl(0x7000c104) | 0xc000000, 0x7000c104);
outl(val, 0x7000c120);
outl(inl(0x7000c100) | 0x80000000, 0x7000c100);
outl(inl(0x6000d024) & ~0x10, 0x6000d024);
outl(inl(0x6000d014) | 0x10, 0x6000d014);
start_time = USEC_TIMER;
do {
if ((inl(0x7000c104) & 0x80000000) == 0) {
break;
}
} while (timer_check(start_time, 1500) != 0);
outl(inl(0x7000c100) & ~0x80000000, 0x7000c100);
outl(inl(0x6000d004) | 0x80, 0x6000d004);
outl(inl(0x6000d024) | 0x10, 0x6000d024);
outl(inl(0x6000d014) & ~0x10, 0x6000d014);
outl(inl(0x7000c104) | 0xc000000, 0x7000c104);
outl(inl(0x7000c100) | 0x60000000, 0x7000c100);
}
int opto_keypad_read(void)
{
int loop_cnt, had_io = 0;
for (loop_cnt = 5; loop_cnt != 0;)
{
int key_pressed = 0;
int start_time;
unsigned int key_pad_val;
ser_opto_keypad_cfg(0x8000023a);
start_time = USEC_TIMER;
do {
if (inl(0x7000c104) & 0x4000000) {
had_io = 1;
break;
}
if (had_io != 0) {
break;
}
} while (timer_check(start_time, 1500) != 0);
key_pad_val = inl(0x7000c140);
if ((key_pad_val & ~0x7fff0000) != 0x8000023a) {
loop_cnt--;
} else {
key_pad_val = (key_pad_val << 11) >> 27;
key_pressed = 1;
}
outl(inl(0x7000c100) | 0x60000000, 0x7000c100);
outl(inl(0x7000c104) | 0xc000000, 0x7000c104);
if (key_pressed != 0) {
return key_pad_val ^ 0x1f;
}
}
return 0;
}
#endif
static int key_pressed(void)
{
unsigned char state;
#if CONFIG_KEYPAD == IPOD_4G_PAD
#ifdef IPOD_MINI /* mini 1G only */
state = GPIOA_INPUT_VAL & 0x3f;
if ((state & 0x10) == 0) return BUTTON_LEFT;
if ((state & 0x2) == 0) return BUTTON_MENU;
if ((state & 0x4) == 0) return BUTTON_PLAY;
if ((state & 0x8) == 0) return BUTTON_RIGHT;
#else
state = opto_keypad_read();
if ((state & 0x4) == 0) return BUTTON_LEFT;
if ((state & 0x10) == 0) return BUTTON_MENU;
if ((state & 0x8) == 0) return BUTTON_PLAY;
if ((state & 0x2) == 0) return BUTTON_RIGHT;
#endif
#elif CONFIG_KEYPAD == IPOD_3G_PAD
state = inb(0xcf000030);
if (((state & 0x20) == 0)) return BUTTON_HOLD; /* hold on */
if ((state & 0x08) == 0) return BUTTON_LEFT;
if ((state & 0x10) == 0) return BUTTON_MENU;
if ((state & 0x04) == 0) return BUTTON_PLAY;
if ((state & 0x01) == 0) return BUTTON_RIGHT;
#endif
return 0;
}
int load_rockbox(unsigned char* buf)
{
int fd;
int rc;
int len;
unsigned long chksum;
char model[5];
unsigned long sum;
int i;
char str[80];
fd = open("/.rockbox/" BOOTFILE, O_RDONLY);
if(fd < 0)
{
fd = open("/" BOOTFILE, O_RDONLY);
if(fd < 0)
return -1;
}
len = filesize(fd) - 8;
if (len > MAX_LOADSIZE)
return -6;
lseek(fd, FIRMWARE_OFFSET_FILE_CRC, SEEK_SET);
rc = read(fd, &chksum, 4);
chksum=betoh32(chksum); /* Rockbox checksums are big-endian */
if(rc < 4)
return -2;
rc = read(fd, model, 4);
if(rc < 4)
return -3;
model[4] = 0;
snprintf(str, 80, "Model: %s", model);
lcd_puts(0, line++, str);
snprintf(str, 80, "Checksum: %x", chksum);
lcd_puts(0, line++, str);
lcd_update();
lseek(fd, FIRMWARE_OFFSET_FILE_DATA, SEEK_SET);
rc = read(fd, buf, len);
if(rc < len)
return -4;
close(fd);
sum = MODEL_NUMBER;
for(i = 0;i < len;i++) {
sum += buf[i];
}
snprintf(str, 80, "Sum: %x", sum);
lcd_puts(0, line++, str);
lcd_update();
if(sum != chksum)
return -5;
return len;
}
/* A buffer to load the Linux kernel or Rockbox into */
unsigned char loadbuffer[MAX_LOADSIZE];
void* main(void)
{
char buf[256];
int imageno=0;
int i;
int rc;
int padding = 0x4400;
image_t *tblp = boot_table;
void* entry;
struct partinfo* pinfo;
unsigned short* identify_info;
/* Turn on the backlight */
#if CONFIG_BACKLIGHT==BL_IPOD4G
/* brightness full */
outl(0x80000000 | (0xff << 16), 0x7000a010);
/* set port B03 on */
outl(((0x100 | 1) << 3), 0x6000d824);
#elif CONFIG_BACKLIGHT==BL_IPODMINI
/* set port B03 on */
outl(((0x100 | 1) << 3), 0x6000d824);
#elif CONFIG_BACKLIGHT==BL_IPODNANO
/* set port B03 on */
outl(((0x100 | 1) << 3), 0x6000d824);
/* set port L07 on */
outl(((0x100 | 1) << 7), 0x6000d12c);
#elif CONFIG_BACKLIGHT==BL_IPOD3G
outl(inl(IPOD_LCD_BASE) | 0x2, IPOD_LCD_BASE);
#endif
/* Return the start address in loaded image */
return entry;
}
/* These functions are present in the firmware library, but we reimplement
them here because the originals do a lot more than we want */
void reset_poweroff_timer(void)
{
}
int dbg_ports(void)
{
return 0;
}
void mpeg_stop(void)
{
}
void usb_acknowledge(void)
{
}
void usb_wait_for_disconnect(void)
{
}
void sys_poweroff(void)
{
}
void system_reboot(void)
{
}

View file

@ -16,3 +16,4 @@ target/arm/*.[chS]
target/sh/*.[chS]
target/coldfire/*.[chS]
target/coldfire/iaudio/x5/*.[chS]
target/arm/sandisk/sansa-e200/*.[chS]

View file

@ -96,12 +96,12 @@ drivers/lcd-ipodvideo.c
#if CONFIG_LCD==LCD_H300
drivers/lcd-h300.c
#endif
#ifndef IAUDIO_X5
#ifndef TARGET_TREE
drivers/power.c
#endif
drivers/led.c
#ifndef SIMULATOR
#ifndef IAUDIO_X5
#ifndef TARGET_TREE
drivers/adc.c
#endif
#ifdef HAVE_MMC
@ -110,9 +110,11 @@ drivers/ata_mmc.c
#ifdef HAVE_FLASH_DISK
drivers/ata_flash.c
#else
#ifndef SANSA_E200
drivers/ata.c
#endif
#endif
#endif
drivers/button.c
drivers/dac.c
drivers/fat.c
@ -217,6 +219,11 @@ drivers/isp1362.c
drivers/m5636.c
#endif
#ifdef SANSA_E200
target/arm/sandisk/sansa-e200/ata.c
target/arm/sandisk/sansa-e200/lcd.c
#endif
#ifdef IAUDIO_X5
target/coldfire/iaudio/x5/power-x5.c
#ifndef SIMULATOR

View file

@ -30,7 +30,8 @@
#if (CONFIG_CPU != MCF5249) && (CONFIG_CPU != TCC730) && \
(CONFIG_CPU != PP5020) && (CONFIG_CPU != PNX0101) && \
(CONFIG_CPU != PP5002) && (CONFIG_CPU != MCF5250)
(CONFIG_CPU != PP5002) && (CONFIG_CPU != MCF5250) && \
(CONFIG_CPU != PP5024)
/* FIX: this doesn't work on iRiver or Gmini or iPod yet */
/* iFP7xx has no remote */

View file

@ -0,0 +1,121 @@
/*
* This config file is for the Sandisk Sansa e200
*/
#define TARGET_TREE /* this target is using the target tree system */
/* For Rolo and boot loader */
#define MODEL_NUMBER 12
/* define this if you have recording possibility */
/*#define HAVE_RECORDING 1*/ /* TODO: add support for this */
/* define this if you have a bitmap LCD display */
#define HAVE_LCD_BITMAP 1
/* define this if you have a colour LCD */
#define HAVE_LCD_COLOR 1
/* define this if you have access to the quickscreen */
#define HAVE_QUICKSCREEN
/* LCD dimensions */
#define LCD_WIDTH 176
#define LCD_HEIGHT 220
#define LCD_DEPTH 16 /* 65536 colours */
#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 byte-swapped */
/* #define IRAM_LCDFRAMEBUFFER IDATA_ATTR *//* put the lcd frame buffer in IRAM */
#define CONFIG_KEYPAD SANSA_E200_PAD
/* Define this if you do software codec */
#define CONFIG_CODEC SWCODEC
/* define this if you have a real-time clock */
#ifndef BOOTLOADER
#define CONFIG_RTC RTC_E8564 /* TODO: figure this out */
#endif
/* Define this if you have a software controlled poweroff */
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000
/* Define this if you have the WM8975 audio codec */
#define HAVE_WM8731
#define AB_REPEAT_ENABLE 1
/* FM Tuner */
/*#define CONFIG_TUNER TEA5767
#define CONFIG_TUNER_XTAL 32768 *//* TODO: what is this? */
/* Define this for LCD backlight available */
#define CONFIG_BACKLIGHT BL_H10 /* TODO: figure this out, probably not necessary
because of 'target' stuff */
#define BATTERY_CAPACITY_DEFAULT 700 /* default battery capacity
TODO: check this, probably different
for different models too */
#ifndef SIMULATOR
/* Define this if you have a PortalPlayer PP5024 */
#define CONFIG_CPU PP5024
/* Define this if you want to use the PP5020 i2c interface */
#define CONFIG_I2C I2C_PP5020
/* Type of mobile power */
#define CONFIG_BATTERY BATT_LPCS355385
#define BATTERY_CAPACITY_MIN 1500 /* min. capacity selectable */
#define BATTERY_CAPACITY_MAX 1600 /* max. capacity selectable */
#define BATTERY_CAPACITY_INC 10 /* capacity increment */
#define BATTERY_TYPES_COUNT 1 /* only one type */
#define BATTERY_SCALE_FACTOR 5865
/* Hardware controlled charging? FIXME */
//#define CONFIG_CHARGING CHARGING_SIMPLE
/* define this if the hardware can be powered off while charging */
/* TODO: should this be set for the H10? */
//#define HAVE_POWEROFF_WHILE_CHARGING
/* The start address index for ROM builds */
#define ROM_START 0x00000000
/* Define this to the CPU frequency */
/* TODO: this is probably wrong */
#define CPU_FREQ 11289600
/* Type of LCD TODO: hopefully the same as the x5 but check this*/
#define CONFIG_LCD LCD_X5
/* Offset ( in the firmware file's header ) to the file length */
#define FIRMWARE_OFFSET_FILE_LENGTH 0
/* Offset ( in the firmware file's header ) to the file CRC */
#define FIRMWARE_OFFSET_FILE_CRC 0
/* Offset ( in the firmware file's header ) to the real data */
#define FIRMWARE_OFFSET_FILE_DATA 8
/* #define USB_IPODSTYLE */
/* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER
/* Virtual LED (icon) */
#define CONFIG_LED LED_VIRTUAL
/* Define this if you have adjustable CPU frequency */
/*#define HAVE_ADJUSTABLE_CPU_FREQ Let's say we don't for now*/
#define BOOTFILE_EXT "e200"
#define BOOTFILE "rockbox." BOOTFILE_EXT
#endif

View file

@ -0,0 +1,120 @@
/*
* This config file is for the iriver H10
*/
/* For Rolo and boot loader */
#define MODEL_NUMBER 11
/* define this if you have recording possibility */
/*#define HAVE_RECORDING 1*/ /* TODO: add support for this */
/* define this if you have a bitmap LCD display */
#define HAVE_LCD_BITMAP 1
/* define this if you have a colour LCD */
#define HAVE_LCD_COLOR 1
/* define this if you have access to the quickscreen */
#define HAVE_QUICKSCREEN
/* LCD dimensions */
#define LCD_WIDTH 160
#define LCD_HEIGHT 128
#define LCD_DEPTH 16 /* 65536 colours */
#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 byte-swapped */
/* #define IRAM_LCDFRAMEBUFFER IDATA_ATTR *//* put the lcd frame buffer in IRAM */
#define CONFIG_KEYPAD IRIVER_H10_PAD
/* Define this if you do software codec */
#define CONFIG_CODEC SWCODEC
/* define this if you have a real-time clock */
#ifndef BOOTLOADER
#define CONFIG_RTC RTC_E8564 /* TODO: figure this out */
#endif
/* Define this if you have a software controlled poweroff */
#define HAVE_SW_POWEROFF
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x80000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000
/* Define this if you have the WM8975 audio codec */
#define HAVE_WM8731
#define AB_REPEAT_ENABLE 1
/* FM Tuner */
/*#define CONFIG_TUNER TEA5767
#define CONFIG_TUNER_XTAL 32768 *//* TODO: what is this? */
/* Define this for LCD backlight available */
#define CONFIG_BACKLIGHT BL_H10 /* TODO: figure this out, probably not necessary
because of 'target' stuff */
#define BATTERY_CAPACITY_DEFAULT 700 /* default battery capacity
TODO: check this, probably different
for different models too */
#ifndef SIMULATOR
/* Define this if you have a PortalPlayer PP5020 */
#define CONFIG_CPU PP5020
/* Define this if you want to use the PP5020 i2c interface */
#define CONFIG_I2C I2C_PP5020
/* Type of mobile power */
#define CONFIG_BATTERY BATT_LPCS355385
#define BATTERY_CAPACITY_MIN 1500 /* min. capacity selectable */
#define BATTERY_CAPACITY_MAX 1600 /* max. capacity selectable */
#define BATTERY_CAPACITY_INC 10 /* capacity increment */
#define BATTERY_TYPES_COUNT 1 /* only one type */
#define BATTERY_SCALE_FACTOR 5865
/* Hardware controlled charging? FIXME */
//#define CONFIG_CHARGING CHARGING_SIMPLE
/* define this if the hardware can be powered off while charging */
/* TODO: should this be set for the H10? */
//#define HAVE_POWEROFF_WHILE_CHARGING
/* The start address index for ROM builds */
#define ROM_START 0x00000000
/* Define this to the CPU frequency */
/* TODO: this is probably wrong */
#define CPU_FREQ 11289600
/* Type of LCD TODO: hopefully the same as the x5 but check this*/
#define CONFIG_LCD LCD_X5
/* Offset ( in the firmware file's header ) to the file length */
#define FIRMWARE_OFFSET_FILE_LENGTH 0
/* Offset ( in the firmware file's header ) to the file CRC */
#define FIRMWARE_OFFSET_FILE_CRC 0
/* Offset ( in the firmware file's header ) to the real data */
#define FIRMWARE_OFFSET_FILE_DATA 8
/* #define USB_IPODSTYLE */
/* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER
/* Virtual LED (icon) */
#define CONFIG_LED LED_VIRTUAL
/* Define this if you have adjustable CPU frequency */
#define HAVE_ADJUSTABLE_CPU_FREQ
#define BOOTFILE_EXT "h10"
#define BOOTFILE "rockbox." BOOTFILE_EXT
#endif

View file

@ -56,6 +56,8 @@
#define IPOD_3G_PAD 8
#define IRIVER_IFP7XX_PAD 9
#define GIGABEAT_PAD 10
#define IRIVER_H10_PAD 11
#define SANSA_E200_PAD 12
/* CONFIG_REMOTE_KEYPAD */
#define H100_REMOTE 1
@ -67,6 +69,7 @@
#define BATT_4AA_NIMH 1500
#define BATT_3AAA 1000 /* Ondio */
#define BATT_LIPOL1300 1300 /* the type used in iRiver h1x0 models */
#define BATT_LPCS355385 1550 /* iriver h10 - SKC LPCS355385 */
/* CONFIG_CHARGING */
#define CHARGING_SIMPLE 1 /* Simple, hardware controlled charging */
@ -182,6 +185,10 @@
#include "config-ipodmini.h"
#elif defined(IPOD_MINI2G)
#include "config-ipodmini2g.h"
#elif defined(IRIVER_H10)
#include "config-h10.h"
#elif defined(SANSA_E200)
#include "config-e200.h"
#else
/* no known platform */
#endif
@ -203,7 +210,7 @@
#endif
/* define for all cpus from ARM family */
#if (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) || (CONFIG_CPU == PNX0101) || (CONFIG_CPU == S3C2440)
#if (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) || (CONFIG_CPU == PNX0101) || (CONFIG_CPU == S3C2440) || (CONFIG_CPU == PP5024)
#define CPU_ARM
#endif

View file

@ -36,6 +36,9 @@
#if CONFIG_CPU == PP5002
#include "pp5002.h"
#endif
#if CONFIG_CPU == PP5024
#include "pp5024.h"
#endif
#if CONFIG_CPU == PNX0101
#include "pnx0101.h"
#endif

26
firmware/export/pp5024.h Normal file
View file

@ -0,0 +1,26 @@
#ifndef __PP5024_H__
#define __PP5024_H__
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Daniel Stenberg
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
/* We believe is this quite similar to the 5020 and for how we just use that
completely */
#include "pp5020.h"
#endif

View file

@ -344,7 +344,7 @@ void tick_start(unsigned int interval_in_ms)
IMR0 |= (1<<2);
}
#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020)
#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) || (CONFIG_CPU==PP5024)
#ifndef BOOTLOADER
void TIMER1(void)

View file

@ -248,6 +248,8 @@ void pcm_init(void)
#define FIFO_FREE_COUNT ((IISFIFO_CFG & 0x3f0000) >> 16)
#elif CONFIG_CPU == PP5002
#define FIFO_FREE_COUNT ((IISFIFO_CFG & 0x7800000) >> 23)
#elif CONFIG_CPU == PP5024
#define FIFO_FREE_COUNT 4 /* TODO: make this sensible */
#endif
static int pcm_freq = 44100; /* 44.1 is default */
@ -268,6 +270,7 @@ static void dma_start(const void *addr, size_t size)
/* setup I2S interrupt for FIQ */
outl(inl(0x6000402c) | I2S_MASK, 0x6000402c);
outl(I2S_MASK, 0x60004024);
#elif CONFIG_CPU == PP5024
#else
/* setup I2S interrupt for FIQ */
outl(inl(0xcf00102c) | DMA_OUT_MASK, 0xcf00102c);

View file

@ -0,0 +1 @@
/* nothing here yet */

View file

@ -0,0 +1,198 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 Daniel Stenberg
*
* All files in this archive are subject to the GNU General Public License.
* See the file COPYING in the source tree root for full license agreement.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "ata.h"
#include <stdbool.h>
#include <string.h>
#define SECTOR_SIZE (512)
static unsigned short identify_info[SECTOR_SIZE];
int ata_spinup_time = 0;
long last_disk_activity = -1;
void flash_select_chip(int no, int sel)
{
}
unsigned char flash_read_data(void)
{
}
void flash_write_data(unsigned char data)
{
}
void flash_write_cmd(unsigned char cmd)
{
}
void flash_write_addr(unsigned char addr)
{
}
void flash_wait_ready(void)
{
}
int flash_map_sector(int sector, int* chip, int* chip_sector)
{
}
int flash_read_id(int no)
{
}
int flash_read_sector(int sector, unsigned char* buf,
unsigned char* oob)
{
}
int flash_read_sector_oob(int sector, unsigned char* oob)
{
}
static int flash_get_n_segments(void)
{
}
static int flash_get_n_phblocks(void)
{
}
static int flash_get_n_sectors_in_block(void)
{
}
static int flash_phblock_to_sector(int segment, int block)
{
}
static int flash_is_bad_block(unsigned char* oob)
{
}
int flash_disk_scan(void)
{
}
int flash_disk_find_block(int block)
{
}
int flash_disk_read_sectors(unsigned long start,
int count,
void* buf)
{
}
int ata_read_sectors(IF_MV2(int drive,)
unsigned long start,
int incount,
void* inbuf)
{
}
int ata_write_sectors(IF_MV2(int drive,)
unsigned long start,
int count,
const void* buf)
{
(void)start;
(void)count;
(void)buf;
return -1;
}
/* schedule a single sector write, executed with the the next spinup
(volume 0 only, used for config sector) */
extern void ata_delayed_write(unsigned long sector, const void* buf)
{
(void)sector;
(void)buf;
}
/* write the delayed sector to volume 0 */
extern void ata_flush(void)
{
}
void ata_spindown(int seconds)
{
(void)seconds;
}
bool ata_disk_is_active(void)
{
return 0;
}
void ata_sleep(void)
{
}
void ata_spin(void)
{
}
/* Hardware reset protocol as specified in chapter 9.1, ATA spec draft v5 */
int ata_hard_reset(void)
{
return 0;
}
int ata_soft_reset(void)
{
return 0;
}
void ata_enable(bool on)
{
(void)on;
}
unsigned short* ata_get_identify(void)
{
}
int ata_init(void)
{
return 0;
}

View file

@ -0,0 +1 @@
/* nothing here yet */

View file

@ -0,0 +1,7 @@
#define BUTTON_POWER 0x00000001
#define BUTTON_LEFT 0x00000002
#define BUTTON_RIGHT 0x00000004
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 40

View file

@ -0,0 +1,15 @@
void lcd_update(void)
{
}
void lcd_update_rect(int x, int y, int width, int height)
{
}
void lcd_init_device(void)
{
}

View file

@ -0,0 +1 @@
/* nothing here yet */